From 5b880e5f5a8a89c73698c3ab0f51f6be616b6ef9 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Tue, 4 Jun 2024 20:20:22 +1000 Subject: [PATCH 001/145] dummy --- Pipeline_benchmarking_script.R | 205 +++++++++++++++++++++++++-------- R/utilities.R | 6 +- README.rmd | 7 +- 3 files changed, 163 insertions(+), 55 deletions(-) diff --git a/Pipeline_benchmarking_script.R b/Pipeline_benchmarking_script.R index 5e719527..6f9c8740 100644 --- a/Pipeline_benchmarking_script.R +++ b/Pipeline_benchmarking_script.R @@ -2,16 +2,22 @@ install.packages("lobstr") library(lobstr) # Defining resources -Cores <- c(3, 5 ,10, 20, 50, 100, 200) -Sample_size <- c(10, 20, 50, 100) +Cores <- c(3) +Sample_size <- c(1,2, 5, 10, 20, 50, 100, 137) +#Sample_size <- c(2, 5, 10, 20, 50) +#Sample_size <- c(2, 5, 10, 20, 50, 100, 138) + -Cores<- c(3, 5 ,10, 20, 50, 100, 200) -Sample_size<- c(1, 2, 3, 5) setwd("/vast/scratch/users/si.j/susan_fibrosis") +#setwd("/stornext/General/scratch/GP_Transfer/susan_fibrosis") #initial_file_count <- 2 files <- list.files() -store <- "/stornext/General/scratch/GP_Transfer/si.j/store_pipeline_benchmark_fibrosis_all_data_3" +length(files) +store <- "/stornext/General/scratch/GP_Transfer/si.j/benchmark_store" + +#store_contents <- list.files(store) +#need_invalidate <- length(store_contents) > 0 # for (i in initial_file_count:length(files)) { # # tar_invalidate(names = everything(), store = store) @@ -22,55 +28,54 @@ store <- "/stornext/General/scratch/GP_Transfer/si.j/store_pipeline_benchmark_fi # } else { # mem_before <- 0 # } - for(core in Cores) { for(sample_size in Sample_size) { if(length(files) < sample_size) { break # Break if the sample_size exceeds the available files } - #setwd("~/HPCell") - tar_invalidate(names = everything(), store = store) - - # Select the subset of files to process in this iteration - #file_subset <- files[1:i] - file_subset <- files[1:sample_size] - max_workers <- 100 - workers_per_sample <- 4 - number_of_samples <- length(file_subset) - #total_workers <- min(number_of_samples * workers_per_sample, max_workers) - total_workers <- min(core * sample_size, length(file_subset)) - # Initialize computing resources for all files - computing_resources = crew_controller_slurm( - name = "my_controller", - slurm_memory_gigabytes_per_cpu = 20, - slurm_cpus_per_task = 1, - workers = total_workers, - verbose = FALSE - ) - # Time and run your pipeline function - time_taken <- system.time({ - preprocessed_seurat <- run_targets_pipeline( - input_data = file_subset, - tissue = "pbmc", - computing_resources = computing_resources, - sample_column = "sampleName", - store = store, - input_reference = NULL, - cell_type_annotation_column = "cellAnno" + # if (need_invalidate) { + # tar_invalidate(names = everything(), store = store) # Reset flag after invalidation to prevent repeated invalidation in the loop + # } + #tar_invalidate(names = everything(), store = store) + # Select the subset of files to process in this iteration + #file_subset <- files[1:i] + file_subset <- files[1:sample_size] + max_workers <- 100 + workers_per_sample <- 4 + total_workers <- min(core, length(file_subset)) + # Initialize computing resources for all files + computing_resources = crew_controller_slurm( + name = "my_controller", + slurm_memory_gigabytes_per_cpu = 20, + slurm_cpus_per_task = 1, + workers = total_workers, + verbose = FALSE ) - }) - - # Memory usage after pipeline execution - #mem_after <- obj_size(get("preprocessed_seurat", envir = globalenv())) - #mem_used_this_run <- mem_after - mem_before - - # Output the time and memory used for this run - cat("Running with", core, "cores for", sample_size, "samples, using", total_workers, "workers\n") - cat("Sample size:", length(file_subset), "\n", - "Time taken: User time =", time_taken["user.self"], - "System time =", time_taken["sys.self"], - "Elapsed time =", time_taken["elapsed"], "seconds\n") - #"Memory used:", format(mem_used_this_run, units = "Mb"), "\n\n") + # Time and run your pipeline function + #setwd("~/HPCell") + time_taken <- system.time({ + preprocessed_seurat <- run_targets_pipeline( + input_data = file_subset, + tissue = "pbmc", + computing_resources = computing_resources, + sample_column = "sampleName", + store = store, + input_reference = NULL, + cell_type_annotation_column = "cellAnno" + ) + }) + + # Memory usage after pipeline execution + #mem_after <- obj_size(get("preprocessed_seurat", envir = globalenv())) + #mem_used_this_run <- mem_after - mem_before + + # Output the time and memory used for this run + cat("Running with", core, "cores for", sample_size, "samples, using", total_workers, "workers\n") + cat("Sample size:", length(file_subset), "\n", + "Time taken: User time =", time_taken["user.self"], + "System time =", time_taken["sys.self"], + "Elapsed time =", time_taken["elapsed"], "seconds\n") + #"Memory used:", format(mem_used_this_run, units = "Mb"), "\n\n") } } @@ -97,4 +102,108 @@ ggplot(data_melted, aes(x = SampleSize, y = value, colour = variable)) + theme_minimal() + labs(x = "Sample Size", y = "Time (seconds)", title = "Performance Metrics by Sample Size", color = "Metric") + scale_colour_manual(values = c("UserTime" = "cornflowerblue", "SystemTime" = "slategrey", "ElapsedTime" = "coral")) + + + +### Rewriting alternative script +# Defining resources +Cores <- c(16) +Sample_size <- c(1, 2, 5, 10, 20, 50) + +setwd("/stornext/General/scratch/GP_Transfer/susan_fibrosis/") +files <- list.files() +store <- "/stornext/General/scratch/GP_Transfer/si.j/store_pipeline_benchmark_fibrosis_all_data_3" + +# Initialize results dataframe +results <- data.frame(SampleNumber = integer(), DataSize = numeric(), RunningTimeMin = numeric(), Cores = integer()) + +for(core in Cores) { + for(sample_size in Sample_size) { + if(length(files) < sample_size) { + break # Break if the sample_size exceeds the available files + } + + #tar_invalidate(names = everything(), store = store) + + # Select the subset of files to process in this iteration + file_subset <- files[1:sample_size] + total_workers <- min(core, length(file_subset)) + + # Initialize computing resources for all files + computing_resources = crew_controller_slurm( + name = "my_controller", + slurm_memory_gigabytes_per_cpu = 20, + slurm_cpus_per_task = 1, + workers = total_workers, + verbose = FALSE + ) + + # Time and run your pipeline function + time_taken <- system.time({ + preprocessed_seurat <- run_targets_pipeline( + input_data = file_subset, + tissue = "pbmc", + computing_resources = computing_resources, + sample_column = "sampleName", + store = store, + input_reference = NULL, + cell_type_annotation_column = "cellAnno" + ) + }) + + + # Output the results + results <- rbind(results, data.frame( + SampleNumber = sample_size, + DataSize = data_size, + RunningTimeMin = time_taken["elapsed"] / 60, # Convert seconds to minutes + Cores = core + )) + + cat("Running with", core, "cores for", sample_size, "samples, using", total_workers, "workers\n") + cat("Sample size:", length(file_subset), "\n", + "Time taken: User time =", time_taken["user.self"], + "System time =", time_taken["sys.self"], + "Elapsed time =", time_taken["elapsed"], "seconds\n") + } +} + +# Save the results to a CSV file +write.csv(results, "benchmark_results.csv", row.names = FALSE) + +### PLOTTING + +library(ggplot2) +library(reshape2) + +# Melting data for ggplot +data_melted <- melt(results, id.vars = "SampleNumber") + +# Plotting +ggplot(data_melted, aes(x = SampleNumber, y = value, colour = variable)) + + geom_line() + + geom_point() + + theme_minimal() + + labs(x = "Sample Number", y = "Value", title = "Performance Metrics by Sample Number", color = "Metric") + + scale_colour_manual(values = c("DataSize" = "cornflowerblue", "RunningTimeMin" = "slategrey", "Cores" = "coral", "TotalMemoryGB" = "purple")) + + + + + + + + + + + + + + + + + + + + diff --git a/R/utilities.R b/R/utilities.R index 7e3cb43c..a5df5e85 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -88,9 +88,7 @@ empty_droplet_id <- function(input_read_RNA_assay, } # Remove genes from input - if ( - # If filter_empty_droplets - filter_empty_droplets == "TRUE") { + if (filter_empty_droplets == "TRUE") { barcode_table <- GetAssayData(input_read_RNA_assay, assay, slot = "counts")[!rownames(GetAssayData(input_read_RNA_assay, assay, slot = "counts")) %in% c(mitochondrial_genes, ribosome_genes),, drop=FALSE] |> emptyDrops( test.ambient = TRUE, lower=lower) |> as_tibble(rownames = ".cell") |> @@ -98,7 +96,7 @@ empty_droplet_id <- function(input_read_RNA_assay, replace_na(list(empty_droplet = TRUE)) } else { - barcode_table <- select(., .cell) |> + barcode_table <- select(input_read_RNA_assay, .cell) |> as_tibble() |> mutate( empty_droplet = FALSE) } diff --git a/README.rmd b/README.rmd index 470b8085..71741ef9 100644 --- a/README.rmd +++ b/README.rmd @@ -287,10 +287,11 @@ prepreprocessed_seurat = run_targets_pipeline( input_data = c("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds", "~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds"), tissue = "pbmc", computing_resources = computing_resources, - sample_column = "sampleName", + sample_column = "sampleName", + cell_type_annotation_column = "cellAnno", store = store, - input_reference = NULL - # debug_step = "calc_UMAP_dbl_report" + input_reference = NULL, + debug_step = "empty_droplets_tbl" ) From 50296725b4bd6309d35af8826ab34ef4d0c271f4 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 15 Jul 2024 17:38:18 +1000 Subject: [PATCH 002/145] update functions for anndata input work --- NAMESPACE | 2 +- R/functions.R | 81 +++++++++++++++++++++----------- R/modules_grammar_hpc.R | 8 ++-- man/annotation_label_transfer.Rd | 3 +- man/expand_tiered_arguments.Rd | 32 +++++++++++++ man/vector_to_code.Rd | 22 +++++++++ 6 files changed, 116 insertions(+), 32 deletions(-) create mode 100644 man/expand_tiered_arguments.Rd create mode 100644 man/vector_to_code.Rd diff --git a/NAMESPACE b/NAMESPACE index ebc7bb35..63fbfd01 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -111,6 +111,7 @@ importFrom(Seurat,VariableFeatures) importFrom(Seurat,as.Seurat) importFrom(Seurat,as.SingleCellExperiment) importFrom(SingleR,SingleR) +importFrom(SummarizedExperiment,"assay<-") importFrom(SummarizedExperiment,"colData<-") importFrom(SummarizedExperiment,"rowData<-") importFrom(SummarizedExperiment,SummarizedExperiment) @@ -186,7 +187,6 @@ importFrom(scales,viridis_pal) importFrom(scater,isOutlier) importFrom(scuttle,logNormCounts) importFrom(scuttle,perCellQCMetrics) -importFrom(stats,as.formula) importFrom(stringr,str_detect) importFrom(stringr,str_extract) importFrom(stringr,str_remove) diff --git a/R/functions.R b/R/functions.R index afa2d336..53c4c610 100644 --- a/R/functions.R +++ b/R/functions.R @@ -29,7 +29,8 @@ if(getRversion() >= "2.15.1") utils::globalVariables(c(".")) annotation_label_transfer <- function(input_read_RNA_assay, empty_droplets_tbl, reference_azimuth = NULL, - assay = NULL + assay = NULL, + gene_nomenclature ){ # Fix github checks empty_droplet = NULL @@ -49,14 +50,14 @@ annotation_label_transfer <- function(input_read_RNA_assay, left_join(empty_droplets_tbl, by = ".cell") |> dplyr::filter(!empty_droplet) |> as.SingleCellExperiment() |> - logNormCounts() + logNormCounts(assay.type = assay) } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")){ sce = input_read_RNA_assay |> # Filter empty left_join(empty_droplets_tbl, by = ".cell") |> dplyr::filter(!empty_droplet) |> - logNormCounts() + logNormCounts(assay.type = assay) } @@ -64,7 +65,12 @@ annotation_label_transfer <- function(input_read_RNA_assay, sce = S4Vectors::cbind(sce, sce) colnames(sce)[2]= "dummy___" } - blueprint <- celldex::BlueprintEncodeData() + + if (gene_nomenclature == "ensembl") { + blueprint <- celldex::BlueprintEncodeData(ensembl = TRUE) + } else if (gene_nomenclature == "symbol") { + blueprint <- celldex::BlueprintEncodeData() + } data_annotated = @@ -96,8 +102,12 @@ annotation_label_transfer <- function(input_read_RNA_assay, rm(blueprint) gc() - - MonacoImmuneData = celldex::MonacoImmuneData() + if (gene_nomenclature == "ensembl") { + MonacoImmuneData = celldex::MonacoImmuneData(ensembl = TRUE) + } else if (gene_nomenclature == "symbol") { + MonacoImmuneData = celldex::MonacoImmuneData() + } + data_annotated = data_annotated |> @@ -139,8 +149,10 @@ annotation_label_transfer <- function(input_read_RNA_assay, # Convert SCE to SE to calculate SCT if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL) |> + assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> + as("dgCMatrix") + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + counts = assay) |> RenameAssays(originalexp = assay) } @@ -292,14 +304,15 @@ annotation_label_transfer <- function(input_read_RNA_assay, #' @importFrom magrittr not #' @importFrom Matrix colSums #' @importFrom magrittr extract2 not -#' @importFrom SummarizedExperiment assay colData +#' @importFrom SummarizedExperiment assay colData assay<- #' #' @export alive_identification <- function(input_read_RNA_assay, empty_droplets_tbl, annotation_label_transfer_tbl = NULL, annotation_column = NULL, - assay = NULL) { + assay = NULL, + gene_nomenclature) { # Fix GCHECK notes empty_droplet = NULL @@ -339,7 +352,7 @@ alive_identification <- function(input_read_RNA_assay, input_read_RNA_assay } } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - counts <- assay(input_read_RNA_assay, assay = assay) + counts <- SummarizedExperiment::assay(input_read_RNA_assay, assay = assay) if (!any(str_which(colnames(colData(input_read_RNA_assay)), nFeature_name)) || !any(str_which(colnames(colData(input_read_RNA_assay)), nCount_name))) { colData(input_read_RNA_assay)[[nFeature_name]] <- Matrix::colSums(counts > 0) @@ -351,12 +364,15 @@ alive_identification <- function(input_read_RNA_assay, # Returns a named vector of IDs # Matches the gene id’s row by row and inserts NA when it can’t find gene names - location <- mapIds( - EnsDb.Hsapiens.v86, - keys=rownames(input_read_RNA_assay), - column="SEQNAME", - keytype="SYMBOL" - ) + if (gene_nomenclature == "symbol") { + location <- mapIds( + EnsDb.Hsapiens.v86, + keys=rownames(input_read_RNA_assay), + column="SEQNAME", + keytype="SYMBOL" + ) + } + which_mito = rownames(input_read_RNA_assay) |> str_which("^MT") @@ -395,10 +411,12 @@ alive_identification <- function(input_read_RNA_assay, if (inherits(input_read_RNA_assay, "Seurat")){ rna_counts <- GetAssayData(input_read_RNA_assay, layer = "counts", assay=assay) } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - rna_counts <- assay(input_read_RNA_assay, assay=assay) - assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") + rna_counts <- SummarizedExperiment::assay(input_read_RNA_assay, assay=assay) + SummarizedExperiment::assay(input_read_RNA_assay, assay) <- + SummarizedExperiment::assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL) |> + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + counts = assay) |> # avoid auto renaming assay name to originalexp after converting RenameAssays(originalexp = assay) } @@ -579,6 +597,7 @@ doublet_identification <- function(input_read_RNA_assay, #' @importFrom tibble as_tibble #' @importFrom Seurat CellCycleScoring as.Seurat NormalizeData #' @importFrom EnsDb.Hsapiens.v86 EnsDb.Hsapiens.v86 +#' @importFrom SummarizedExperiment assay assay<- #' @export cell_cycle_scoring <- function(input_read_RNA_assay, empty_droplets_tbl, @@ -595,15 +614,20 @@ cell_cycle_scoring <- function(input_read_RNA_assay, # Convert to Seurat in order to perform cell cycle scoring if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL) |> + SummarizedExperiment::assay(input_read_RNA_assay, assay) <- + SummarizedExperiment::assay(input_read_RNA_assay, assay) |> + as("dgCMatrix") + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + counts = assay) |> RenameAssays(originalexp = assay) } if (gene_nomenclature == "ensembl") { - s.features_tidy = Seurat::cc.genes$s.genes |> convert_gene_names(current_nomenclature = "symbol") |> - filter(stringr::str_detect(gene_id, "ENSG*")) |> dplyr::pull(gene_id) - g2m.features_tidy = Seurat::cc.genes$g2m.genes |> convert_gene_names(current_nomenclature = "symbol") |> + s.features_tidy = Seurat::cc.genes$s.genes |> + convert_gene_names(current_nomenclature = "symbol") |> + filter(stringr::str_detect(gene_id, "ENSG*")) |> dplyr::pull(gene_id) + g2m.features_tidy = Seurat::cc.genes$g2m.genes |> + convert_gene_names(current_nomenclature = "symbol") |> filter(stringr::str_detect(gene_id, "ENSG*")) |> dplyr::pull(gene_id) } else if (gene_nomenclature == "symbol") { s.features_tidy = Seurat::cc.genes$s.genes @@ -652,6 +676,7 @@ cell_cycle_scoring <- function(input_read_RNA_assay, #' #' @importFrom dplyr left_join filter #' @importFrom Seurat NormalizeData VariableFeatures SCTransform +#' @importFrom SummarizedExperiment assay assay<- #' @export non_batch_variation_removal <- function(input_read_RNA_assay, empty_droplets_tbl, @@ -673,8 +698,10 @@ non_batch_variation_removal <- function(input_read_RNA_assay, if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL) |> + SummarizedExperiment::assay(input_read_RNA_assay, assay) <- + SummarizedExperiment::assay(input_read_RNA_assay, assay) |> as("dgCMatrix") + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + counts = assay) |> RenameAssays(originalexp = assay) } diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index bc304faf..86496497 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -103,7 +103,7 @@ initialise_hpc <- function(input_hpc, ) target_list = list( - tar_files(read_file,readRDS("input_file.rds") , iteration = "list"), + tar_files(read_file,readRDS("input_file.rds"), iteration = "list"), #tar_target(read_file, readRDS("input_file.rds"), format = "file", iteration = "list"), tar_target(gene_nomenclature, readRDS("temp_gene_nomenclature.rds"), iteration = "list", deployment = "main"), tar_target(data_container_type, readRDS("data_container_type.rds"), deployment = "main") @@ -263,7 +263,8 @@ remove_dead_scuttle.HPCell = function(input_hpc, group_by = NULL) { alive_identification( empty_droplets_tbl, annotation_label_transfer_tbl, - grouping_column + grouping_column, + gene_nomenclature = gene_nomenclature ) |> quote(), tiers, arguments_to_tier = "read_file", c("empty_droplets_tbl", "annotation_label_transfer_tbl") @@ -474,7 +475,8 @@ annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL) { read_data_container(container_type = data_container_type) |> annotation_label_transfer( empty_droplets_tbl, - reference_read + reference_read, + gene_nomenclature = gene_nomenclature ) |> quote(), tiers, arguments_to_tier = "read_file", c("empty_droplets_tbl") diff --git a/man/annotation_label_transfer.Rd b/man/annotation_label_transfer.Rd index 912fcc9a..6331c2dc 100644 --- a/man/annotation_label_transfer.Rd +++ b/man/annotation_label_transfer.Rd @@ -8,7 +8,8 @@ annotation_label_transfer( input_read_RNA_assay, empty_droplets_tbl, reference_azimuth = NULL, - assay = NULL + assay = NULL, + gene_nomenclature ) } \arguments{ diff --git a/man/expand_tiered_arguments.Rd b/man/expand_tiered_arguments.Rd new file mode 100644 index 00000000..a3e11b27 --- /dev/null +++ b/man/expand_tiered_arguments.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/factories.R +\name{expand_tiered_arguments} +\alias{expand_tiered_arguments} +\title{Parse a Function Call String and Expand Tiered Arguments} +\usage{ +expand_tiered_arguments(command, tiers, tiered_args) +} +\arguments{ +\item{command}{A character string representing a function call, e.g., "report(empty_droplets_tbl, arg1)".} + +\item{tiers}{A character vector indicating the tier labels for the specified tiered arguments, e.g., c("_1", "_2", "_3").} + +\item{tiered_args}{A character vector specifying which arguments should be tiered, e.g., c("empty_droplets_tbl").} +} +\value{ +A character string representing the modified function call with tiered arguments expanded. +} +\description{ +This function takes a string representing a function call, parses it into +its constituent parts (function name and arguments), and expands the specified +tiered arguments based on the provided tier labels. +} +\examples{ +# Example usage: +input_string <- "report(empty_droplets_tbl, arg1)" +tiers <- c("_1", "_2", "_3") +tiered_args <- c("empty_droplets_tbl", "another_arg") +output <- expand_tiered_arguments(input_string, tiers, tiered_args) +print(output) + +} diff --git a/man/vector_to_code.Rd b/man/vector_to_code.Rd new file mode 100644 index 00000000..d2f1c912 --- /dev/null +++ b/man/vector_to_code.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{vector_to_code} +\alias{vector_to_code} +\title{Convert a vector of integers to its R code form as a character} +\usage{ +vector_to_code(int_vector) +} +\arguments{ +\item{int_vector}{A vector of integers.} +} +\value{ +A character string representing the R code form of the vector. +} +\description{ +This function takes a vector of integers and returns its R code form as a character string. +} +\examples{ +int_vector <- c(1, 2, 3, 4, 5) +code_string <- vector_to_code(int_vector) +print(code_string) +} From 3b2e1d4e98715899fca567c8f301b0f42eb9fbfb Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 16 Jul 2024 16:05:12 +1000 Subject: [PATCH 003/145] update module for anndata/sce input --- R/functions.R | 26 +++++++++++++++----------- R/modules_grammar_hpc.R | 5 +++-- man/alive_identification.Rd | 3 ++- man/doublet_identification.Rd | 5 +++-- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/R/functions.R b/R/functions.R index 53c4c610..aa040165 100644 --- a/R/functions.R +++ b/R/functions.R @@ -533,7 +533,7 @@ alive_identification <- function(input_read_RNA_assay, doublet_identification <- function(input_read_RNA_assay, empty_droplets_tbl, alive_identification_tbl, - #annotation_label_transfer_tbl, + annotation_label_transfer_tbl, #reference_label_fine, assay = NULL){ @@ -564,13 +564,19 @@ doublet_identification <- function(input_read_RNA_assay, filter(!empty_droplet) |> # Filter dead - left_join(alive_identification_tbl |> select(.cell, high_mitochondrion, high_ribosome), by = ".cell") |> + left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> filter(alive) } + # Condition as scDblFinder only accept assay "counts" + if (!"counts" %in% (SummarizedExperiment::assays(filter_empty_droplets) |> names())){ + SummarizedExperiment::assay(filter_empty_droplets, "counts") <- + SummarizedExperiment::assay(filter_empty_droplets, assay) + SummarizedExperiment::assay(filter_empty_droplets, assay) <- NULL + } # Annotate filter_empty_droplets <- filter_empty_droplets |> - #left_join(annotation_label_transfer_tbl, by = ".cell")|> + left_join(annotation_label_transfer_tbl, by = ".cell")|> #scDblFinder(clusters = ifelse(reference_label_fine=="none", TRUE, reference_label_fine)) |> scDblFinder(clusters = NULL) @@ -700,13 +706,13 @@ non_batch_variation_removal <- function(input_read_RNA_assay, if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { SummarizedExperiment::assay(input_read_RNA_assay, assay) <- SummarizedExperiment::assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + input_read_RNA_assay_transform <- input_read_RNA_assay |> as.Seurat(data = NULL, counts = assay) |> RenameAssays(originalexp = assay) } counts = - input_read_RNA_assay |> + input_read_RNA_assay_transform |> left_join(empty_droplets_tbl, by = ".cell") |> filter(!empty_droplet) |> @@ -766,7 +772,7 @@ non_batch_variation_removal <- function(input_read_RNA_assay, select(-subsets_Ribo_percent, -subsets_Mito_percent, -G2M.Score) } - normalized_data[[my_assays]] + #normalized_data[[my_assays]] } @@ -786,11 +792,9 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #' #' @return Processed and filter_empty_droplets dataset. #' -#' @importFrom dplyr left_join -#' @importFrom dplyr filter -#' @importFrom dplyr select +#' @importFrom dplyr left_join filter select #' @import SeuratObject -#' @importFrom SummarizedExperiment left_join +#' @importFrom SummarizedExperiment left_join assay assay<- #' @import tidySingleCellExperiment #' @import tidyseurat #' @importFrom magrittr not @@ -823,7 +827,7 @@ preprocessing_output <- function(input_read_RNA_assay, if(input_read_RNA_assay |> is("Seurat")) input_read_RNA_assay[["SCT"]] = non_batch_variation_removal_S else if(input_read_RNA_assay |> is("SingleCellExperiment")) - assay(spe, "SCT") <- non_batch_variation_removal_S + assay(input_read_RNA_assay, "SCT") <- non_batch_variation_removal_S } diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 86496497..30f29a08 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -406,10 +406,11 @@ remove_doublets_scDblFinder.HPCell = function(input_hpc) { read_data_container(container_type = data_container_type) |> doublet_identification( empty_droplets_tbl, - alive_identification_tbl + alive_identification_tbl, + annotation_label_transfer_tbl ) |> quote(), tiers, arguments_to_tier = "read_file", - c("empty_droplets_tbl", "alive_identification_tbl") + c("empty_droplets_tbl", "alive_identification_tbl", "annotation_label_transfer_tbl") ), factory_collapse( diff --git a/man/alive_identification.Rd b/man/alive_identification.Rd index 78af40ef..c6f4a5f5 100644 --- a/man/alive_identification.Rd +++ b/man/alive_identification.Rd @@ -9,7 +9,8 @@ alive_identification( empty_droplets_tbl, annotation_label_transfer_tbl = NULL, annotation_column = NULL, - assay = NULL + assay = NULL, + gene_nomenclature ) } \arguments{ diff --git a/man/doublet_identification.Rd b/man/doublet_identification.Rd index 879c3010..36e326e5 100644 --- a/man/doublet_identification.Rd +++ b/man/doublet_identification.Rd @@ -8,6 +8,7 @@ doublet_identification( input_read_RNA_assay, empty_droplets_tbl, alive_identification_tbl, + annotation_label_transfer_tbl, assay = NULL ) } @@ -18,10 +19,10 @@ doublet_identification( \item{alive_identification_tbl}{A tibble identifying alive cells.} -\item{assay}{Name of the assay to use.} - \item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} +\item{assay}{Name of the assay to use.} + \item{reference_label_fine}{Optional reference label for fine-tuning.} } \value{ From 09baa871241c79bfdb02565c198c6783550e6f73 Mon Sep 17 00:00:00 2001 From: myushen Date: Fri, 19 Jul 2024 17:04:39 +1000 Subject: [PATCH 004/145] fix --- R/functions.R | 6 +++--- R/modules_grammar_hpc.R | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/R/functions.R b/R/functions.R index c3de93c3..63aac0e4 100644 --- a/R/functions.R +++ b/R/functions.R @@ -740,7 +740,7 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # Rename assay assay_name_old = input_read_RNA_assay |> Assays() |> _[[1]] - input_read_RNA_assay = input_read_RNA_assay |> + input_read_RNA_assay_transform = input_read_RNA_assay |> RenameAssays( assay.name = assay_name_old, new.assay.name = assay) @@ -996,7 +996,7 @@ create_pseudobulk <- function(input_read_RNA_assay, sample_names, mutate(sample_hpc = sample_names) |> # Aggregate - aggregate_cells(c(sample_hpc, any_of(x)), slot = "data", assays = assays) + aggregate_cells(c(sample_hpc, !!sym(x)), slot = "data", assays = assays) # If I start from Seurat if(pseudobulk |> is("data.frame")) @@ -1005,7 +1005,7 @@ create_pseudobulk <- function(input_read_RNA_assay, sample_names, rowData(pseudobulk)$feature_name = rownames(pseudobulk) - pseudobulk |> + pseudobulk = pseudobulk |> pivot_longer(cols = assays, names_to = "data_source", values_to = "count") |> filter(!count |> is.na()) |> diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 4e37f8fe..e17ed273 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -417,8 +417,10 @@ remove_doublets_scDblFinder.HPCell = function(input_hpc) { annotation_label_transfer_tbl ) |> quote(), tiers, arguments_to_tier = "read_file", - other_arguments_to_tier = c("empty_droplets_tbl", "alive_identification_tbl"), - other_arguments_to_map = c("empty_droplets_tbl", "alive_identification_tbl") + other_arguments_to_tier = c("empty_droplets_tbl", "alive_identification_tbl", + "annotation_label_transfer_tbl"), + other_arguments_to_map = c("empty_droplets_tbl", "alive_identification_tbl", + "annotation_label_transfer_tbl") ), factory_collapse( From 2d78027b0ca2f2bc675136a690882571575b76fd Mon Sep 17 00:00:00 2001 From: myushen Date: Sun, 21 Jul 2024 22:57:03 +1000 Subject: [PATCH 005/145] fix package dependency --- R/functions.R | 3 ++- R/modules_grammar_hpc.R | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/R/functions.R b/R/functions.R index 63aac0e4..e2f664a8 100644 --- a/R/functions.R +++ b/R/functions.R @@ -996,7 +996,8 @@ create_pseudobulk <- function(input_read_RNA_assay, sample_names, mutate(sample_hpc = sample_names) |> # Aggregate - aggregate_cells(c(sample_hpc, !!sym(x)), slot = "data", assays = assays) + tidySingleCellExperiment::aggregate_cells(c(sample_hpc, !!sym(x)), + slot = "data", assays = assays) # If I start from Seurat if(pseudobulk |> is("data.frame")) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index e17ed273..538de1b6 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -104,7 +104,7 @@ initialise_hpc <- function(input_hpc, debug = readRDS("temp_debug_step.rds"), # Set the target you want to debug. # cue = tar_cue(mode = "never") # Force skip non-debugging outdated targets. controller = crew_controller_group ( readRDS("temp_computing_resources.rds") ), - packages = c("HPCell") + packages = c("HPCell", "tidySingleCellExperiment") ) target_list = list( From f2087a824efa814d9e1c33088973eea0df0b0447 Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 23 Jul 2024 13:33:24 +1000 Subject: [PATCH 006/145] fix mt-ribsome gene identification and pipeline running --- NAMESPACE | 2 ++ R/factories.R | 5 +++- R/functions.R | 12 +++++--- R/modules_grammar_hpc.R | 8 ++++-- R/utilities.R | 38 +++++++++++++++++++------- man/empty_droplet_id.Rd | 3 +- tests/testthat/test_single_functions.R | 14 ++++------ 7 files changed, 55 insertions(+), 27 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 1e6b57b5..27dd9762 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -122,6 +122,8 @@ importFrom(SummarizedExperiment,assay) importFrom(SummarizedExperiment,assays) importFrom(SummarizedExperiment,colData) importFrom(SummarizedExperiment,rowData) +importFrom(biomaRt,getBM) +importFrom(biomaRt,useMart) importFrom(callr,r) importFrom(celldex,BlueprintEncodeData) importFrom(celldex,MonacoImmuneData) diff --git a/R/factories.R b/R/factories.R index a2594121..4aeee0c0 100644 --- a/R/factories.R +++ b/R/factories.R @@ -65,7 +65,10 @@ expand_tiered_arguments <- function(command, tiers, tiered_args) { command_character = command |> deparse() for(t in tiered_args){ - command_character = command_character |> str_replace(t, paste0(t, "_", tiers) |> paste(collapse = ", ")) + command_character = command_character |> str_replace(t, sprintf("c(%s)", + paste0(t, "_", + tiers) |> + paste(collapse = ", "))) } command_character |> rlang::parse_expr() diff --git a/R/functions.R b/R/functions.R index e2f664a8..88c8f291 100644 --- a/R/functions.R +++ b/R/functions.R @@ -164,7 +164,8 @@ annotation_label_transfer <- function(input_read_RNA_assay, if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL) + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + counts = assay) # Rename assay assay_name_old = input_read_RNA_assay |> Assays() |> _[[1]] @@ -438,7 +439,8 @@ alive_identification <- function(input_read_RNA_assay, SummarizedExperiment::assay(input_read_RNA_assay, assay) <- SummarizedExperiment::assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL) + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + counts = assay) # Rename assay assay_name_old = input_read_RNA_assay |> Assays() |> _[[1]] @@ -649,7 +651,8 @@ cell_cycle_scoring <- function(input_read_RNA_assay, if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL) + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + counts = assay) # Rename assay assay_name_old = input_read_RNA_assay |> Assays() |> _[[1]] @@ -736,7 +739,8 @@ non_batch_variation_removal <- function(input_read_RNA_assay, if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL) + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + counts = assay) # Rename assay assay_name_old = input_read_RNA_assay |> Assays() |> _[[1]] diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 538de1b6..befe9944 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -189,7 +189,8 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N "empty_droplets_tbl", read_file |> read_data_container(container_type = data_container_type) |> - empty_droplet_id(total_RNA_count_check) |> + empty_droplet_id(total_RNA_count_check, + gene_nomenclature = gene_nomenclature) |> quote(), tiers, arguments_to_tier = "read_file" @@ -197,7 +198,7 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N factory_collapse( "my_report", - bind_rows(empty_droplets_tbl) |> quote(), + do.call(bind_rows, empty_droplets_tbl) |> quote(), "empty_droplets_tbl", tiers, packages = c("dplyr") ) @@ -829,7 +830,8 @@ evaluate_hpc.HPCell = function(input_hpc) { "factors_to_regress.rds", "pseudobulk_group_by.rds", "temp_tiers.rds", - "temp_gene_nomenclature.rds" + "temp_gene_nomenclature.rds", + "data_container_type.rds" ) |> remove_files_safely() diff --git a/R/utilities.R b/R/utilities.R index b29dd0fe..f4cccde6 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -43,7 +43,8 @@ read_data_container <- function(file, } switch(container_type, - "anndata" = zellkonverter::readH5AD(file, reader = "R", use_hdf5 = TRUE, obs = FALSE, raw = FALSE, layers = FALSE), + "anndata" = zellkonverter::readH5AD(file, reader = "R", use_hdf5 = TRUE, + obs = FALSE, raw = FALSE, layers = FALSE), "sce_rds" = readRDS(file), "seurat_rds" = readRDS(file), "sce_hdf5" = loadHDF5SummarizedExperiment(file), @@ -98,11 +99,13 @@ convert_gene_names <- function(id, #' @importFrom DropletUtils emptyDrops barcodeRanks #' @importFrom S4Vectors metadata #' @importFrom EnsDb.Hsapiens.v86 EnsDb.Hsapiens.v86 +#' @importFrom biomaRt useMart getBM #' #' @export empty_droplet_id <- function(input_read_RNA_assay, total_RNA_count_check = -Inf, - assay = NULL){ + assay = NULL, + gene_nomenclature){ #Fix GChecks FDR = NULL .cell = NULL @@ -122,14 +125,29 @@ empty_droplet_id <- function(input_read_RNA_assay, significance_threshold = 0.001 # Genes to exclude - location <- mapIds( - EnsDb.Hsapiens.v86, - keys=rownames(input_read_RNA_assay), - column="SEQNAME", - keytype="SYMBOL" - ) - mitochondrial_genes = which(location=="MT") |> names() - ribosome_genes = rownames(input_read_RNA_assay) |> str_subset("^RPS|^RPL") + if (gene_nomenclature == "symbol") { + location <- mapIds( + EnsDb.Hsapiens.v86, + keys=rownames(input_read_RNA_assay), + column="SEQNAME", + keytype="SYMBOL" + ) + mitochondrial_genes = which(location=="MT") |> names() + ribosome_genes = rownames(input_read_RNA_assay) |> str_subset("^RPS|^RPL") + + } else if (gene_nomenclature == "ensembl") { + ensembl <- useMart("ensembl", dataset = "hsapiens_gene_ensembl") + genes_info <- getBM( + attributes = c('ensembl_gene_id', 'external_gene_name', 'chromosome_name'), + filters = 'ensembl_gene_id', + values = rownames(input_read_RNA_assay), + mart = ensembl + ) + + mitochondrial_genes <- genes_info[genes_info$chromosome_name == "MT", ] |> pull(ensembl_gene_id) + ribosome_genes <- genes_info[grep("^RPS|^RPL", genes_info$external_gene_name), ] |> pull(ensembl_gene_id) + } + # if ("originalexp" %in% names(input_file@assays)) { # barcode_ranks <- barcodeRanks(input_file@assays$originalexp@counts[!rownames(input_file@assays$originalexp@counts) %in% c(mitochondrial_genes, ribosome_genes),, drop=FALSE]) diff --git a/man/empty_droplet_id.Rd b/man/empty_droplet_id.Rd index 93c9882b..1362f176 100644 --- a/man/empty_droplet_id.Rd +++ b/man/empty_droplet_id.Rd @@ -7,7 +7,8 @@ empty_droplet_id( input_read_RNA_assay, total_RNA_count_check = -Inf, - assay = NULL + assay = NULL, + gene_nomenclature ) } \arguments{ diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index a9a34baa..8daea453 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -472,21 +472,19 @@ library(tidySingleCellExperiment) # Define and execute the pipeline -c("dev/input_seurat_treated_1_SCE.rds", +c("dev/input_seurat_treated_1_SCE.rds", "dev/input_seurat_treated_2_SCE.rds", "dev/input_seurat_UNtreated_1_SCE.rds", - "dev/input_seurat_UNtreated_2_SCE.rds") |> + "dev/input_seurat_UNtreated_2_SCE.rds") |> purrr::map_chr(here::here) |> - magrittr::set_names(c("pbmc3k1_1", "pbmc3k1_2", "pbmc3k1_3", "pbmc3k1_4")) |> + magrittr::set_names(c("pbmc3k1_1", "pbmc3k1_2", "pbmc3k1_3", "pbmc3k1_4")) |> # Initialise pipeline characteristics initialise_hpc( gene_nomenclature = "symbol", - data_container_type = "seurat_rds", - # tier = c("tier_1", "tier_2"), - # - debug_step = "create_pseudobulk_sample_1_0dcbdb0cc9b69ebd", - + data_container_type = "sce_rds", + store = "~/scratch/Census/census_reanalysis/sample_test/", + tier = c("tier_1", "tier_1", "tier_2", "tier_2"), # Default resourced computing_resources = crew_controller_local(workers = 10), #resource_tuned_slurm From 94569aa76ec12d28344781e8ef82020e7a7761f6 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Wed, 24 Jul 2024 12:33:47 +1000 Subject: [PATCH 007/145] update emptydroplets --- DESCRIPTION | 3 +-- R/execute_pipeline.R | 8 ++++---- R/utilities.R | 19 +++++-------------- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index ce9880d7..0d9c1902 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -74,7 +74,7 @@ Imports: qs Encoding: UTF-8 LazyData: true -RoxygenNote: 7.3.1 +RoxygenNote: 7.3.2 SystemRequirements: GNU make biocViews: ImmunoOncology, @@ -92,4 +92,3 @@ Suggests: testthat(>= 3.0.0), scRNAseq, irlba - diff --git a/R/execute_pipeline.R b/R/execute_pipeline.R index 6ce32d68..61e6fd0e 100644 --- a/R/execute_pipeline.R +++ b/R/execute_pipeline.R @@ -224,10 +224,10 @@ run_targets_pipeline <- function( tar_target(input_read, readRDS(read_file), pattern = map(read_file), iteration = "list"), - tar_target(unique_tissues, - get_unique_tissues(input_read, sample_column |> quo_name()), - pattern = map(input_read), - iteration = "list", deployment = "main"), + # tar_target(unique_tissues, + # get_unique_tissues(input_read, sample_column |> quo_name()), + # pattern = map(input_read), + # iteration = "list", deployment = "main"), # tar_target( # tissue_subsets, # input_read, split.by = "Tissue"), diff --git a/R/utilities.R b/R/utilities.R index a5df5e85..2bdbd3d4 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -39,22 +39,10 @@ eq = function(a,b){ a==b } empty_droplet_id <- function(input_read_RNA_assay, filter_empty_droplets, assay = NULL){ - #Fix GChecks - FDR = NULL - .cell = NULL # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - # Check if empty droplets have been identified - if (is.null(filter_empty_droplets) ){ - if (any(input_read_RNA_assay$nFeature_RNA < 200)) { - filter_empty_droplets <- "TRUE" - } - else { - filter_empty_droplets <- "FALSE" - } - } significance_threshold = 0.001 # Genes to exclude @@ -88,7 +76,9 @@ empty_droplet_id <- function(input_read_RNA_assay, } # Remove genes from input - if (filter_empty_droplets == "TRUE") { + if ( + # If filter_empty_droplets + filter_empty_droplets == "TRUE") { barcode_table <- GetAssayData(input_read_RNA_assay, assay, slot = "counts")[!rownames(GetAssayData(input_read_RNA_assay, assay, slot = "counts")) %in% c(mitochondrial_genes, ribosome_genes),, drop=FALSE] |> emptyDrops( test.ambient = TRUE, lower=lower) |> as_tibble(rownames = ".cell") |> @@ -96,7 +86,7 @@ empty_droplet_id <- function(input_read_RNA_assay, replace_na(list(empty_droplet = TRUE)) } else { - barcode_table <- select(input_read_RNA_assay, .cell) |> + barcode_table <- select(., .cell) |> as_tibble() |> mutate( empty_droplet = FALSE) } @@ -113,6 +103,7 @@ empty_droplet_id <- function(input_read_RNA_assay, ) + # barcode_table |> saveRDS(output_path_result) # # Plot bar-codes ranks From 049edb8709ef4d4e6f7f79d591ad710e02168245 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Wed, 24 Jul 2024 12:44:55 +1000 Subject: [PATCH 008/145] merge upstream --- man/annotation_consensus.Rd | 35 +++++++++++++++++ man/cell_cycle_scoring.Rd | 23 +++++++++++ man/clean_cell_types.Rd | 21 ++++++++++ man/clean_cell_types_deeper.Rd | 18 +++++++++ man/doublet_identification.Rd | 35 +++++++++++++++++ man/find_variable_genes.Rd | 19 +++++++++ man/harmonise_names_non_immune.Rd | 21 ++++++++++ man/is_strong_evidence.Rd | 25 ++++++++++++ man/map2_test_differential_abundance_hpc.Rd | 43 +++++++++++++++++++++ man/map_add_dispersion_to_se.Rd | 30 ++++++++++++++ man/map_split_sce_by_gene.Rd | 30 ++++++++++++++ man/map_split_se_by_gene.Rd | 21 ++++++++++ 12 files changed, 321 insertions(+) create mode 100644 man/annotation_consensus.Rd create mode 100644 man/cell_cycle_scoring.Rd create mode 100644 man/clean_cell_types.Rd create mode 100644 man/clean_cell_types_deeper.Rd create mode 100644 man/doublet_identification.Rd create mode 100644 man/find_variable_genes.Rd create mode 100644 man/harmonise_names_non_immune.Rd create mode 100644 man/is_strong_evidence.Rd create mode 100644 man/map2_test_differential_abundance_hpc.Rd create mode 100644 man/map_add_dispersion_to_se.Rd create mode 100644 man/map_split_sce_by_gene.Rd create mode 100644 man/map_split_se_by_gene.Rd diff --git a/man/annotation_consensus.Rd b/man/annotation_consensus.Rd new file mode 100644 index 00000000..365c9ca1 --- /dev/null +++ b/man/annotation_consensus.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{annotation_consensus} +\alias{annotation_consensus} +\title{Harmonize cell type annotations based on consensus} +\usage{ +annotation_consensus( + single_cell_data, + .sample_column, + .cell_type, + .azimuth, + .blueprint, + .monaco +) +} +\arguments{ +\item{single_cell_data}{A data frame containing single-cell data with cell type annotations.} + +\item{.sample_column}{The column name specifying sample information.} + +\item{.cell_type}{The column name for the cell type annotations.} + +\item{.azimuth}{The column name for Azimuth annotations.} + +\item{.blueprint}{The column name for Blueprint annotations.} + +\item{.monaco}{The column name for Monaco annotations.} +} +\value{ +A data frame with harmonized cell type annotations. +} +\description{ +This function harmonizes cell type annotations by matching them with a reference annotation +and applying specific rules for non-immune cell types. +} diff --git a/man/cell_cycle_scoring.Rd b/man/cell_cycle_scoring.Rd new file mode 100644 index 00000000..cd88b3e5 --- /dev/null +++ b/man/cell_cycle_scoring.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{cell_cycle_scoring} +\alias{cell_cycle_scoring} +\title{Cell Cycle Scoring} +\usage{ +cell_cycle_scoring(input_read_RNA_assay, empty_droplets_tbl, assay = NULL) +} +\arguments{ +\item{input_read_RNA_assay}{SingleCellExperiment object containing RNA assay data.} + +\item{empty_droplets_tbl}{A tibble identifying empty droplets.} + +\item{assay}{Name of the assay to use.} +} +\value{ +A tibble with cell identifiers and their cell cycle phase classifications. +} +\description{ +Applies cell cycle scoring based on the expression of G2/M and S phase markers. +Returns a tibble containing cell identifiers with their predicted classification +into cell cycle phases: G2M, S, or G1 phase. +} diff --git a/man/clean_cell_types.Rd b/man/clean_cell_types.Rd new file mode 100644 index 00000000..97ddcfb6 --- /dev/null +++ b/man/clean_cell_types.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{clean_cell_types} +\alias{clean_cell_types} +\title{Clean and Standardize Cell Types} +\usage{ +clean_cell_types(.x) +} +\arguments{ +\item{.x}{A vector of cell types.} +} +\value{ +A cleaned and standardized vector of cell types. +} +\description{ +This function takes a vector of cell types and applies a series of transformations +to clean and standardize them for better consistency. +} +\examples{ +cell_types <- c("CD4+ T-cells", "NK cells", "Blast-cells") +} diff --git a/man/clean_cell_types_deeper.Rd b/man/clean_cell_types_deeper.Rd new file mode 100644 index 00000000..f85f0ed3 --- /dev/null +++ b/man/clean_cell_types_deeper.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{clean_cell_types_deeper} +\alias{clean_cell_types_deeper} +\title{Clean and Standardize Cell Types (Deeper)} +\usage{ +clean_cell_types_deeper(x) +} +\arguments{ +\item{x}{A vector of cell types.} +} +\value{ +A cleaned and standardized vector of cell types. +} +\description{ +This function takes a vector of cell types and applies a series of transformations +to clean and standardize them for better consistency. +} diff --git a/man/doublet_identification.Rd b/man/doublet_identification.Rd new file mode 100644 index 00000000..ac53eba7 --- /dev/null +++ b/man/doublet_identification.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{doublet_identification} +\alias{doublet_identification} +\title{Doublet Identification} +\usage{ +doublet_identification( + input_read_RNA_assay, + empty_droplets_tbl, + alive_identification_tbl, + annotation_label_transfer_tbl, + reference_label_fine, + assay = NULL +) +} +\arguments{ +\item{input_read_RNA_assay}{SingleCellExperiment object containing RNA assay data.} + +\item{empty_droplets_tbl}{A tibble identifying empty droplets.} + +\item{alive_identification_tbl}{A tibble identifying alive cells.} + +\item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} + +\item{reference_label_fine}{Optional reference label for fine-tuning.} + +\item{assay}{Name of the assay to use.} +} +\value{ +A tibble containing cells with their scDblFinder scores. +} +\description{ +\code{doublet_identification} applies the scDblFinder algorithm to the filter_empty_droplets dataset. It supports integrating with +SingleR annotations if provided and outputs a tibble containing cells with their associated scDblFinder scores. +} diff --git a/man/find_variable_genes.Rd b/man/find_variable_genes.Rd new file mode 100644 index 00000000..f5d1c7c7 --- /dev/null +++ b/man/find_variable_genes.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{find_variable_genes} +\alias{find_variable_genes} +\title{Find variable genes} +\usage{ +find_variable_genes(input_seurat, empty_droplet) +} +\arguments{ +\item{input_seurat}{Single Seurat object (Input data)} + +\item{empty_droplet}{Single dataframe containing empty droplet filtering information} +} +\value{ +A vector of variable gene names +} +\description{ +Find variable genes +} diff --git a/man/harmonise_names_non_immune.Rd b/man/harmonise_names_non_immune.Rd new file mode 100644 index 00000000..998f7267 --- /dev/null +++ b/man/harmonise_names_non_immune.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{harmonise_names_non_immune} +\alias{harmonise_names_non_immune} +\title{Harmonize Non-Immune Cell Type Names} +\usage{ +harmonise_names_non_immune(metadata) +} +\arguments{ +\item{metadata}{A data frame containing cell type information.} +} +\value{ +The metadata with harmonized cell type names. +} +\description{ +This function harmonizes non-immune cell type names in the metadata. +} +\examples{ +metadata <- data.frame(cell_type = c("Myofibroblast", "Fibroblast", "Other Fibroblast")) + +} diff --git a/man/is_strong_evidence.Rd b/man/is_strong_evidence.Rd new file mode 100644 index 00000000..0cdc1866 --- /dev/null +++ b/man/is_strong_evidence.Rd @@ -0,0 +1,25 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{is_strong_evidence} +\alias{is_strong_evidence} +\title{Check for Strong Evidence} +\usage{ +is_strong_evidence( + single_cell_data, + cell_annotation_azimuth_l2, + cell_annotation_blueprint_singler +) +} +\arguments{ +\item{single_cell_data}{A data frame containing single-cell data.} + +\item{cell_annotation_azimuth_l2}{A column representing Azimuth L2 cell annotation.} + +\item{cell_annotation_blueprint_singler}{A column representing Blueprint Singler cell annotation.} +} +\value{ +A data frame with a column indicating strong evidence. +} +\description{ +This function checks for strong evidence in cell annotations. +} diff --git a/man/map2_test_differential_abundance_hpc.Rd b/man/map2_test_differential_abundance_hpc.Rd new file mode 100644 index 00000000..68935308 --- /dev/null +++ b/man/map2_test_differential_abundance_hpc.Rd @@ -0,0 +1,43 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/targets_functions.R +\name{map2_test_differential_abundance_hpc} +\alias{map2_test_differential_abundance_hpc} +\title{Main Function for HPCell Map Test Differential Abundance} +\usage{ +map2_test_differential_abundance_hpc( + data_list, + formula_list, + .abundance = NULL, + store = tempfile(tmpdir = "."), + computing_resources = crew_controller_local(workers = 1), + cpus_per_task = 1, + debug_job_id = NULL, + append = FALSE, + ... +) +} +\arguments{ +\item{data_list}{list of dataframes to be processed} + +\item{formula_list}{List of formula for the differential abundance test.} + +\item{.abundance}{(optional) A symbol or string indicating the column name in the \code{SingleCellExperiment} object to be used for abundance measures. If not explicitly provided, the function attempts to automatically detect an appropriate column by examining the first object in \code{data_list}.} + +\item{store}{File path for temporary storage.} + +\item{computing_resources}{Computing resources configuration.} + +\item{cpus_per_task}{Number of CPUs allocated per task.} + +\item{debug_job_id}{Optional job ID for debugging.} + +\item{append}{Flag to append to existing script.} + +\item{...}{additional arguments} +} +\value{ +A \code{targets} pipeline output, typically a nested tibble with differential abundance estimates. +} +\description{ +This function prepares and runs a differential abundance test pipeline using the 'targets' package. It sets up necessary files, appends scripts, and executes the pipeline. +} diff --git a/man/map_add_dispersion_to_se.Rd b/man/map_add_dispersion_to_se.Rd new file mode 100644 index 00000000..92270dfa --- /dev/null +++ b/man/map_add_dispersion_to_se.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{map_add_dispersion_to_se} +\alias{map_add_dispersion_to_se} +\title{Add Dispersion Estimates to SingleCellExperiment Object} +\usage{ +map_add_dispersion_to_se(se_df, .col, abundance = NULL) +} +\arguments{ +\item{se_df}{A data frame or list containing SingleCellExperiment objects.} + +\item{.col}{A symbol indicating the column in \code{se_df} that contains SingleCellExperiment objects.} + +\item{abundance}{(Optional) A character vector specifying the name of the assay to be used +for dispersion estimation. If NULL or not provided, the first assay is used.} +} +\value{ +The input data frame or list (\code{se_df}) with the specified \code{.col} modified to include +dispersion estimates in each SingleCellExperiment object. +} +\description{ +\code{map_add_dispersion_to_se} function adds dispersion estimates to each feature (gene) in a +SingleCellExperiment object. Dispersion estimates are added based on the abundance measure specified. +} +\details{ +The function iterates over each SingleCellExperiment object in the specified column of the input data frame +or list. It calculates dispersion estimates for the features (genes) based on the specified abundance assay. +The results are joined back to each SingleCellExperiment object. If no abundance assay is specified, +the function defaults to the first assay in each SingleCellExperiment object. +} diff --git a/man/map_split_sce_by_gene.Rd b/man/map_split_sce_by_gene.Rd new file mode 100644 index 00000000..be4b5344 --- /dev/null +++ b/man/map_split_sce_by_gene.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{map_split_sce_by_gene} +\alias{map_split_sce_by_gene} +\title{map_split_sce_by_gene Split SingleCellExperiment by Gene} +\usage{ +map_split_sce_by_gene( + sce_df, + .col, + how_many_chunks_base = 10, + max_cells_before_split = 4763 +) +} +\arguments{ +\item{sce_df}{A dataframe (or tibble) where one of the columns contains SingleCellExperiment objects} + +\item{.col}{A symbol or string indicating the column in \code{sce_df} which should be dynamically split into multiple chunks} + +\item{how_many_chunks_base}{A base number of chunks to divide the data into, adjusted by the actual size of the data in each group.} + +\item{max_cells_before_split}{The maximum number of cells a single chunk can have before it is split into another chunk.} +} +\value{ +Returns the input SingleCellExperiment DataFrame with an additional column \code{sce_md5} containing MD5 hashes of the chunks, and with the data split according to the specified parameters. +} +\description{ +Splits a SingleCellExperiment object into multiple chunks based on the number of cells. +This function dynamically partitions a SingleCellExperiment object into multiple chunks based on the number of cells per gene across the specified column. It computes the number of splits by dividing the total number of cells by a maximum threshold and multiplying the result by a base number of chunks. This approach allows handling of large datasets by reducing the complexity in each chunk, making it feasible to perform detailed analyses or computational tasks on subsets of data efficiently. +The function also assigns a unique MD5 hash to each chunk as an identifier, facilitating tracking and referencing of data subsets in subsequent analyses. +} diff --git a/man/map_split_se_by_gene.Rd b/man/map_split_se_by_gene.Rd new file mode 100644 index 00000000..1c8a5fbc --- /dev/null +++ b/man/map_split_se_by_gene.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{map_split_se_by_gene} +\alias{map_split_se_by_gene} +\title{Split SummarizedExperiment Object by Gene} +\usage{ +map_split_se_by_gene(se_df, .col, .number_of_chunks) +} +\arguments{ +\item{se_df}{Data frame containing SummarizedExperiment objects.} + +\item{.col}{Column in the data frame containing the SummarizedExperiment objects.} + +\item{.number_of_chunks}{Number of chunks to split into.} +} +\value{ +Data frame with SummarizedExperiment objects split into chunks. +} +\description{ +Splits each SummarizedExperiment object in a data frame into chunks by gene. +} From ce365363383fab7006b33794a317336bbcfa1313 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 29 Jul 2024 16:20:59 +1000 Subject: [PATCH 009/145] fix --- R/data.R | 18 +++++++++++++++++- R/utilities.R | 25 +++++++++++++++---------- data/ensembl_genes_biomart.rda | Bin 0 -> 423500 bytes 3 files changed, 32 insertions(+), 11 deletions(-) create mode 100644 data/ensembl_genes_biomart.rda diff --git a/R/data.R b/R/data.R index 770d5e13..9fa03dca 100644 --- a/R/data.R +++ b/R/data.R @@ -27,4 +27,20 @@ #' #' @noRd #' -"dummy_hpc" \ No newline at end of file +"dummy_hpc" + + +#' A data frame of Ensembl genes retrieved from biomaRt package +#' +#' @format A data frame map of ensembl_gene_id, external_gene_name and chromosome_name +#' +#' @usage +#' data(biomart_ensembl_genes) +#' +#' @source biomaRt getBM +#' +#' @keywords datasets +#' +#' @docType data +#' @noRd +"biomart_ensembl_genes" \ No newline at end of file diff --git a/R/utilities.R b/R/utilities.R index f4cccde6..a8854ea3 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -124,6 +124,8 @@ empty_droplet_id <- function(input_read_RNA_assay, # } significance_threshold = 0.001 + RNA_feature_count_threshold = 200 + RNA_count_threshold = 100 # Genes to exclude if (gene_nomenclature == "symbol") { location <- mapIds( @@ -136,16 +138,15 @@ empty_droplet_id <- function(input_read_RNA_assay, ribosome_genes = rownames(input_read_RNA_assay) |> str_subset("^RPS|^RPL") } else if (gene_nomenclature == "ensembl") { - ensembl <- useMart("ensembl", dataset = "hsapiens_gene_ensembl") - genes_info <- getBM( - attributes = c('ensembl_gene_id', 'external_gene_name', 'chromosome_name'), - filters = 'ensembl_gene_id', - values = rownames(input_read_RNA_assay), - mart = ensembl - ) - - mitochondrial_genes <- genes_info[genes_info$chromosome_name == "MT", ] |> pull(ensembl_gene_id) - ribosome_genes <- genes_info[grep("^RPS|^RPL", genes_info$external_gene_name), ] |> pull(ensembl_gene_id) + # all_genes are saved in data/all_genes.rda to avoid recursively accessing biomaRt backend for potential timeout error + data(ensembl_genes_biomart) + all_mitochondrial_genes <- ensembl_genes_biomart[grep("MT", ensembl_genes_biomart$chromosome_name), ] + all_ribosome_genes <- ensembl_genes_biomart[grep("^(RPL|RPS)", ensembl_genes_biomart$external_gene_name), ] + + mitochondrial_genes <- all_mitochondrial_genes |> + filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) + ribosome_genes <- all_ribosome_genes |> + filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) } @@ -162,6 +163,10 @@ empty_droplet_id <- function(input_read_RNA_assay, counts <- assay(input_read_RNA_assay, assay) } filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] + + # filter based on RNA_count_threshold + filtered_counts <- filtered_counts[rowSums(filtered_counts) > RNA_count_threshold, ] + # Calculate bar-codes ranks barcode_ranks <- barcodeRanks(filtered_counts) diff --git a/data/ensembl_genes_biomart.rda b/data/ensembl_genes_biomart.rda new file mode 100644 index 0000000000000000000000000000000000000000..ff693893ccbde3efb8ff5ac8d0f218f41ed0918f GIT binary patch literal 423500 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 Date: Wed, 31 Jul 2024 14:06:06 +1000 Subject: [PATCH 010/145] update testing --- README.rmd | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.rmd b/README.rmd index e1981ec8..d3ed6b23 100644 --- a/README.rmd +++ b/README.rmd @@ -50,6 +50,11 @@ input_seurat |> saveRDS(file_path) input_hpc = c(file_path, file_path) |> magrittr::set_names(c("pbmc3k1_1", "pbmc3k1_2")) + +## Test with fibrosis samples +input_hpc = + c("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds", "~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds") |> + magrittr::set_names(c("GSM3489182", "THD0001")) ``` ```{r} @@ -86,6 +91,7 @@ Local parallel computing `computing_resources = crew_controller_local(workers = 10)` ```{r, eval= FALSE} + library(HPCell) input_hpc |> From 51a9bf4b037aeb20f9b72567b0053e73b321f8fd Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Wed, 31 Jul 2024 15:11:06 +1000 Subject: [PATCH 011/145] clean readme --- README.rmd | 32 +++----------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/README.rmd b/README.rmd index d3ed6b23..aa1e51f8 100644 --- a/README.rmd +++ b/README.rmd @@ -55,36 +55,10 @@ input_hpc = input_hpc = c("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds", "~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds") |> magrittr::set_names(c("GSM3489182", "THD0001")) -``` - -```{r} -file_paths <- list.files(path = "~/Documents/HPCell/fibrosis_data/", pattern = "\\.rds$", full.names = TRUE) -file_paths |> run_targets_pipeline( input_data = ".", - tissue = "pbmc", - computing_resources = computing_resources, - sample_column = "sampleName", - store = store, - input_reference = NULL) - -# input_data_path<- "~/HPCell/file4df43b24e7cf.rds" -store<- "/stornext/General/scratch/GP_Transfer/si.j/store_fibrosis_benchmark_slurm_launcher_2" - -computing_resources = crew_controller_slurm( - name = "my_controller", - workers = 4) - -#Running the pipeline -prepreprocessed_seurat = run_targets_pipeline( - input_data = c("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds", "~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds"), - tissue = "pbmc", - computing_resources = computing_resources, - sample_column = "sampleName", - cell_type_annotation_column = "cellAnno", - store = store, - input_reference = NULL, - debug_step = "empty_droplets_tbl" -) +# input_hpc = +# c("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds", "~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds") |> +# magrittr::set_names(c("sampleName", "sampleName")) ``` Local parallel computing From 2d11c88af0da94da96433e3230b431317d8f8e8d Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Thu, 1 Aug 2024 20:36:10 +1000 Subject: [PATCH 012/145] update run_target_pipeline() steps --- R/execute_pipeline.R | 12 +++++--- R/functions.R | 3 +- R/modules_grammar_hpc.R | 36 +++++++++++----------- README.rmd | 10 +++--- inst/rmd/Doublet_identification_report.Rmd | 3 +- inst/rmd/Empty_droplet_report.Rmd | 6 ++-- man/cell_cycle_scoring.Rd | 7 ----- man/doublet_identification.Rd | 17 ---------- man/eliminate_random_effects.Rd | 21 ------------- tests/testthat/test_single_functions.R | 12 +++++++- 10 files changed, 49 insertions(+), 78 deletions(-) delete mode 100644 man/eliminate_random_effects.Rd diff --git a/R/execute_pipeline.R b/R/execute_pipeline.R index a5ba2ddb..f8b641b1 100644 --- a/R/execute_pipeline.R +++ b/R/execute_pipeline.R @@ -256,7 +256,7 @@ run_targets_pipeline <- function( # Cell cycle scoring tar_target(cell_cycle_score_tbl, cell_cycle_scoring(read_data_container(file_path, container_type = data_container_type_file ), - empty_droplets_tbl), + empty_droplets_tbl, gene_nomenclature = "symbol"), pattern = map(file_path, empty_droplets_tbl), iteration = "list"), @@ -283,8 +283,7 @@ run_targets_pipeline <- function( tar_target(doublet_identification_tbl, doublet_identification(read_data_container(file_path, container_type = data_container_type_file), empty_droplets_tbl, alive_identification_tbl, - annotation_label_transfer_tbl, - reference_label_fine), + annotation_label_transfer_tbl), pattern = map(file_path, empty_droplets_tbl, alive_identification_tbl, @@ -303,13 +302,16 @@ run_targets_pipeline <- function( iteration = "list"), # Pre-processing output - tar_target(preprocessing_output_S, preprocessing_output(tissue, + tar_target(preprocessing_output_S, preprocessing_output(read_data_container(file_path, container_type = data_container_type_file ), + empty_droplets_tbl, non_batch_variation_removal_S, alive_identification_tbl, cell_cycle_score_tbl, annotation_label_transfer_tbl, doublet_identification_tbl), - pattern = map(non_batch_variation_removal_S, + pattern = map(file_path, + empty_droplets_tbl, + non_batch_variation_removal_S, alive_identification_tbl, cell_cycle_score_tbl, annotation_label_transfer_tbl, diff --git a/R/functions.R b/R/functions.R index 9354a4e0..39bd695a 100644 --- a/R/functions.R +++ b/R/functions.R @@ -972,7 +972,8 @@ create_pseudobulk <- function(input_read_RNA_assay, sample_names, mutate(sample_hpc = sample_names) |> # Aggregate - aggregate_cells(c(sample_hpc, any_of(x)), slot = "data", assays = assays) + #aggregate_cells(c(sample_hpc, any_of(x)), slot = "data", assays = assays) + tidySingleCellExperiment::aggregate_cells(c(sample_hpc, !!sym(x)), slot = "data", assays = assays) # If I start from Seurat if(pseudobulk |> is("data.frame")) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index dbbb1337..f840e9cf 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -57,7 +57,7 @@ initialise_hpc <- function(input_hpc, input_hpc |> names() |> saveRDS("sample_names.rds") #cell_count |> saveRDS("cell_count.rds") - + # Optionally, you can evaluate the arguments if they are expressions args_list <- lapply(args_list, eval, envir = parent.frame()) @@ -112,7 +112,7 @@ initialise_hpc <- function(input_hpc, #tar_target(read_file, readRDS("input_file.rds"), format = "file", iteration = "list"), tar_target(gene_nomenclature, readRDS("temp_gene_nomenclature.rds"), iteration = "list", deployment = "main"), tar_target(data_container_type, readRDS("data_container_type.rds"), deployment = "main") - + ) target_list = @@ -216,7 +216,7 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N ) } - + # Add pipeline step input_hpc |> @@ -296,7 +296,7 @@ remove_dead_scuttle.HPCell = function(input_hpc, group_by = NULL) { glue("{input_hpc$initialisation$store}.R") ) } - + input_hpc |> c(list(remove_dead_scuttle = args_list)) |> @@ -507,7 +507,7 @@ annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL) { glue("{input_hpc$initialisation$store}.R") ) } - + input_hpc |> c(list(annotate_cell_type = args_list)) |> @@ -584,9 +584,9 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = glue("{input_hpc$initialisation$store}.R") ) } - - + + input_hpc |> c(list(normalise_abundance_seurat_SCT = args_list)) |> add_class("HPCell") @@ -627,7 +627,7 @@ calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL) { list( tar_target_raw("pseudobulk_group_by", pseudobulk_group_by, deployment = "main") , - + factory_split( "create_pseudobulk_sample", read_file |> @@ -675,10 +675,10 @@ calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL) { ) } - + # We don't want recursive when we call factory if(input_hpc |> length() > 0) { - + tar_tier_append( quote(dummy_hpc |> calculate_pseudobulk() %$% calculate_pseudobulk %$% factory), input_hpc$initialisation$tier |> get_positions() , @@ -740,7 +740,7 @@ setMethod( args_list <- lapply(args_list, eval, envir = parent.frame()) args_list$factory = function(tiers, .formula, factor_of_interest = NULL, .abundance = NULL){ - + if(.formula |> deparse() |> str_detect("\\|")) factory_de_random_effect( se_list_input = "create_pseudobulk_sample", @@ -852,30 +852,30 @@ evaluate_hpc.HPCell = function(input_hpc) { if( !("annotate_cell_type" %in% names(input_hpc) | - ( "remove_dead_scuttle" %in% names(input_hpc) & !is.null(input_hpc$remove_dead_scuttle$group_by)) - )) - target_chunk_undefined_annotate_cell_type(input_hpc) + ( "remove_dead_scuttle" %in% names(input_hpc) & !is.null(input_hpc$remove_dead_scuttle$group_by)) + )) + target_chunk_undefined_annotate_cell_type(input_hpc) #-----------------------# # Remove dead #-----------------------# if(! "remove_dead_scuttle" %in% names(input_hpc)) - target_chunk_undefined_remove_dead_scuttle(input_hpc) + target_chunk_undefined_remove_dead_scuttle(input_hpc) #-----------------------# # score cell cycle #-----------------------# if(! "score_cell_cycle_seurat" %in% names(input_hpc)) - target_chunk_undefined_score_cell_cycle_seurat(input_hpc) + target_chunk_undefined_score_cell_cycle_seurat(input_hpc) #-----------------------# # Doublets #-----------------------# if(! "remove_doublets_scDblFinder" %in% names(input_hpc)) - target_chunk_undefined_remove_doublets_scDblFinder(input_hpc) + target_chunk_undefined_remove_doublets_scDblFinder(input_hpc) #-----------------------# # SCT @@ -943,4 +943,4 @@ print.HPCell <- function(x, ...){ x |> evaluate_hpc() |> print() -} +} \ No newline at end of file diff --git a/README.rmd b/README.rmd index aa1e51f8..def166dc 100644 --- a/README.rmd +++ b/README.rmd @@ -56,9 +56,11 @@ input_hpc = c("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds", "~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds") |> magrittr::set_names(c("GSM3489182", "THD0001")) -# input_hpc = -# c("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds", "~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds") |> -# magrittr::set_names(c("sampleName", "sampleName")) +input_hpc = + c("~/HPCell/CA1.rds", "~/HPCell/CA2.rds") |> + magrittr::set_names(c("trachea", "blood")) + + ``` Local parallel computing @@ -87,7 +89,7 @@ input_hpc |> "subsets_Ribo_percent", "G2M.Score" )) |> - calculate_pseudobulk(group_by = "monaco_first.labels.fine") + calculate_pseudobulk(group_by = c("sampleName")) ``` diff --git a/inst/rmd/Doublet_identification_report.Rmd b/inst/rmd/Doublet_identification_report.Rmd index 20101f4e..e3e209ea 100644 --- a/inst/rmd/Doublet_identification_report.Rmd +++ b/inst/rmd/Doublet_identification_report.Rmd @@ -11,7 +11,8 @@ params: x5: "NA" x6: "NA" --- - +## Introduction +This report contains UMAP representation of cell clusters and visualization of the distribution of doublets across processed samples. ```{r setup, include=FALSE} library(dplyr) library(tidyr) diff --git a/inst/rmd/Empty_droplet_report.Rmd b/inst/rmd/Empty_droplet_report.Rmd index 215e2a88..20ca7956 100644 --- a/inst/rmd/Empty_droplet_report.Rmd +++ b/inst/rmd/Empty_droplet_report.Rmd @@ -167,6 +167,7 @@ print(plot) ``` ## Proportion of empty droplets +- Number and proportion of cells (non-empty droplets), everything above knee is retained. ```{r, warning=FALSE, message=FALSE, echo=FALSE} empty_count <- function(df) { # Count the TRUE and FALSE values in the empty_droplet column @@ -184,7 +185,6 @@ empty_count_results <- empty_count(combined_df) empty_count_results ``` -## Number and proportion of cells (non-empty droplets), everything above knee is retained. ```{r, warning=FALSE, message=FALSE, echo=FALSE} # Number of non-empty droplets ------------------------------------------------- empty_table <- function(df) { @@ -246,9 +246,9 @@ plot_hist ## Percentage of reads assigned to mitochondrial transcrips against library size -Scatter plot comparing mitochondrial content percentage to total count of RNA sequencing reads across different samples (in this case tissues) +- Scatter plot comparing mitochondrial content percentage to total count of RNA sequencing reads across different samples (in this case tissues) -The X-axis is on a logarithmic scale and represents the total count of RNA sequencing reads per cell, while the Y-axis shows the percentage of those reads that are mitochondrial. Each point on the plot represents a single cell. +- The X-axis is on a logarithmic scale and represents the total count of RNA sequencing reads per cell, while the Y-axis shows the percentage of those reads that are mitochondrial. Each point on the plot represents a single cell. ```{r, warning=FALSE, message=FALSE, echo=FALSE} plot_mito_data <- function(input_seurat, tissue_name, annotation_labels){ diff --git a/man/cell_cycle_scoring.Rd b/man/cell_cycle_scoring.Rd index 30a587c8..e42fc21e 100644 --- a/man/cell_cycle_scoring.Rd +++ b/man/cell_cycle_scoring.Rd @@ -4,12 +4,6 @@ \alias{cell_cycle_scoring} \title{Cell Cycle Scoring} \usage{ -<<<<<<< HEAD -cell_cycle_scoring(input_read_RNA_assay, empty_droplets_tbl, assay = NULL) -} -\arguments{ -\item{input_read_RNA_assay}{SingleCellExperiment object containing RNA assay data.} -======= cell_cycle_scoring( input_read_RNA_assay, empty_droplets_tbl, @@ -19,7 +13,6 @@ cell_cycle_scoring( } \arguments{ \item{input_read_RNA_assay}{A \code{SingleCellExperiment} or \code{Seurat} object containing RNA assay data.} ->>>>>>> upstream/master \item{empty_droplets_tbl}{A tibble identifying empty droplets.} diff --git a/man/doublet_identification.Rd b/man/doublet_identification.Rd index a63e4808..879c3010 100644 --- a/man/doublet_identification.Rd +++ b/man/doublet_identification.Rd @@ -8,38 +8,21 @@ doublet_identification( input_read_RNA_assay, empty_droplets_tbl, alive_identification_tbl, -<<<<<<< HEAD - annotation_label_transfer_tbl, - reference_label_fine, -======= ->>>>>>> upstream/master assay = NULL ) } \arguments{ -<<<<<<< HEAD -\item{input_read_RNA_assay}{SingleCellExperiment object containing RNA assay data.} -======= \item{input_read_RNA_assay}{A \code{SingleCellExperiment} or \code{Seurat} object containing RNA assay data.} ->>>>>>> upstream/master \item{empty_droplets_tbl}{A tibble identifying empty droplets.} \item{alive_identification_tbl}{A tibble identifying alive cells.} -<<<<<<< HEAD -\item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} - -\item{reference_label_fine}{Optional reference label for fine-tuning.} - -\item{assay}{Name of the assay to use.} -======= \item{assay}{Name of the assay to use.} \item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} \item{reference_label_fine}{Optional reference label for fine-tuning.} ->>>>>>> upstream/master } \value{ A tibble containing cells with their scDblFinder scores. diff --git a/man/eliminate_random_effects.Rd b/man/eliminate_random_effects.Rd deleted file mode 100644 index a1bbf256..00000000 --- a/man/eliminate_random_effects.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/HPCell.R -\name{eliminate_random_effects} -\alias{eliminate_random_effects} -\title{HPCell Package Functions} -\usage{ -eliminate_random_effects(formula) -} -\arguments{ -\item{formula}{An object of class \code{formula}, representing a mixed-effects model formula.} -} -\value{ -A formula object with random effects parts removed. -} -\description{ -Functions for the HPCell package. -Eliminate Random Effects from a Formula -} -\examples{ -eliminate_random_effects(~ age_days * sex + (1 | file_id) + ethnicity_simplified + assay_simplified + .aggregated_cells + (1 + age_days * sex | tissue)) -} diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index af22bd5b..d1632591 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -361,11 +361,21 @@ path<- paste0(system.file(package = "HPCell"), "extdata/Test.Rmd") ## Testing in Targets +file_paths <- tar_read(file_path, store = store) +data_container_type <- tar_read(data_container_type_file, store = store) + +input_file <- list() + +# Loop over elements in file_paths list +for (i in seq_along(file_paths)) { + input_file[[i]] <- read_data_container(file_paths[[i]], container_type = data_container_type) +} + ## Empty Droplets rmarkdown::render( input = paste0(system.file(package = "HPCell"), "/rmd/Empty_droplet_report.Rmd"), output_file = paste0(system.file(package = "HPCell"), "/Empty_droplet_report.html"), - params = list(x1 = tar_read(input_read, store = store), + params = list(x1 = read_data_container(tar_read(file_path, store = store), container_type = tar_read(data_container_type_file, store = store)), x2 = tar_read(empty_droplets_tbl, store = store), x3 = tar_read(annotation_label_transfer_tbl, store = store), x4 = tar_read(unique_tissues, store = store), From e8c56ad074e352f6c590b11b8fee957ce29a2ac3 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 5 Aug 2024 15:44:16 +1000 Subject: [PATCH 013/145] save transform assay in different formats --- R/tranform_assay.R | 26 ++++++---- R/utilities.R | 40 ++++++++++++++ tests/testthat/test_single_functions.R | 72 +++++++++++++------------- 3 files changed, 92 insertions(+), 46 deletions(-) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 531cb0f8..f9ac6d44 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -35,7 +35,7 @@ tranform_assay.HPCell = function(input_hpc, fx = identity, target_input = "read_ target_output, i |> read_data_container(container_type = data_container_type) |> - transform_utility(transform, e) |> + transform_utility(transform, e, data_container_type) |> substitute(env = list(i=as.symbol(target_input), e = external_path)), tiers, arguments_to_tier = arguments_to_tier, @@ -80,7 +80,7 @@ tranform_assay.HPCell = function(input_hpc, fx = identity, target_input = "read_ #' @param i A SummarizedExperiment object to be transformed. #' @param transform A function to apply to the assay of the SummarizedExperiment object. #' @param external_path A character string specifying the directory path to save the transformed object. -#' +#' @param data_container_type A character vector specifying the output file type. Ideally it should match to the input file type. #' @return The function does not return an object. It saves the transformed SummarizedExperiment object to the specified path. #' #' @importFrom SummarizedExperiment assay assay<- @@ -89,20 +89,28 @@ tranform_assay.HPCell = function(input_hpc, fx = identity, target_input = "read_ #' @importFrom HDF5Array saveHDF5SummarizedExperiment #' #' @export -transform_utility = function(i, transform, external_path) { +transform_utility = function(i, transform, external_path, data_container_type) { #i = i |> read_data_container(container_type = data_container_type) dir.create(external_path, showWarnings = FALSE, recursive = TRUE) file_name = glue("{external_path}/{digest(i)}") - assay(i) = assay(i) |> transform() i |> - saveHDF5SummarizedExperiment( - dir = file_name, - replace=TRUE, - as.sparse=TRUE - ) + save_experiment_data(dir = file_name, + container_type = data_container_type ) + # saveHDF5SummarizedExperiment( + # dir = file_name, + # replace=TRUE, + # as.sparse=TRUE + # ) + extension <- switch(data_container_type, + "sce_rds" = ".rds", + "seurat_rds" = ".rds", + "seurat_h5" = ".h5Seurat", + "anndata" = ".h5ad", + "sce_hdf5" = "") + file_name = paste0(file_name, extension) file_name } diff --git a/R/utilities.R b/R/utilities.R index e48d37b0..3ce6c316 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -52,6 +52,46 @@ read_data_container <- function(file, ) } +#' Save various types of single-cell data +#' @param data A data object to save. +#' @param dir A character vector of length one specifies the file path, or directory path. +#' @param container_type A character vector of length one specifies the input data type. +#' @return A `[Seurat::Seurat-class]` object +#' @importFrom HDF5Array loadHDF5SummarizedExperiment saveHDF5SummarizedExperiment +#' @export +save_experiment_data <- function(data, + dir, + container_type = "anndata"){ + + if (container_type == "seurat_h5") { + if (!requireNamespace("SeuratDisk", quietly = TRUE)) { + stop("HPCell says: You need to install the SeuratDisk package.") + } + } + + if (container_type == "anndata") { + if (!requireNamespace("zellkonverter", quietly = TRUE)) { + stop("HPCell says: You need to install the zellkonverter package.") + } + } + + switch(container_type, + "anndata" = zellkonverter::writeH5AD(data, + paste0(dir, ".h5ad"), + compression = "gzip"), + "sce_rds" = saveRDS(data, paste0(dir, ".rds")), + "seurat_rds" = saveRDS(data, paste0(dir, ".rds")), + "sce_hdf5" = saveHDF5SummarizedExperiment(data, + dir, + replace = TRUE, + as.sparse = TRUE), + + "seurat_h5" = SeuratDisk::SaveH5Seurat(data, + paste0(dir, ".h5Seurat"), + overwrite = TRUE) + ) +} + #' Gene name conversion using ensembl database #' #' @param id Character vector of gene names diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index f702ac7f..baaa5458 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -472,28 +472,26 @@ library(crew.cluster) # Define and execute the pipeline -c("dev/input_seurat_treated_1_SCE.rds", - "dev/input_seurat_treated_2_SCE.rds", - "dev/input_seurat_UNtreated_1_SCE.rds", - "dev/input_seurat_UNtreated_2_SCE.rds") |> - purrr::map_chr(here::here) |> - magrittr::set_names(c("pbmc3k1_1", "pbmc3k1_2", "pbmc3k1_3", "pbmc3k1_4")) |> - +# c("dev/input_seurat_treated_1_SCE.rds", +# "dev/input_seurat_treated_2_SCE.rds", +# "dev/input_seurat_UNtreated_1_SCE.rds", +# "dev/input_seurat_UNtreated_2_SCE.rds") |> +# purrr::map_chr(here::here) |> +# magrittr::set_names(c("pbmc3k1_1", "pbmc3k1_2", "pbmc3k1_3", "pbmc3k1_4")) |> +# dir("dev/CAQ_sce/", full.names = T) |> - # Initialise pipeline characteristics initialise_hpc( gene_nomenclature = "symbol", - data_container_type = "sce_hdf5", - store = "~/scratch/Census/census_reanalysis/sample_test/", - tier = c("tier_1", "tier_1", "tier_2", "tier_2"), + data_container_type = "sce_rds", + store = "~/scratch/Census/temp/", # tier = c("tier_1", "tier_2"), # - # debug_step = "non_batch_variation_removal_S_1", + debug_step = "annotation_tbl_1_cc5406fa48e92159", # Default resourced - # computing_resources = crew_controller_local(workers = 10), #resource_tuned_slurm + computing_resources = crew_controller_local(workers = 10) #resource_tuned_slurm # computing_resources = list( # @@ -516,42 +514,42 @@ c("dev/input_seurat_treated_1_SCE.rds", # ) # # Slurm resources - computing_resources = - crew.cluster::crew_controller_slurm( - slurm_memory_gigabytes_per_cpu = 5, - workers = 500, - tasks_max = 5, - verbose = T, - slurm_cpus_per_task = 1 - ) + # computing_resources = + # crew.cluster::crew_controller_slurm( + # slurm_memory_gigabytes_per_cpu = 5, + # workers = 500, + # tasks_max = 5, + # verbose = T, + # slurm_cpus_per_task = 1 + # ) ) |> tranform_assay(fx = purrr::map(1:16, ~identity), target_output = "sce_transformed") |> # Remove empty outliers - remove_empty_DropletUtils(target_input = "sce_transformed") |> + remove_empty_DropletUtils(target_input = "sce_transformed") |> # Remove dead cells - remove_dead_scuttle(target_input = "sce_transformed") |> - + remove_dead_scuttle(target_input = "sce_transformed") |> + # Score cell cycle - score_cell_cycle_seurat(target_input = "sce_transformed") |> - + score_cell_cycle_seurat(target_input = "sce_transformed") |> + # Remove doublets - remove_doublets_scDblFinder(target_input = "sce_transformed") |> - + remove_doublets_scDblFinder(target_input = "sce_transformed") |> + # Annotation - annotate_cell_type(target_input = "sce_transformed") |> - + annotate_cell_type(target_input = "sce_transformed") |> + normalise_abundance_seurat_SCT(factors_to_regress = c( - "subsets_Mito_percent", - "subsets_Ribo_percent", + "subsets_Mito_percent", + "subsets_Ribo_percent", "G2M.Score" - ), target_input = "sce_transformed") |> - - calculate_pseudobulk(group_by = "monaco_first.labels.fine", target_input = "sce_transformed") |> - - test_differential_abundance(~ age_days + (1|collection_id), .abundance="counts") |> + ), target_input = "sce_transformed") |> + + calculate_pseudobulk(group_by = "monaco_first.labels.fine", target_input = "sce_transformed") |> + + test_differential_abundance(~ age_days + (1|collection_id), .abundance="counts") |> #test_differential_abundance(~ age_days, .abundance="counts") # For the moment only available for single cell From eff84af32096c97a6cc89b8fbfee77a120cbe382 Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 6 Aug 2024 14:35:27 +1000 Subject: [PATCH 014/145] fix pipeline --- NAMESPACE | 1 + R/data.R | 11 +- R/functions.R | 56 ++++----- R/modules_grammar_hpc.R | 159 +++++++++++++------------ R/utilities.R | 2 +- man/eliminate_random_effects.Rd | 21 ---- man/ensembl_genes_biomart.Rd | 20 ++++ man/save_experiment_data.Rd | 21 ++++ man/test_differential_abundance.Rd | 27 +---- man/transform_utility.Rd | 4 +- tests/testthat/test_single_functions.R | 53 ++++----- 11 files changed, 191 insertions(+), 184 deletions(-) delete mode 100644 man/eliminate_random_effects.Rd create mode 100644 man/ensembl_genes_biomart.Rd create mode 100644 man/save_experiment_data.Rd diff --git a/NAMESPACE b/NAMESPACE index bc0cd688..065a0d2e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -52,6 +52,7 @@ export(remove_dead_scuttle) export(remove_doublets_scDblFinder) export(remove_empty_DropletUtils) export(run_targets_pipeline) +export(save_experiment_data) export(score_cell_cycle_seurat) export(se_add_dispersion) export(seurat_to_ligand_receptor_count) diff --git a/R/data.R b/R/data.R index 9fa03dca..a4f56b72 100644 --- a/R/data.R +++ b/R/data.R @@ -32,15 +32,16 @@ #' A data frame of Ensembl genes retrieved from biomaRt package #' +#' This dataset contains Ensembl gene IDs, external gene names, and chromosome names +#' retrieved using the biomaRt package. +#' #' @format A data frame map of ensembl_gene_id, external_gene_name and chromosome_name #' #' @usage -#' data(biomart_ensembl_genes) +#' data(ensembl_genes_biomart) #' -#' @source biomaRt getBM +#' @source biomaRt::getBM() #' #' @keywords datasets -#' #' @docType data -#' @noRd -"biomart_ensembl_genes" \ No newline at end of file +"ensembl_genes_biomart" \ No newline at end of file diff --git a/R/functions.R b/R/functions.R index 24c9ab3b..27c6b3cd 100644 --- a/R/functions.R +++ b/R/functions.R @@ -80,9 +80,10 @@ annotation_label_transfer <- function(input_read_RNA_assay, } if (gene_nomenclature == "ensembl") { - blueprint <- celldex::BlueprintEncodeData(ensembl = TRUE) + blueprint <- celldex::BlueprintEncodeData(ensembl = TRUE, legacy = TRUE) } else if (gene_nomenclature == "symbol") { - blueprint <- celldex::BlueprintEncodeData() + blueprint <- celldex::BlueprintEncodeData(legacy = TRUE) + } data_annotated = @@ -116,9 +117,9 @@ annotation_label_transfer <- function(input_read_RNA_assay, gc() if (gene_nomenclature == "ensembl") { - MonacoImmuneData = celldex::MonacoImmuneData(ensembl = TRUE) + MonacoImmuneData = celldex::MonacoImmuneData(ensembl = TRUE, legacy = TRUE) } else if (gene_nomenclature == "symbol") { - MonacoImmuneData = celldex::MonacoImmuneData() + MonacoImmuneData = celldex::MonacoImmuneData(legacy = TRUE) } @@ -740,8 +741,8 @@ non_batch_variation_removal <- function(input_read_RNA_assay, if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, - counts = assay) + + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL) # Rename assay assay_name_old = input_read_RNA_assay |> Assays() |> _[[1]] @@ -751,9 +752,8 @@ non_batch_variation_removal <- function(input_read_RNA_assay, new.assay.name = assay) } - - input_read_RNA_assay = - input_read_RNA_assay |> + counts = + input_read_RNA_assay_transform |> left_join(empty_droplets_tbl, by = ".cell") |> filter(!empty_droplet) |> @@ -764,7 +764,7 @@ non_batch_variation_removal <- function(input_read_RNA_assay, ) if(!is.null(cell_cycle_score_tbl)) - input_read_RNA_assay = input_read_RNA_assay |> + counts = counts |> left_join( cell_cycle_score_tbl |> @@ -782,19 +782,19 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # Normalise RNA normalized_rna <- Seurat::SCTransform( - input_read_RNA_assay, - assay=assay, - return.only.var.genes=FALSE, - residual.features = NULL, - vars.to.regress = factors_to_regress, - vst.flavor = "v2", - scale_factor=2186, - conserve.memory=T, - min_cells=0, - ) |> + counts, + assay=assay, + return.only.var.genes=FALSE, + residual.features = NULL, + vars.to.regress = factors_to_regress, + vst.flavor = "v2", + scale_factor=2186, + conserve.memory=T, + min_cells=0, + ) |> GetAssayData(assay="SCT") - + if (class_input == "SingleCellExperiment") { dir.create(external_path, showWarnings = FALSE, recursive = TRUE) @@ -802,17 +802,17 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # Write the slice to the output HDF5 file normalized_rna |> HDF5Array::writeHDF5Array( - filepath = glue("{external_path}/{digest(normalized_rna)}"), - name = "SCT", - as.sparse = TRUE - ) + filepath = glue("{external_path}/{digest(normalized_rna)}"), + name = "SCT", + as.sparse = TRUE + ) } else if (class_input == "Seurat") { normalized_rna } - + # # Normalise antibodies # if ( "ADT" %in% names(normalized_rna@assays)) { @@ -828,7 +828,9 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # select(-subsets_Ribo_percent, -subsets_Mito_percent, -G2M.Score) # } - #normalized_data[[my_assays]] + + + } diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 9e1cc14f..a739e025 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -192,7 +192,7 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N empty_droplet_id(total_RNA_count_check, gene_nomenclature = gene_nomenclature) |> substitute(env = list(i=as.symbol(target_input))), - #quote(), + #quote() tiers, other_arguments_to_tier = target_input, other_arguments_to_map = target_input @@ -446,12 +446,12 @@ remove_doublets_scDblFinder.HPCell = function(input_hpc, target_input = "read_fi empty_tbl, alive_tbl, - annotation_label_transfer_tbl + annotation_tbl ) |> substitute(env = list(i=as.symbol(target_input))), tiers, - other_arguments_to_tier = c(target_input, "empty_tbl", "alive_tbl", "annotation_label_transfer_tbl"), - other_arguments_to_map = c(target_input, "empty_tbl", "alive_tbl", "annotation_label_transfer_tbl") + other_arguments_to_tier = c(target_input, "empty_tbl", "alive_tbl", "annotation_tbl"), + other_arguments_to_map = c(target_input, "empty_tbl", "alive_tbl", "annotation_tbl") ), factory_collapse( @@ -615,7 +615,8 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = ) |> substitute(env = list(i=as.symbol(target_input), e = external_path)), tiers, - other_arguments_to_tier = c(target_input, "empty_tbl", "alive_tbl", "cell_cycle_tbl"), other_arguments_to_map = c(target_input, "empty_tbl", "alive_tbl", "cell_cycle_tbl") + other_arguments_to_tier = c(target_input, "empty_tbl", "alive_tbl", "cell_cycle_tbl"), + other_arguments_to_map = c(target_input, "empty_tbl", "alive_tbl", "cell_cycle_tbl") ) # , @@ -847,7 +848,7 @@ get_single_cell.HPCell = function(input_hpc, factors_to_regress = NULL, target_i #' #' This function tests differential abundance for HPCell objects. #' -#' @name test_differential_abundance,HPCell-method +#' @name test_differential_abundance-HPCell-method #' @rdname test_differential_abundance #' @inherit tidybulk::test_differential_abundance #' @@ -871,78 +872,78 @@ get_single_cell.HPCell = function(input_hpc, factors_to_regress = NULL, target_i #' @param .contrasts Contrasts parameter. #' @return The result of the differential abundance test. #' -setMethod( - "test_differential_abundance", - signature(.data = "HPCell"), - function(.data, .formula, .sample = NULL, .transcript = NULL, - .abundance = NULL, contrasts = NULL, method = "edgeR_quasi_likelihood", - test_above_log2_fold_change = NULL, scaling_method = "TMM", - omit_contrast_in_colnames = FALSE, prefix = "", action = "add", factor_of_interest = NULL, - target_input = "create_pseudobulk_sample", target_output = "de", - ..., significance_threshold = NULL, fill_missing_values = NULL, - .contrasts = NULL) { - - # Capture all arguments including defaults - args_list <- as.list(environment())[-1] - - # Optionally, you can evaluate the arguments if they are expressions - args_list <- lapply(args_list, eval, envir = parent.frame()) - - args_list$factory = function(tiers, .formula, factor_of_interest = NULL, .abundance = NULL, target_input, target_output){ - - if(.formula |> deparse() |> str_detect("\\|")) - factory_de_random_effect( - se_list_input = target_input, - output_se = target_output, - formula=.formula, - #method="edger_robust_likelihood_ratio", - tiers = tiers, - factor_of_interest = factor_of_interest, - .abundance = .abundance - ) - - else - factory_de_fix_effect( - se_list_input = target_input, - output_se = target_output, - formula=.formula, - method="edger_robust_likelihood_ratio", - tiers = tiers, - factor_of_interest = factor_of_interest, - .abundance = .abundance - ) - - } - - # We don't want recursive when we call factory - if(.data |> length() > 0) { - - environment(.formula) <- new.env(parent = emptyenv()) - - # Delete line with target in case the user execute the command, without calling initialise_hpc - target_output |> delete_lines_with_word(glue("{.data$initialisation$store}.R")) - - - tar_tier_append( - quote(dummy_hpc |> test_differential_abundance() %$% test_differential_abundance %$% factory), - tiers = .data$initialisation$tier |> get_positions() , - script = glue("{.data$initialisation$store}.R"), - .formula = .formula, - factor_of_interest = factor_of_interest, - .abundance = .abundance, - target_input = target_input, - target_output = target_output - ) - - } - - - .data |> - c(list(test_differential_abundance = args_list)) |> - add_class("HPCell") - - } -) +# setMethod( +# "test_differential_abundance", +# signature(.data = "HPCell"), +# function(.data, .formula, .sample = NULL, .transcript = NULL, +# .abundance = NULL, contrasts = NULL, method = "edgeR_quasi_likelihood", +# test_above_log2_fold_change = NULL, scaling_method = "TMM", +# omit_contrast_in_colnames = FALSE, prefix = "", action = "add", factor_of_interest = NULL, +# target_input = "create_pseudobulk_sample", target_output = "de", +# ..., significance_threshold = NULL, fill_missing_values = NULL, +# .contrasts = NULL) { +# +# # Capture all arguments including defaults +# args_list <- as.list(environment())[-1] +# +# # Optionally, you can evaluate the arguments if they are expressions +# args_list <- lapply(args_list, eval, envir = parent.frame()) +# +# args_list$factory = function(tiers, .formula, factor_of_interest = NULL, .abundance = NULL, target_input, target_output){ +# +# if(.formula |> deparse() |> str_detect("\\|")) +# factory_de_random_effect( +# se_list_input = target_input, +# output_se = target_output, +# formula=.formula, +# #method="edger_robust_likelihood_ratio", +# tiers = tiers, +# factor_of_interest = factor_of_interest, +# .abundance = .abundance +# ) +# +# else +# factory_de_fix_effect( +# se_list_input = target_input, +# output_se = target_output, +# formula=.formula, +# method="edger_robust_likelihood_ratio", +# tiers = tiers, +# factor_of_interest = factor_of_interest, +# .abundance = .abundance +# ) +# +# } +# +# # We don't want recursive when we call factory +# if(.data |> length() > 0) { +# +# environment(.formula) <- new.env(parent = emptyenv()) +# +# # Delete line with target in case the user execute the command, without calling initialise_hpc +# target_output |> delete_lines_with_word(glue("{.data$initialisation$store}.R")) +# +# +# tar_tier_append( +# quote(dummy_hpc |> test_differential_abundance() %$% test_differential_abundance %$% factory), +# tiers = .data$initialisation$tier |> get_positions() , +# script = glue("{.data$initialisation$store}.R"), +# .formula = .formula, +# factor_of_interest = factor_of_interest, +# .abundance = .abundance, +# target_input = target_input, +# target_output = target_output +# ) +# +# } +# +# +# .data |> +# c(list(test_differential_abundance = args_list)) |> +# add_class("HPCell") +# +# } +# ) # Define the generic function @@ -1045,7 +1046,7 @@ evaluate_hpc.HPCell = function(input_hpc) { tar_meta(store = glue("{input_hpc$initialisation$store}")) |> filter(name |> str_detect("single_cell_?.*$"), type=="pattern") |> pull(name) |> - map(tar_read_raw) |> + tar_read_raw(store = glue("{input_hpc$initialisation$store}")) |> unlist() |> do.call(cbind, args = _) ) diff --git a/R/utilities.R b/R/utilities.R index 3ce6c316..e363a6c0 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -56,7 +56,7 @@ read_data_container <- function(file, #' @param data A data object to save. #' @param dir A character vector of length one specifies the file path, or directory path. #' @param container_type A character vector of length one specifies the input data type. -#' @return A `[Seurat::Seurat-class]` object +#' @return An object stored in the defined path. #' @importFrom HDF5Array loadHDF5SummarizedExperiment saveHDF5SummarizedExperiment #' @export save_experiment_data <- function(data, diff --git a/man/eliminate_random_effects.Rd b/man/eliminate_random_effects.Rd deleted file mode 100644 index a1bbf256..00000000 --- a/man/eliminate_random_effects.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/HPCell.R -\name{eliminate_random_effects} -\alias{eliminate_random_effects} -\title{HPCell Package Functions} -\usage{ -eliminate_random_effects(formula) -} -\arguments{ -\item{formula}{An object of class \code{formula}, representing a mixed-effects model formula.} -} -\value{ -A formula object with random effects parts removed. -} -\description{ -Functions for the HPCell package. -Eliminate Random Effects from a Formula -} -\examples{ -eliminate_random_effects(~ age_days * sex + (1 | file_id) + ethnicity_simplified + assay_simplified + .aggregated_cells + (1 + age_days * sex | tissue)) -} diff --git a/man/ensembl_genes_biomart.Rd b/man/ensembl_genes_biomart.Rd new file mode 100644 index 00000000..f534e733 --- /dev/null +++ b/man/ensembl_genes_biomart.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{ensembl_genes_biomart} +\alias{ensembl_genes_biomart} +\title{A data frame of Ensembl genes retrieved from biomaRt package} +\format{ +A data frame map of ensembl_gene_id, external_gene_name and chromosome_name +} +\source{ +biomaRt::getBM() +} +\usage{ +data(ensembl_genes_biomart) +} +\description{ +This dataset contains Ensembl gene IDs, external gene names, and chromosome names +retrieved using the biomaRt package. +} +\keyword{datasets} diff --git a/man/save_experiment_data.Rd b/man/save_experiment_data.Rd new file mode 100644 index 00000000..40220119 --- /dev/null +++ b/man/save_experiment_data.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{save_experiment_data} +\alias{save_experiment_data} +\title{Save various types of single-cell data} +\usage{ +save_experiment_data(data, dir, container_type = "anndata") +} +\arguments{ +\item{data}{A data object to save.} + +\item{dir}{A character vector of length one specifies the file path, or directory path.} + +\item{container_type}{A character vector of length one specifies the input data type.} +} +\value{ +An object stored in the defined path. +} +\description{ +Save various types of single-cell data +} diff --git a/man/test_differential_abundance.Rd b/man/test_differential_abundance.Rd index c19b1086..8c81d813 100644 --- a/man/test_differential_abundance.Rd +++ b/man/test_differential_abundance.Rd @@ -1,30 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/modules_grammar_hpc.R -\name{test_differential_abundance,HPCell-method} -\alias{test_differential_abundance,HPCell-method} +\name{test_differential_abundance-HPCell-method} +\alias{test_differential_abundance-HPCell-method} +\alias{evaluate_hpc} \title{Test Differential Abundance for HPCell} \usage{ -\S4method{test_differential_abundance}{HPCell}( - .data, - .formula, - .sample = NULL, - .transcript = NULL, - .abundance = NULL, - contrasts = NULL, - method = "edgeR_quasi_likelihood", - test_above_log2_fold_change = NULL, - scaling_method = "TMM", - omit_contrast_in_colnames = FALSE, - prefix = "", - action = "add", - factor_of_interest = NULL, - target_input = "create_pseudobulk_sample", - target_output = "de", - ..., - significance_threshold = NULL, - fill_missing_values = NULL, - .contrasts = NULL -) +evaluate_hpc(input_hpc) } \arguments{ \item{.data}{An HPCell object.} diff --git a/man/transform_utility.Rd b/man/transform_utility.Rd index 48122692..d9365465 100644 --- a/man/transform_utility.Rd +++ b/man/transform_utility.Rd @@ -4,7 +4,7 @@ \alias{transform_utility} \title{Apply a transformation to an assay and save as HDF5} \usage{ -transform_utility(i, transform, external_path) +transform_utility(i, transform, external_path, data_container_type) } \arguments{ \item{i}{A SummarizedExperiment object to be transformed.} @@ -12,6 +12,8 @@ transform_utility(i, transform, external_path) \item{transform}{A function to apply to the assay of the SummarizedExperiment object.} \item{external_path}{A character string specifying the directory path to save the transformed object.} + +\item{data_container_type}{A character vector specifying the output file type. Ideally it should match to the input file type.} } \value{ The function does not return an object. It saves the transformed SummarizedExperiment object to the specified path. diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index baaa5458..ac36fcbb 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -486,32 +486,31 @@ library(crew.cluster) gene_nomenclature = "symbol", data_container_type = "sce_rds", store = "~/scratch/Census/temp/", - # tier = c("tier_1", "tier_2"), + tier = c("tier_1", "tier_2"), # - debug_step = "annotation_tbl_1_cc5406fa48e92159", + #debug_step = "sct_matrix_1_a21dd363c1592363", # Default resourced - computing_resources = crew_controller_local(workers = 10) #resource_tuned_slurm + #computing_resources = crew_controller_local(workers = 10) #resource_tuned_slurm - # computing_resources = list( - # - # crew_controller_slurm( - # name = "tier_1", - # slurm_memory_gigabytes_per_cpu = 5, - # slurm_cpus_per_task = 1, - # workers = 50, - # tasks_max = 5, - # verbose = T - # ), - # crew_controller_slurm( - # name = "tier_2", - # slurm_memory_gigabytes_per_cpu = 10, - # slurm_cpus_per_task = 1, - # workers = 50, - # tasks_max = 5, - # verbose = T - # ) - # ) + computing_resources = list( + + crew_controller_slurm( + name = "tier_1", + slurm_memory_gigabytes_per_cpu = 5, + slurm_cpus_per_task = 1, + workers = 50, + tasks_max = 5, + verbose = T + ), + crew_controller_slurm( + name = "tier_2", + slurm_memory_gigabytes_per_cpu = 10, + slurm_cpus_per_task = 1, + workers = 50, + tasks_max = 5, + verbose = T + )) # # Slurm resources # computing_resources = @@ -549,9 +548,9 @@ library(crew.cluster) calculate_pseudobulk(group_by = "monaco_first.labels.fine", target_input = "sce_transformed") |> - test_differential_abundance(~ age_days + (1|collection_id), .abundance="counts") |> - #test_differential_abundance(~ age_days, .abundance="counts") - - # For the moment only available for single cell - get_single_cell(target_input = "sce_transformed") + # test_differential_abundance(~ age_days + (1|collection_id), .abundance="counts") |> + # #test_differential_abundance(~ age_days, .abundance="counts") + # + # # For the moment only available for single cell + get_single_cell(target_input = "sce_transformed") From f393990d2720eda0a41a7b2bd04d9b19441446a0 Mon Sep 17 00:00:00 2001 From: myushen Date: Fri, 9 Aug 2024 17:30:34 +1000 Subject: [PATCH 015/145] fix the pipeline for census anndata input --- NAMESPACE | 5 + R/functions.R | 4 +- R/modules_grammar_hpc.R | 207 ++++++++++++++++++++++++--------- R/tranform_assay.R | 6 +- R/utilities.R | 147 +++++++++++++++++++---- man/empty_droplet_threshold.Rd | 27 +++++ man/get_count_per_gene_df.Rd | 14 +++ man/initialise_hpc.Rd | 16 ++- 8 files changed, 339 insertions(+), 87 deletions(-) create mode 100644 man/empty_droplet_threshold.Rd create mode 100644 man/get_count_per_gene_df.Rd diff --git a/NAMESPACE b/NAMESPACE index 065a0d2e..4ce1154b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -10,6 +10,8 @@ S3method(remove_dead_scuttle,HPCell) S3method(remove_doublets_scDblFinder,HPCell) S3method(remove_empty_DropletUtils,HPCell) S3method(remove_empty_DropletUtils,Seurat) +S3method(remove_empty_threshold,HPCell) +S3method(remove_empty_threshold,Seurat) S3method(score_cell_cycle_seurat,HPCell) S3method(tranform_assay,HPCell) export(alive_identification) @@ -23,6 +25,7 @@ export(create_pseudobulk) export(delete_lines_with_word) export(doublet_identification) export(empty_droplet_id) +export(empty_droplet_threshold) export(evaluate_hpc) export(expand_tiered_arguments) export(factory_de_fix_effect) @@ -51,6 +54,7 @@ export(reference_label_fine_id) export(remove_dead_scuttle) export(remove_doublets_scDblFinder) export(remove_empty_DropletUtils) +export(remove_empty_threshold) export(run_targets_pipeline) export(save_experiment_data) export(score_cell_cycle_seurat) @@ -235,6 +239,7 @@ importFrom(targets,tar_script) importFrom(tibble,as_tibble) importFrom(tibble,enframe) importFrom(tibble,rowid_to_column) +importFrom(tibble,rownames_to_column) importFrom(tibble,tibble) importFrom(tidybulk,as_SummarizedExperiment) importFrom(tidybulk,pivot_transcript) diff --git a/R/functions.R b/R/functions.R index 27c6b3cd..319a00b3 100644 --- a/R/functions.R +++ b/R/functions.R @@ -742,7 +742,8 @@ non_batch_variation_removal <- function(input_read_RNA_assay, if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL) + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + counts = assay) # Rename assay assay_name_old = input_read_RNA_assay |> Assays() |> _[[1]] @@ -1105,7 +1106,6 @@ pseudobulk_merge <- function(pseudobulk_list, ...) { output_path_sample <- pseudobulk_list |> # Add missing genes purrr::map(~{ - missing_genes = all_genes |> setdiff(rownames(.x)) if(missing_genes |> length() == 0) return(.x) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index a739e025..ce7ba0bf 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -16,6 +16,9 @@ #' @param cell_type_annotation_column Column name for cell type annotation in input data #' @param gene_nomenclature Character vector indicating gene nomenclature in input_data #' @param data_container_type A character vector of length one specifies the input data type. +#' @param target_error_option Character of length 1, what to do if the target stops and throws an error. +#' This argument matches to how targets handles error. Details can be found: +#' https://docs.ropensci.org/targets/reference/tar_option_set.html#arg-error #' The accepted input data type are: #' sce_rds for `SingleCellExperiment` RDS, #' seurat_rds for `Seurat` RDS, @@ -106,6 +109,7 @@ initialise_hpc <- function(input_hpc, tar_target(gene_nomenclature, readRDS("temp_gene_nomenclature.rds"), iteration = "list", deployment = "main"), tar_target(data_container_type, readRDS("data_container_type.rds"), deployment = "main") + ) @@ -149,17 +153,14 @@ initialise_hpc <- function(input_hpc, } - - - # Define the generic function #' @export -remove_empty_DropletUtils <- function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { - UseMethod("remove_empty_DropletUtils") +remove_empty_threshold <- function(input_hpc, RNA_count_threshold = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { + UseMethod("remove_empty_threshold") } #' @export -remove_empty_DropletUtils.Seurat = function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { +remove_empty_threshold.Seurat = function(input_hpc, RNA_count_threshold = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { # Capture all arguments including defaults args_list <- as.list(environment()) @@ -168,12 +169,12 @@ remove_empty_DropletUtils.Seurat = function(input_hpc, total_RNA_count_check = N list(initialisation = list(input_hpc = input_hpc)) |> add_class("HPCell") |> - remove_empty_DropletUtils() + remove_empty_threshold() } #' @export -remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl",...) { +remove_empty_threshold.HPCell = function(input_hpc, RNA_count_threshold = NULL, target_input = "read_file", target_output = "empty_tbl",...) { # Capture all arguments including defaults args_list <- as.list(environment())[-1] @@ -183,42 +184,31 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N args_list$factory = function(tiers, target_input, target_output){ list( - tar_target_raw("total_RNA_count_check", readRDS("total_RNA_count_check.rds") |> quote(), deployment = "main"), + tar_target_raw("RNA_count_threshold", readRDS("RNA_count_threshold.rds") |> quote(), deployment = "main"), factory_split( target_output, i |> read_data_container(container_type = data_container_type) |> - empty_droplet_id(total_RNA_count_check, + empty_droplet_threshold(RNA_count_threshold, gene_nomenclature = gene_nomenclature) |> substitute(env = list(i=as.symbol(target_input))), - #quote() tiers, other_arguments_to_tier = target_input, other_arguments_to_map = target_input - ) , - - factory_collapse( - "my_report", - # do.call(bind_rows, empty_droplets_tbl) |> quote(), - # "empty_droplets_tbl", - bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), - target_output, - tiers, packages = c("dplyr") - ) + ) ) - } # We don't want recursive when we call factory if(input_hpc |> length() > 0) { - total_RNA_count_check |> saveRDS("total_RNA_count_check.rds") + RNA_count_threshold |> saveRDS("RNA_count_threshold.rds") # Delete line with target in case the user execute the command, without calling initialise_hpc target_output |> delete_lines_with_word(glue("{input_hpc$initialisation$store}.R")) tar_tier_append( - fx = quote(dummy_hpc |> remove_empty_DropletUtils() %$% remove_empty_DropletUtils %$% factory), + fx = quote(dummy_hpc |> remove_empty_threshold() %$% remove_empty_threshold %$% factory), tiers = input_hpc$initialisation$tier |> get_positions() , target_input = target_input, target_output = target_output, @@ -230,13 +220,13 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N # Add pipeline step input_hpc |> - c(list(remove_empty_DropletUtils = args_list)) |> + c(list(remove_empty_threshold = args_list)) |> add_class("HPCell") } -target_chunk_undefined_remove_empty_DropletUtils = function(input_hpc){ +target_chunk_undefined_remove_empty_threshold = function(input_hpc){ append_chunk_tiers( { tar_target( empty_tbl_TIER_PLACEHOLDER, @@ -253,6 +243,106 @@ target_chunk_undefined_remove_empty_DropletUtils = function(input_hpc){ } +# Define the generic function +#' @export +remove_empty_DropletUtils <- function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { + UseMethod("remove_empty_DropletUtils") +} + +#' @export +remove_empty_DropletUtils.Seurat = function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { + # Capture all arguments including defaults + args_list <- as.list(environment()) + + # Optionally, you can evaluate the arguments if they are expressions + args_list <- lapply(args_list, eval, envir = parent.frame()) + + list(initialisation = list(input_hpc = input_hpc)) |> + add_class("HPCell") |> + remove_empty_DropletUtils() + +} + +#' @export +remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl",...) { + + # Capture all arguments including defaults + args_list <- as.list(environment())[-1] + + # Optionally, you can evaluate the arguments if they are expressions + args_list <- lapply(args_list, eval, envir = parent.frame()) + + args_list$factory = function(tiers, target_input, target_output){ + list( + tar_target_raw("total_RNA_count_check", readRDS("total_RNA_count_check.rds") |> quote(), deployment = "main"), + + factory_split( + target_output, + i |> + read_data_container(container_type = data_container_type) |> + empty_droplet_id(total_RNA_count_check, + gene_nomenclature = gene_nomenclature) |> + substitute(env = list(i=as.symbol(target_input))), + #quote() + tiers, + other_arguments_to_tier = target_input, + other_arguments_to_map = target_input + ) + # factory_collapse( + # "my_report", + # do.call(bind_rows, target_output) |> quote(), + # # "empty_droplets_tbl", + # #bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), + # target_output, + # tiers, packages = c("dplyr") + # ) + ) + + } + + # We don't want recursive when we call factory + if(input_hpc |> length() > 0) { + total_RNA_count_check |> saveRDS("total_RNA_count_check.rds") + + # Delete line with target in case the user execute the command, without calling initialise_hpc + target_output |> delete_lines_with_word(glue("{input_hpc$initialisation$store}.R")) + + tar_tier_append( + fx = quote(dummy_hpc |> remove_empty_DropletUtils() %$% remove_empty_DropletUtils %$% factory), + tiers = input_hpc$initialisation$tier |> get_positions() , + target_input = target_input, + target_output = target_output, + script = glue("{input_hpc$initialisation$store}.R") + ) + + } + + + # Add pipeline step + input_hpc |> + c(list(remove_empty_DropletUtils = args_list)) |> + add_class("HPCell") + + +} + +target_chunk_undefined_remove_empty_DropletUtils = function(input_hpc){ + append_chunk_tiers( + { tar_target( + empty_tbl_TIER_PLACEHOLDER, + read_file_list |> + read_data_container(container_type = data_container_type) |> as_tibble() |> select(.cell) |> mutate(empty_droplet = FALSE), + pattern = slice(read_file_list, index = SLICE_PLACEHOLDER ), + iteration = "list", + resources = RESOURCE_PLACEHOLDER, + packages = c("dplyr", "tidySingleCellExperiment", "tidyseurat") + ) }, + tiers = input_hpc$initialisation$tier, + script = glue("{input_hpc$initialisation$store}.R") + ) +} + + # Define the generic function #' @export remove_dead_scuttle <- function(input_hpc, group_by = NULL, target_input = "read_file", target_output = "alive_tbl") { @@ -286,14 +376,14 @@ remove_dead_scuttle.HPCell = function(input_hpc, group_by = NULL, target_input = tiers, other_arguments_to_tier = c(target_input, "empty_tbl", "annotation_tbl"), other_arguments_to_map = c(target_input, "empty_tbl", "annotation_tbl") - ), - - factory_collapse( - "my_report2", - bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), - target_output, - tiers, packages = c("dplyr") ) + + # factory_collapse( + # "my_report2", + # bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), + # target_output, + # tiers, packages = c("dplyr") + # ) ) } @@ -372,14 +462,14 @@ score_cell_cycle_seurat.HPCell = function(input_hpc, target_input = "read_file", substitute(env = list(i=as.symbol(target_input))), tiers, other_arguments_to_tier = c(target_input, "empty_tbl"), other_arguments_to_map = c(target_input, "empty_tbl") - ), - - factory_collapse( - "my_report3", - bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), - target_output, - tiers, packages = c("dplyr") ) + + # factory_collapse( + # "my_report3", + # bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), + # target_output, + # tiers, packages = c("dplyr") + # ) ) } @@ -452,14 +542,14 @@ remove_doublets_scDblFinder.HPCell = function(input_hpc, target_input = "read_fi tiers, other_arguments_to_tier = c(target_input, "empty_tbl", "alive_tbl", "annotation_tbl"), other_arguments_to_map = c(target_input, "empty_tbl", "alive_tbl", "annotation_tbl") - ), - - factory_collapse( - "my_report4", - bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), - target_output, - tiers, packages = c("dplyr") ) + + # factory_collapse( + # "my_report4", + # bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), + # target_output, + # tiers, packages = c("dplyr") + # ) ) } @@ -532,14 +622,14 @@ annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL, target substitute(env = list(i=as.symbol(target_input))), tiers, other_arguments_to_tier = c(target_input, "empty_tbl"), other_arguments_to_map = c(target_input, "empty_tbl") - ), - - factory_collapse( - "my_report5", - bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), - target_output, - tiers, packages = c("dplyr") ) + + # factory_collapse( + # "my_report5", + # bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), + # target_output, + # tiers, packages = c("dplyr") + # ) ) } @@ -961,8 +1051,11 @@ evaluate_hpc.HPCell = function(input_hpc) { # Empty droplets #-----------------------# - if(! "remove_empty_DropletUtils" %in% names(input_hpc)) - target_chunk_undefined_remove_empty_DropletUtils(input_hpc) + if(! "remove_empty_threshold" %in% names(input_hpc)) + target_chunk_undefined_remove_empty_threshold(input_hpc) + + # if(! "remove_empty_DropletUtils" %in% names(input_hpc)) + # target_chunk_undefined_remove_empty_DropletUtils(input_hpc) #-----------------------# # Annotate cell type @@ -1030,6 +1123,7 @@ evaluate_hpc.HPCell = function(input_hpc) { "temp_computing_resources.rds", "temp_debug_step.rds", "sample_names.rds", + "RNA_count_threshold.rds", "total_RNA_count_check.rds", "temp_group_by.rds", "factors_to_regress.rds", @@ -1037,6 +1131,7 @@ evaluate_hpc.HPCell = function(input_hpc) { "temp_tiers.rds", "temp_gene_nomenclature.rds", "data_container_type.rds" + ) |> remove_files_safely() diff --git a/R/tranform_assay.R b/R/tranform_assay.R index f9ac6d44..ec8b38e3 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -94,7 +94,9 @@ transform_utility = function(i, transform, external_path, data_container_type) dir.create(external_path, showWarnings = FALSE, recursive = TRUE) file_name = glue("{external_path}/{digest(i)}") - assay(i) = assay(i) |> transform() + #assay(i) = assay(i) |> transform() + i = i |> transform() + i |> save_experiment_data(dir = file_name, @@ -114,3 +116,5 @@ transform_utility = function(i, transform, external_path, data_container_type) file_name = paste0(file_name, extension) file_name } + + \ No newline at end of file diff --git a/R/utilities.R b/R/utilities.R index e363a6c0..e389eb3f 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -119,6 +119,21 @@ convert_gene_names <- function(id, edb_df } +#' Transform counts to continous data +#' @param counts A SummarizedExperiment object +#' @importFrom tidyr pivot_longer +#' @importFrom SummarizedExperiment assay +#' @importFrom tibble as_tibble rownames_to_column +#' @importFrom magrittr extract2 +get_count_per_gene_df <- function(counts) { + #assay_name = data@assays |> names() |> extract2(1) + #counts <- assay(data, assay_name) |> as.data.frame() |> rownames_to_column(var = "features") + counts_tidy <- counts |> as.data.frame() |> tibble::rownames_to_column(var = "features") |> + as_tibble() |> pivot_longer(!features, names_to = "cells", + values_to = "counts") + counts_tidy +} + #' Identify Empty Droplets in Single-Cell RNA-seq Data #' #' @description @@ -209,11 +224,11 @@ empty_droplet_id <- function(input_read_RNA_assay, # Calculate bar-codes ranks barcode_ranks <- barcodeRanks(filtered_counts) - + # Set the minimum total RNA per cell for ambient RNA if(min(barcode_ranks$total) < 100) { lower = 100 } else { lower = quantile(barcode_ranks$total, 0.05) - + # write_lines( # glue("{input_path} has supposely empty droplets with a lot of RNAm maybe a lot of ambient RNA? Please investigate"), # file = glue("{dirname(output_path_result)}/warnings_emptyDrops.txt"), @@ -240,15 +255,15 @@ empty_droplet_id <- function(input_read_RNA_assay, } # barcode ranks - barcode_table <- barcode_table |> - left_join( - barcode_ranks |> - as_tibble(rownames = ".cell") |> - mutate( - knee = metadata(barcode_ranks)$knee, - inflection = metadata(barcode_ranks)$inflection - ) - ) + # barcode_table <- barcode_table |> + # left_join( + # barcode_ranks |> + # as_tibble(rownames = ".cell") |> + # mutate( + # knee = metadata(barcode_ranks)$knee, + # inflection = metadata(barcode_ranks)$inflection + # ) + # ) # barcode_table |> saveRDS(output_path_result) @@ -283,6 +298,93 @@ empty_droplet_id <- function(input_read_RNA_assay, # return(list(barcode_table, plot_barcode_ranks)) } +#' Identify Empty Droplets in Single-Cell RNA-seq Data +#' +#' @description +#' `empty_droplet_id` distinguishes between empty and non-empty droplets using the DropletUtils package. +#' It excludes mitochondrial and ribosomal genes, calculates barcode ranks, and optionally filters input data +#' based on these criteria. The function returns a tibble containing log probabilities, FDR, and a classification +#' indicating whether cells are empty droplets. +#' +#' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. +#' @param filter_empty_droplets Logical value indicating whether to filter the input data. +#' +#' @return A tibble with columns: logProb, FDR, empty_droplet (classification of droplets). +#' +#' @importFrom AnnotationDbi mapIds +#' @importFrom stringr str_subset +#' @importFrom dplyr left_join mutate +#' @importFrom tidyr replace_na +#' @importFrom DropletUtils emptyDrops barcodeRanks +#' @importFrom S4Vectors metadata +#' @importFrom EnsDb.Hsapiens.v86 EnsDb.Hsapiens.v86 +#' @importFrom biomaRt useMart getBM +#' +#' @export +empty_droplet_threshold<- function(input_read_RNA_assay, + total_RNA_count_check = -Inf, + assay = NULL, + gene_nomenclature){ + #Fix GChecks + FDR = NULL + .cell = NULL + + # Get assay + if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) + + # Check if empty droplets have been identified + nFeature_name <- paste0("nFeature_", assay) + + filter_empty_droplets <- "TRUE" + + significance_threshold = 0.001 + RNA_feature_count_threshold = 200 + RNA_count_threshold = 100 + # Genes to exclude + if (gene_nomenclature == "symbol") { + location <- mapIds( + EnsDb.Hsapiens.v86, + keys=rownames(input_read_RNA_assay), + column="SEQNAME", + keytype="SYMBOL" + ) + mitochondrial_genes = which(location=="MT") |> names() + ribosome_genes = rownames(input_read_RNA_assay) |> str_subset("^RPS|^RPL") + + } else if (gene_nomenclature == "ensembl") { + # all_genes are saved in data/all_genes.rda to avoid recursively accessing biomaRt backend for potential timeout error + data(ensembl_genes_biomart) + all_mitochondrial_genes <- ensembl_genes_biomart[grep("MT", ensembl_genes_biomart$chromosome_name), ] + all_ribosome_genes <- ensembl_genes_biomart[grep("^(RPL|RPS)", ensembl_genes_biomart$external_gene_name), ] + + mitochondrial_genes <- all_mitochondrial_genes |> + filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) + ribosome_genes <- all_ribosome_genes |> + filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) + } + + # Get counts + if (inherits(input_read_RNA_assay, "Seurat")) { + counts <- GetAssayData(input_read_RNA_assay, assay, slot = "counts") + } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { + counts <- assay(input_read_RNA_assay, assay) + } + filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] + + # filter based on RNA_count_threshold + result <- colSums(filtered_counts) |> enframe(name = ".cell", value = "RNA_count") |> + mutate(empty_droplet = RNA_count < RNA_count_threshold) |> + select(.cell, empty_droplet) + + result + # rosums(…) |> enframe(value…, name…) |> mutate(rowSums(filtered_counts) > + # RNA_count_threshold) + # + # #|> select(-row_sum_column_whatever_that_name_is) + + #the result should be a two column tibble, with .cell anf empty_drople columkn names +} + #' Reference Label Fine Identification #' @@ -2072,26 +2174,27 @@ feature_chunks = function(features, chunk_size = 100){ } + + add_missingh_genes_to_se = function(se, all_genes, missing_genes){ missing_matrix = matrix(rep(0, length(missing_genes) * ncol(se)), ncol = ncol(se)) rownames(missing_matrix) = missing_genes colnames(missing_matrix) = colnames(se) + + new_se = SummarizedExperiment(assays = list(count = missing_matrix |> DelayedArray::DelayedArray() ), + colData = colData(se)) + - new_se = SummarizedExperiment(assay = list(count = missing_matrix)) - colData(new_se) = colData(se) - - empty_rowdata = - rowData(se)[seq_len(nrow(new_se)),,drop=FALSE] |> - as_tibble() |> - mutate(across(everything(), ~ replace(., TRUE, NA))) |> - DataFrame(row.names = missing_genes) - - rowData(new_se) = empty_rowdata + empty_rowdata = DataFrame(matrix(NA, ncol = ncol(rowData(se)), nrow = length(missing_genes)), + row.names = missing_genes) + names(empty_rowdata) <- names(rowData(se)) + rowData(new_se) = empty_rowdata + se = SummarizedExperiment(assays = assays(se), colData = colData(se), rowData = rowData(se)) se = se |> rbind(new_se) - + se[all_genes,] } diff --git a/man/empty_droplet_threshold.Rd b/man/empty_droplet_threshold.Rd new file mode 100644 index 00000000..c6eed1de --- /dev/null +++ b/man/empty_droplet_threshold.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{empty_droplet_threshold} +\alias{empty_droplet_threshold} +\title{Identify Empty Droplets in Single-Cell RNA-seq Data} +\usage{ +empty_droplet_threshold( + input_read_RNA_assay, + total_RNA_count_check = -Inf, + assay = NULL, + gene_nomenclature +) +} +\arguments{ +\item{input_read_RNA_assay}{SingleCellExperiment or Seurat object containing RNA assay data.} + +\item{filter_empty_droplets}{Logical value indicating whether to filter the input data.} +} +\value{ +A tibble with columns: logProb, FDR, empty_droplet (classification of droplets). +} +\description{ +\code{empty_droplet_id} distinguishes between empty and non-empty droplets using the DropletUtils package. +It excludes mitochondrial and ribosomal genes, calculates barcode ranks, and optionally filters input data +based on these criteria. The function returns a tibble containing log probabilities, FDR, and a classification +indicating whether cells are empty droplets. +} diff --git a/man/get_count_per_gene_df.Rd b/man/get_count_per_gene_df.Rd new file mode 100644 index 00000000..29789971 --- /dev/null +++ b/man/get_count_per_gene_df.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{get_count_per_gene_df} +\alias{get_count_per_gene_df} +\title{Transform counts to continous data} +\usage{ +get_count_per_gene_df(counts) +} +\arguments{ +\item{counts}{A SummarizedExperiment object} +} +\description{ +Transform counts to continous data +} diff --git a/man/initialise_hpc.Rd b/man/initialise_hpc.Rd index 910847d4..ca147282 100644 --- a/man/initialise_hpc.Rd +++ b/man/initialise_hpc.Rd @@ -28,12 +28,7 @@ initialise_hpc( \item{gene_nomenclature}{Character vector indicating gene nomenclature in input_data} -\item{data_container_type}{A character vector of length one specifies the input data type. -The accepted input data type are: -sce_rds for \code{SingleCellExperiment} RDS, -seurat_rds for \code{Seurat} RDS, -sce_hdf5 for \code{SingleCellExperiment} HDF5-based object -seurat_h5 for \code{Seurat} HDF5-based object} +\item{data_container_type}{A character vector of length one specifies the input data type.} \item{input_reference}{Optional reference data.} @@ -44,6 +39,15 @@ seurat_h5 for \code{Seurat} HDF5-based object} \item{sample_column}{Column name for sample identification.} \item{cell_type_annotation_column}{Column name for cell type annotation in input data} + +\item{target_error_option}{Character of length 1, what to do if the target stops and throws an error. +This argument matches to how targets handles error. Details can be found: +https://docs.ropensci.org/targets/reference/tar_option_set.html#arg-error +The accepted input data type are: +sce_rds for \code{SingleCellExperiment} RDS, +seurat_rds for \code{Seurat} RDS, +sce_hdf5 for \code{SingleCellExperiment} HDF5-based object +seurat_h5 for \code{Seurat} HDF5-based object} } \value{ The output of the \code{targets} pipeline, typically a pre-processed data set. From 3d6d946278190df812384d8d0ebbf166c9bf10fc Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 14 Aug 2024 17:04:48 +1000 Subject: [PATCH 016/145] testthat for census data --- R/functions.R | 5 +- tests/testthat/test-census-samples.R | 306 +++++++++++++++++++++++++++ 2 files changed, 310 insertions(+), 1 deletion(-) create mode 100644 tests/testthat/test-census-samples.R diff --git a/R/functions.R b/R/functions.R index 319a00b3..f382f51a 100644 --- a/R/functions.R +++ b/R/functions.R @@ -690,7 +690,9 @@ cell_cycle_scoring <- function(input_read_RNA_assay, CellCycleScoring( s.features = s.features_tidy, g2m.features = g2m.features_tidy, - set.ident = FALSE + set.ident = FALSE + # need to find a bin-free method. Relevant issue: https://github.com/satijalab/seurat/issues/7694 + # nbin = 1 ) |> as_tibble() |> @@ -1086,6 +1088,7 @@ pseudobulk_merge <- function(pseudobulk_list, ...) { . = NULL # Select only common columns + # investiagte common_columns, as data_source is not a common column in the pilot data common_columns = pseudobulk_list |> purrr::map(~ .x |> as_tibble() |> colnames()) |> diff --git a/tests/testthat/test-census-samples.R b/tests/testthat/test-census-samples.R new file mode 100644 index 00000000..0c9ced50 --- /dev/null +++ b/tests/testthat/test-census-samples.R @@ -0,0 +1,306 @@ +# test census-20-samples -------------------------------------------------- +library(glue) +library(dplyr) +library(arrow) +library(SingleCellExperiment) +library(tibble) +library(SummarizedExperiment) +library(CuratedAtlasQueryR) +library(glue) +library(purrr) +library(zellkonverter) +library(tidyr) +library(ggplot2) +library(plotly) +library(targets) +library(stringr) +directory = "~/cellxgene_curated/census_samples/anndata" +store = "~/scratch/Census/census_reanalysis/census-run-20-samples" +files <- dir(glue("{directory}"), full.names = T) |> head(20) +# results <- purrr::map_dfr(files, function(file_path) { +# data <- zellkonverter::readH5AD(file_path, use_hdf5 = TRUE, reader = "R", verbose = TRUE) +# +# cell_number <- length(colnames(data)) +# +# +# file_size <- file.info(file_path)$size / 1073741824 +# +# tibble(file_name = file_path, +# cell_number = cell_number, +# file_size = file_size) +# }) + +#results |> saveRDS(glue("{store}/sample_tiers.rds")) +results <- readRDS(glue("{store}/sample_tiers.rds")) + +tiers_dataframe <- results |> + mutate(file_name = file_name, + file_size = round(file_size, 3), + tier = ifelse(cell_number > 6000, "tier_2", "tier_1"), + set_names = basename(file_name) |> stringr::str_remove("\\.h5ad$")) + +result_directory = "/vast/projects/cellxgene_curated/metadata_cellxgenedp_Apr_2024" +samples <- read_parquet("~/cellxgene_curated/census_samples/census_samples_to_download_groups.parquet") +sample_meta <- tar_read(metadata_dataset_id_common_sample_columns, store = glue("{result_directory}/_targets")) +samples = samples |> left_join(get_metadata() |> select(dataset_id, contains("norm")) |> + distinct() |> filter(!is.na(x_normalization)) |> + as_tibble(), by = "dataset_id") +# df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_id, sample_2, x_normalization, x_approximate_distribution) |> +# mutate(current_normalisation_method = case_when(str_like(x_normalization, "C%") ~ "log", +# x_normalization == "none" ~ "log", +# x_normalization == "normalized" ~ "log", +# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "log", +# is.na(x_normalization) & x_approximate_distribution == "NORMAL" ~ "NORMAL", +# is.na(x_normalization) & x_approximate_distribution == "COUNT" ~ "COUNT", +# str_like(x_normalization, "%canpy%") ~ "log1p", +# +# TRUE ~ x_normalization)) |> +# mutate(method_to_apply = case_when(current_normalisation_method %in% c("log","LogNormalization","LogNormalize","log-normalization") ~ "exp(counts)", +# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "exp(counts)", +# str_like(current_normalisation_method, "Counts%") ~ "exp(counts)", +# str_like(current_normalisation_method, "%log2%") ~ "2^counts", +# current_normalisation_method %in% c("log1p", "log1p, base e", "Scanpy", +# "scanpy.api.pp.normalize_per_cell method, scaling factor 10000") ~ "expm1(counts)", +# current_normalisation_method == "log1p, base 2" ~ "2^counts - 1", +# current_normalisation_method == "NORMAL" ~ "exp(counts)", +# current_normalisation_method == "COUNT" ~ "no method applied" +# ) +# ) |> +# mutate(comment = case_when(str_like(x_normalization, "Counts%") ~ "a checkpoint for max value of Assay must <= 50", +# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "round negative value to 0", +# x_normalization == "normalized" ~ "round negative value to 0" +# +# )) + +df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_id, sample_2, x_normalization, x_approximate_distribution) |> + mutate(transform_method = case_when(str_like(x_normalization, "C%") ~ "log", + x_normalization == "none" ~ "log", + x_normalization == "normalized" ~ "log", + is.na(x_normalization) & is.na(x_approximate_distribution) ~ "log", + is.na(x_normalization) & x_approximate_distribution == "NORMAL" ~ "NORMAL", + is.na(x_normalization) & x_approximate_distribution == "COUNT" ~ "COUNT", + str_like(x_normalization, "%canpy%") ~ "log1p", + TRUE ~ x_normalization)) |> + + mutate(method_to_apply = case_when(transform_method %in% c("log","LogNormalization","LogNormalize","log-normalization") ~ "exp", + is.na(x_normalization) & is.na(x_approximate_distribution) ~ "exp", + str_like(transform_method, "Counts%") ~ "exp", + str_like(transform_method, "%log2%") ~ "exp", + transform_method %in% c("log1p", "log1p, base e", "Scanpy", + "scanpy.api.pp.normalize_per_cell method, scaling factor 10000") ~ "expm1", + transform_method == "log1p, base 2" ~ "expm1", + transform_method == "NORMAL" ~ "exp", + transform_method == "COUNT" ~ "identity" + ) ) |> + mutate(comment = case_when(str_like(x_normalization, "Counts%") ~ "a checkpoint for max value of Assay must <= 50", + is.na(x_normalization) & is.na(x_approximate_distribution) ~ "round negative value to 0", + x_normalization == "normalized" ~ "round negative value to 0" + )) |> + mutate(transformation_function = map( + method_to_apply, + ~ (function(data) { + assay_name <- data@assays |> names() |> magrittr::extract2(1) + counts <- assay(data, assay_name) + density_est <- density(counts |> HPCell:::get_count_per_gene_df() |> pull(counts) ) + mode_value <- density_est$x[which.max(density_est$y)] + if (mode_value < 0 ) counts <- counts + abs(mode_value) + + # Scale max counts to 20 to avoid any downstream failure + if ((.x == "exp") && (max(counts) > 20)){ + scale_factor = 20/max(counts) + counts = counts * scale_factor + } + + # Apply the transformation + counts <- transform_method(counts) + + while (TRUE) { + # Avoid majority of genes after transformation are 1, so substract by 1 + majority_gene_counts = names(which.max(table(as.vector(counts)))) |> as.numeric() + + #substract all counts by the majority_gene_counts if majority_gene_counts is not 0. + if (majority_gene_counts == 0) { + break + } + counts <- counts - majority_gene_counts + } + + # Avoid downstream failures negative counts + if((counts[,1:min(10000, ncol(counts))] |> min()) < 0) + counts[counts < 0] <- 0 + + col_sums <- colSums(counts) + # Cap large values + if(max(col_sums) > 1e100) { + temp <- counts[, sample(1:ncol(data), size = 10000, replace = TRUE), drop = TRUE] + q <- quantile(temp[temp > 0], 0.9) + counts[counts > 1e100] <- q + } + # Drop all zero cells + data <- data[, col_sums > 0] + + # Avoid downstream binding error + rowData(data) = NULL + + # Assign counts back to data + assay(data, assay_name) <- counts + + data + + }) |> + # Meta programming, replacing the transformation programmatically + substitute( env = list(transform_method = as.name(.x))) |> + # Evaluate back to a working function + eval() + )) + + +files <- results |> mutate(sample_2 = basename(file_name) |> tools::file_path_sans_ext()) |> + left_join(df, by = "sample_2") |> left_join(tiers_dataframe, by = c("sample_2"= "set_names")) |> + select(-file_name.y, -cell_number.y, -file_size.y) |> rename(file_name = file_name.x, + cell_number = cell_number.x, + file_size = file_size.x) + #files |> head(10) |> pull(file_name) |> + # c("/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0024f909bf540734c021854ee1c758ca.h5ad") |> +#files |> filter(cell_number %in% c(2505, 2105)) |> pull(file_name) |> +c("/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0063a5c025db1f4292c1875035cece1f.h5ad") |> + initialise_hpc( + gene_nomenclature = "ensembl", + data_container_type = "anndata", + #store = "~/scratch/Census/census_reanalysis/census-run-20-samples/20samples/", + store = "~/scratch/Census/census_reanalysis/census-run-20-samples/20samples/fail_samples/", + #debug_step = "cell_cycle_tbl_tier_1_e0606bff6b731c54", # problematic sample + #debug_step = "cell_cycle_tbl_tier_1_ea6705b8ecef4374", + #tier = files |> head(10) |> pull(tier), + tier = "tier_1", + #computing_resources = crew_controller_local(workers = 10) #resource_tuned_slurm + computing_resources = list( + + crew_controller_slurm( + name = "tier_1", + slurm_memory_gigabytes_per_cpu = 15, + slurm_cpus_per_task = 1, + workers = 50, + tasks_max = 5, + verbose = T, + slurm_time_minutes = 200 + ), + crew_controller_slurm( + name = "tier_2", + slurm_memory_gigabytes_per_cpu = 30, + slurm_cpus_per_task = 1, + workers = 50, + tasks_max = 5, + verbose = T, + slurm_time_minutes = 200 + )) + + ) |> + # this does not tested whether identity being successfully assigned or unassigned, because identity remains the original function + #tranform_assay(fx = purrr::map(1:20, ~identity), target_output = "sce_transformed") |> + # tranform_assay(fx = files |> filter(file_name == "/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0024f909bf540734c021854ee1c758ca.h5ad") |> + # pull(transformation_function) |> _[[1]], + # target_output = "sce_transformed") |> + tranform_assay(fx = files |> filter(cell_number == 2505)|> + pull(transformation_function) |> _[[1]], + target_output = "sce_transformed") |> + + # Remove empty outliers based on RNA count threshold per cell + remove_empty_threshold(target_input = "sce_transformed", RNA_count_threshold = 100 ) |> + + # Remove empty outliers + # remove_empty_DropletUtils(target_input = "sce_transformed") |> + + # Remove dead cells + remove_dead_scuttle(target_input = "sce_transformed") |> + + # Score cell cycle + score_cell_cycle_seurat(target_input = "sce_transformed") |> + + # Remove doublets + remove_doublets_scDblFinder(target_input = "sce_transformed") |> + + # Annotation + annotate_cell_type(target_input = "sce_transformed") |> + + normalise_abundance_seurat_SCT(factors_to_regress = c( + "subsets_Mito_percent", + "subsets_Ribo_percent", + "G2M.Score" + ), target_input = "sce_transformed") + + # calculate_pseudobulk(group_by = "monaco_first.labels.fine", target_input = "sce_transformed") |> + # + # # test_differential_abundance(~ age_days + (1|collection_id), .abundance="counts") |> + # # #test_differential_abundance(~ age_days, .abundance="counts") + # # + # # # For the moment only available for single cell + # get_single_cell(target_input = "sce_transformed") + + +# # Test substitute eval function +# .x = "exp" +# fx <- (function(x){ bla(x) }) |> substitute( env = list(bla = as.name(.x))) |> eval() +# fx(2) +# +# +# get_count_per_gene_df <- function(counts) { +# counts_tidy <- counts |> as.data.frame() |> tibble::rownames_to_column(var = "features") |> +# as_tibble() |> pivot_longer(!features, names_to = "cells", +# values_to = "counts") +# counts_tidy +# } +# +# .x = "exp" +# my_function <- (function(data) { +# assay_name <- data@assays |> names() |> magrittr::extract2(1) +# counts <- assay(data, assay_name) +# density_est <- density(counts |> get_count_per_gene_df() |> pull(counts) ) +# mode_value <- density_est$x[which.max(density_est$y)] +# if (mode_value < 0 ) counts <- counts + abs(mode_value) +# # Apply the transformation +# counts <- transform_method(counts) +# +# # Avoid downstream failures +# if((counts[,1:min(10000, ncol(counts))] |> min()) < 0) +# counts[counts < 0] <- 0 +# +# # Avoid majority of genes after transformation are 1, so substract by 1 +# counts = names(which.max(table(as.vector(counts)))) +# +# if (counts == "1") counts <- counts - 1 +# col_sums <- colSums(counts) +# # Cap large values +# if(max(col_sums) > 1e100) { +# temp <- counts[, sample(1:ncol(data), size = 10000, replace = TRUE), drop = TRUE] +# q <- quantile(temp[temp > 0], 0.9) +# counts[counts > 1e100] <- q +# } +# # Drop all zero cells +# data <- data[, col_sums > 0] +# +# # Avoid downstream binding error +# rowData(data) = NULL +# +# # Assign counts back to data +# assay(data, assay_name) <- counts +# +# data +# +# }) |> +# # Meta programming, replacing the transformation programmatically +# substitute( env = list(transform_method = as.name(.x))) |> +# # Evaluate back to a working function +# eval() +# +# original_data = readH5AD("/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0024f909bf540734c021854ee1c758ca.h5ad", reader = "R", use_hdf5 = TRUE) +# original_data |> assay("X") |> as.numeric() |> summary() +# transform_data <- my_function(original_data) +# transform_data |> assay("X") |> as.numeric() |> summary() +# +# +# transform_data |> assay("X") |> get_count_per_gene_df() |> ggplot(aes(counts)) +geom_density() +# + + + From ef88d91193866a2db0b9e312c59e860ec94005e9 Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 14 Aug 2024 19:19:11 +1000 Subject: [PATCH 017/145] update transformation function --- tests/testthat/test-census-samples.R | 37 +++++++++++----------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/tests/testthat/test-census-samples.R b/tests/testthat/test-census-samples.R index 0c9ced50..7ed569a4 100644 --- a/tests/testthat/test-census-samples.R +++ b/tests/testthat/test-census-samples.R @@ -109,22 +109,17 @@ df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_i if ((.x == "exp") && (max(counts) > 20)){ scale_factor = 20/max(counts) counts = counts * scale_factor - } - - # Apply the transformation - counts <- transform_method(counts) - - while (TRUE) { + # Apply the transformation + counts <- transform_method(counts) + # Avoid majority of genes after transformation are 1, so substract by 1 majority_gene_counts = names(which.max(table(as.vector(counts)))) |> as.numeric() #substract all counts by the majority_gene_counts if majority_gene_counts is not 0. - if (majority_gene_counts == 0) { - break - } - counts <- counts - majority_gene_counts + if (majority_gene_counts != transform_method(scale_factor)) counts <- counts - majority_gene_counts } + # Avoid downstream failures negative counts if((counts[,1:min(10000, ncol(counts))] |> min()) < 0) counts[counts < 0] <- 0 @@ -160,22 +155,18 @@ files <- results |> mutate(sample_2 = basename(file_name) |> tools::file_path_sa select(-file_name.y, -cell_number.y, -file_size.y) |> rename(file_name = file_name.x, cell_number = cell_number.x, file_size = file_size.x) - #files |> head(10) |> pull(file_name) |> - # c("/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0024f909bf540734c021854ee1c758ca.h5ad") |> -#files |> filter(cell_number %in% c(2505, 2105)) |> pull(file_name) |> -c("/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0063a5c025db1f4292c1875035cece1f.h5ad") |> +files |> head(20) |> pull(file_name) |> initialise_hpc( gene_nomenclature = "ensembl", data_container_type = "anndata", - #store = "~/scratch/Census/census_reanalysis/census-run-20-samples/20samples/", - store = "~/scratch/Census/census_reanalysis/census-run-20-samples/20samples/fail_samples/", + store = "~/scratch/Census/census_reanalysis/census-run-20-samples/20samples/", #debug_step = "cell_cycle_tbl_tier_1_e0606bff6b731c54", # problematic sample #debug_step = "cell_cycle_tbl_tier_1_ea6705b8ecef4374", - #tier = files |> head(10) |> pull(tier), - tier = "tier_1", + tier = files |> head(20) |> pull(tier), + #tier = "tier_1", #computing_resources = crew_controller_local(workers = 10) #resource_tuned_slurm computing_resources = list( - + crew_controller_slurm( name = "tier_1", slurm_memory_gigabytes_per_cpu = 15, @@ -183,7 +174,7 @@ c("/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0063a5c0 workers = 50, tasks_max = 5, verbose = T, - slurm_time_minutes = 200 + slurm_time_minutes = 120 ), crew_controller_slurm( name = "tier_2", @@ -192,7 +183,7 @@ c("/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0063a5c0 workers = 50, tasks_max = 5, verbose = T, - slurm_time_minutes = 200 + slurm_time_minutes = 120 )) ) |> @@ -201,8 +192,8 @@ c("/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0063a5c0 # tranform_assay(fx = files |> filter(file_name == "/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0024f909bf540734c021854ee1c758ca.h5ad") |> # pull(transformation_function) |> _[[1]], # target_output = "sce_transformed") |> - tranform_assay(fx = files |> filter(cell_number == 2505)|> - pull(transformation_function) |> _[[1]], + tranform_assay(fx = files |> head(20) |> + pull(transformation_function), target_output = "sce_transformed") |> # Remove empty outliers based on RNA count threshold per cell From 44a910372e1694031241bec46033fa28e9416f3f Mon Sep 17 00:00:00 2001 From: Mengyuan Shen Date: Thu, 15 Aug 2024 10:32:04 +1000 Subject: [PATCH 018/145] update transformation function --- tests/testthat/test-census-samples.R | 29 +++++++++++----------------- 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/tests/testthat/test-census-samples.R b/tests/testthat/test-census-samples.R index 7ed569a4..d1bd5d1a 100644 --- a/tests/testthat/test-census-samples.R +++ b/tests/testthat/test-census-samples.R @@ -106,31 +106,24 @@ df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_i if (mode_value < 0 ) counts <- counts + abs(mode_value) # Scale max counts to 20 to avoid any downstream failure - if ((.x == "exp") && (max(counts) > 20)){ - scale_factor = 20/max(counts) - counts = counts * scale_factor - # Apply the transformation - counts <- transform_method(counts) - - # Avoid majority of genes after transformation are 1, so substract by 1 - majority_gene_counts = names(which.max(table(as.vector(counts)))) |> as.numeric() - - #substract all counts by the majority_gene_counts if majority_gene_counts is not 0. - if (majority_gene_counts != transform_method(scale_factor)) counts <- counts - majority_gene_counts + if ((.x == "exp") && + (max(counts) > 20)) { + scale_factor = 20 / max(counts) + counts <- counts * scale_factor + } + + counts <- transform_method(counts) + majority_gene_counts = names(which.max(table(as.vector(counts)))) |> as.numeric() + if (majority_gene_counts != 0) { + counts <- counts - majority_gene_counts } - # Avoid downstream failures negative counts if((counts[,1:min(10000, ncol(counts))] |> min()) < 0) counts[counts < 0] <- 0 col_sums <- colSums(counts) - # Cap large values - if(max(col_sums) > 1e100) { - temp <- counts[, sample(1:ncol(data), size = 10000, replace = TRUE), drop = TRUE] - q <- quantile(temp[temp > 0], 0.9) - counts[counts > 1e100] <- q - } + # Drop all zero cells data <- data[, col_sums > 0] From 29649e4439629d78b6d18dde2974ce86f675619c Mon Sep 17 00:00:00 2001 From: Mengyuan Shen Date: Thu, 15 Aug 2024 13:58:36 +1000 Subject: [PATCH 019/145] empty_droplet based on custom filter threshold --- R/modules_grammar_hpc.R | 17 ++++++++++------ R/utilities.R | 37 +++++++++++++--------------------- man/empty_droplet_threshold.Rd | 18 +++++++++++------ 3 files changed, 37 insertions(+), 35 deletions(-) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index ce7ba0bf..3b5cbc13 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -155,12 +155,12 @@ initialise_hpc <- function(input_hpc, # Define the generic function #' @export -remove_empty_threshold <- function(input_hpc, RNA_count_threshold = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { +remove_empty_threshold <- function(input_hpc, RNA_count_threshold = NULL, RNA_feature_threshold = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { UseMethod("remove_empty_threshold") } #' @export -remove_empty_threshold.Seurat = function(input_hpc, RNA_count_threshold = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { +remove_empty_threshold.Seurat = function(input_hpc, RNA_count_threshold = NULL, RNA_feature_threshold = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { # Capture all arguments including defaults args_list <- as.list(environment()) @@ -174,7 +174,7 @@ remove_empty_threshold.Seurat = function(input_hpc, RNA_count_threshold = NULL, } #' @export -remove_empty_threshold.HPCell = function(input_hpc, RNA_count_threshold = NULL, target_input = "read_file", target_output = "empty_tbl",...) { +remove_empty_threshold.HPCell = function(input_hpc, RNA_count_threshold = NULL, RNA_feature_threshold = NULL, target_input = "read_file", target_output = "empty_tbl",...) { # Capture all arguments including defaults args_list <- as.list(environment())[-1] @@ -185,13 +185,15 @@ remove_empty_threshold.HPCell = function(input_hpc, RNA_count_threshold = NULL, args_list$factory = function(tiers, target_input, target_output){ list( tar_target_raw("RNA_count_threshold", readRDS("RNA_count_threshold.rds") |> quote(), deployment = "main"), + tar_target_raw("RNA_feature_threshold", readRDS("RNA_feature_threshold.rds") |> quote(), deployment = "main"), factory_split( target_output, i |> read_data_container(container_type = data_container_type) |> - empty_droplet_threshold(RNA_count_threshold, - gene_nomenclature = gene_nomenclature) |> + empty_droplet_threshold(gene_nomenclature = gene_nomenclature, + RNA_count_threshold = RNA_count_threshold, + RNA_feature_threshold = RNA_feature_threshold) |> substitute(env = list(i=as.symbol(target_input))), tiers, other_arguments_to_tier = target_input, @@ -203,6 +205,7 @@ remove_empty_threshold.HPCell = function(input_hpc, RNA_count_threshold = NULL, # We don't want recursive when we call factory if(input_hpc |> length() > 0) { RNA_count_threshold |> saveRDS("RNA_count_threshold.rds") + RNA_feature_threshold |> saveRDS("RNA_feature_threshold.rds") # Delete line with target in case the user execute the command, without calling initialise_hpc target_output |> delete_lines_with_word(glue("{input_hpc$initialisation$store}.R")) @@ -1124,13 +1127,15 @@ evaluate_hpc.HPCell = function(input_hpc) { "temp_debug_step.rds", "sample_names.rds", "RNA_count_threshold.rds", + "RNA_feature_threshold.rds", "total_RNA_count_check.rds", "temp_group_by.rds", "factors_to_regress.rds", "pseudobulk_group_by.rds", "temp_tiers.rds", "temp_gene_nomenclature.rds", - "data_container_type.rds" + "data_container_type.rds", + "temp_fx.rds" ) |> remove_files_safely() diff --git a/R/utilities.R b/R/utilities.R index e389eb3f..98d04af6 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -179,8 +179,6 @@ empty_droplet_id <- function(input_read_RNA_assay, # } significance_threshold = 0.001 - RNA_feature_count_threshold = 200 - RNA_count_threshold = 100 # Genes to exclude if (gene_nomenclature == "symbol") { location <- mapIds( @@ -219,9 +217,6 @@ empty_droplet_id <- function(input_read_RNA_assay, } filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] - # filter based on RNA_count_threshold - filtered_counts <- filtered_counts[rowSums(filtered_counts) > RNA_count_threshold, ] - # Calculate bar-codes ranks barcode_ranks <- barcodeRanks(filtered_counts) @@ -301,15 +296,17 @@ empty_droplet_id <- function(input_read_RNA_assay, #' Identify Empty Droplets in Single-Cell RNA-seq Data #' #' @description -#' `empty_droplet_id` distinguishes between empty and non-empty droplets using the DropletUtils package. -#' It excludes mitochondrial and ribosomal genes, calculates barcode ranks, and optionally filters input data -#' based on these criteria. The function returns a tibble containing log probabilities, FDR, and a classification -#' indicating whether cells are empty droplets. +#' `empty_droplet_threshold` distinguishes between empty and non-empty droplets by threshold. +#' It excludes mitochondrial and ribosomal genes, and filters input data +#' based on defined values of `nCount_RNA` and `nFeature_RNA` +#' The function returns a tibble containing RNA count, RNA feature count indicating whether cells are empty droplets. #' #' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. #' @param filter_empty_droplets Logical value indicating whether to filter the input data. +#' @param RNA_count_threshold An optional integer for the number of RNA count per cell. Default uses 100 +#' @param RNA_feature_threshold An optional integer for the number of feature count. Default uses 200 #' -#' @return A tibble with columns: logProb, FDR, empty_droplet (classification of droplets). +#' @return A tibble with columns: Cell, nFeature_RNA, nCount_RNA, empty_droplet (classification of droplets). #' #' @importFrom AnnotationDbi mapIds #' @importFrom stringr str_subset @@ -324,7 +321,9 @@ empty_droplet_id <- function(input_read_RNA_assay, empty_droplet_threshold<- function(input_read_RNA_assay, total_RNA_count_check = -Inf, assay = NULL, - gene_nomenclature){ + gene_nomenclature, + RNA_count_threshold = 100, + RNA_feature_threshold = 200){ #Fix GChecks FDR = NULL .cell = NULL @@ -338,8 +337,6 @@ empty_droplet_threshold<- function(input_read_RNA_assay, filter_empty_droplets <- "TRUE" significance_threshold = 0.001 - RNA_feature_count_threshold = 200 - RNA_count_threshold = 100 # Genes to exclude if (gene_nomenclature == "symbol") { location <- mapIds( @@ -371,18 +368,12 @@ empty_droplet_threshold<- function(input_read_RNA_assay, } filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] - # filter based on RNA_count_threshold - result <- colSums(filtered_counts) |> enframe(name = ".cell", value = "RNA_count") |> - mutate(empty_droplet = RNA_count < RNA_count_threshold) |> - select(.cell, empty_droplet) + # filter based on nCount_RNA and nFeature_RNA + result <- colSums(filtered_counts > 0 ) |> enframe(name = ".cell", value = "nFeature_RNA") |> + left_join(colSums(filtered_counts) |> enframe(name = ".cell", value = "nCount_RNA"), by = ".cell") |> + mutate(empty_droplet = nFeature_RNA < RNA_feature_threshold | nCount_RNA < RNA_count_threshold) result - # rosums(…) |> enframe(value…, name…) |> mutate(rowSums(filtered_counts) > - # RNA_count_threshold) - # - # #|> select(-row_sum_column_whatever_that_name_is) - - #the result should be a two column tibble, with .cell anf empty_drople columkn names } diff --git a/man/empty_droplet_threshold.Rd b/man/empty_droplet_threshold.Rd index c6eed1de..86976de0 100644 --- a/man/empty_droplet_threshold.Rd +++ b/man/empty_droplet_threshold.Rd @@ -8,20 +8,26 @@ empty_droplet_threshold( input_read_RNA_assay, total_RNA_count_check = -Inf, assay = NULL, - gene_nomenclature + gene_nomenclature, + RNA_count_threshold = 100, + RNA_feature_threshold = 200 ) } \arguments{ \item{input_read_RNA_assay}{SingleCellExperiment or Seurat object containing RNA assay data.} +\item{RNA_count_threshold}{An optional integer for the number of RNA count per cell. Default uses 100} + +\item{RNA_feature_threshold}{An optional integer for the number of feature count. Default uses 200} + \item{filter_empty_droplets}{Logical value indicating whether to filter the input data.} } \value{ -A tibble with columns: logProb, FDR, empty_droplet (classification of droplets). +A tibble with columns: Cell, nFeature_RNA, nCount_RNA, empty_droplet (classification of droplets). } \description{ -\code{empty_droplet_id} distinguishes between empty and non-empty droplets using the DropletUtils package. -It excludes mitochondrial and ribosomal genes, calculates barcode ranks, and optionally filters input data -based on these criteria. The function returns a tibble containing log probabilities, FDR, and a classification -indicating whether cells are empty droplets. +\code{empty_droplet_threshold} distinguishes between empty and non-empty droplets by threshold. +It excludes mitochondrial and ribosomal genes, and filters input data +based on defined values of \code{nCount_RNA} and \code{nFeature_RNA} +The function returns a tibble containing RNA count, RNA feature count indicating whether cells are empty droplets. } From 487359d101368a172e898592ac8b2b7ea686f94c Mon Sep 17 00:00:00 2001 From: Mengyuan Shen Date: Mon, 19 Aug 2024 10:54:09 +1000 Subject: [PATCH 020/145] update azimuth reference --- R/functions.R | 89 +++------------------------------------------------ 1 file changed, 4 insertions(+), 85 deletions(-) diff --git a/R/functions.R b/R/functions.R index 9354a4e0..d1784fc9 100644 --- a/R/functions.R +++ b/R/functions.R @@ -183,13 +183,6 @@ annotation_label_transfer <- function(input_read_RNA_assay, #print("Start Seurat") - # Load reference PBMC - # reference_azimuth <- LoadH5Seurat("data//pbmc_multimodal.h5seurat") - # reference_azimuth |> saveRDS("analysis/annotation_label_transfer/reference_azimuth.rds") - - #reference_azimuth = readRDS(reference_azimuth_path) - - # Reading input input_read_RNA_assay = input_read_RNA_assay |> @@ -197,90 +190,16 @@ annotation_label_transfer <- function(input_read_RNA_assay, left_join(empty_droplets_tbl, by = ".cell") |> filter(!empty_droplet) - - # Subset - RNA_assay = input_read_RNA_assay[rownames(input_read_RNA_assay[[assay]]) %in% rownames(reference_azimuth[["SCT"]]),][[assay]] - #RNA_assay <- input_read_RNA_assay@assays$RNA[["counts"]][rownames(input_read_RNA_assay@assays$RNA[["counts"]])%in% rownames(reference_azimuth[["SCT"]]),] - #ADT_assay = input_read_RNA_assay[["ADT"]][rownames(input_read_RNA_assay[["ADT"]]) %in% rownames(reference_azimuth[["ADT"]]),] - input_read_RNA_assay <- CreateSeuratObject( counts = RNA_assay) - - if("ADT" %in% names(input_read_RNA_assay@assays) ) { - ADT_assay = input_read_RNA_assay[["ADT"]][rownames(input_read_RNA_assay[["ADT"]]) %in% rownames(reference_azimuth[["ADT"]]),] - if("ADT" %in% names(input_read_RNA_assay@assays) ) - input_read_RNA_assay[["ADT"]] = ADT_assay |> CreateAssayObject() - } - - # Normalise RNA - input_read_RNA_assay = - input_read_RNA_assay |> - - # Normalise RNA - not informed by smartly selected variable genes - SCTransform(assay=assay) |> + azimuth_annotation = input_read_RNA_assay |> RunAzimuth(reference = reference_azimuth) |> + SCTransform(assay = assay) |> ScaleData(assay = "SCT") |> - RunPCA(assay = "SCT") - - if("ADT" %in% names(input_read_RNA_assay@assays) ){ - Seurat::VariableFeatures(input_read_RNA_assay, assay="ADT") <- rownames(input_read_RNA_assay[["ADT"]]) - input_read_RNA_assay = - input_read_RNA_assay |> - NormalizeData(normalization.method = 'CLR', margin = 2, assay="ADT") |> - ScaleData(assay="ADT") |> - RunPCA(assay = "ADT", reduction.name = 'apca') - } - - - # input_file = - # input_file |> - # FindMultiModalNeighbors( - # reduction.list = list("pca", "apca"), - # dims.list = list(1:30, 1:18), - # modality.weight.name = "RNA.weight" - # ) |> - # RunUMAP( - # nn.name = "weighted.nn", - # reduction.name = "wnn.umap", - # reduction.key = "wnnUMAP_" - # ) - - # Define common anchors - anchors <- Seurat::FindTransferAnchors( - reference = reference_azimuth, - query = input_read_RNA_assay, - normalization.method = "SCT", - reference.reduction = "spca", - dims = 1:50 - ) - - # Mapping - - azimuth_annotation = - tryCatch( - expr = { - Seurat::MapQuery( - anchorset = anchors, - query = input_read_RNA_assay, - reference = reference_azimuth , - refdata = list( - celltype.l1 = "celltype.l1", - celltype.l2 = "celltype.l2", - predicted_ADT = "ADT" - ), - reference.reduction = "spca", - reduction.model = "wnn.umap", - query.dims = 1:2 - ) - }, - error = function(e){ - print(e) - input_read_RNA_assay |> as_tibble() |> select(.cell) - } - ) |> + RunPCA(assay = "SCT") |> as_tibble() |> select(.cell, any_of(c("predicted.celltype.l1", "predicted.celltype.l2")), contains("refUMAP")) # Save modified_data <- data_annotated |> - left_join(azimuth_annotation, by = dplyr::join_by(.cell) ) + left_join(azimuth_annotation, by = dplyr::join_by(.cell) ) return(modified_data) } From 40f8bab1395b4cb58a6cfaa833007beedb37f591 Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 21 Aug 2024 16:56:34 +1000 Subject: [PATCH 021/145] test pilot data --- NAMESPACE | 2 +- R/CellChat.R | 4 +- R/functions.R | 88 ++++++----- R/modules_grammar_hpc.R | 225 +++++++++++++-------------- R/utilities.R | 40 ++--- man/empty_droplet_threshold.Rd | 15 +- tests/testthat/test-census-samples.R | 183 ++++++---------------- 7 files changed, 237 insertions(+), 320 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 4ce1154b..453aa2d1 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -92,10 +92,10 @@ importFrom(CellChat,createCellChat) importFrom(CellChat,filterCommunication) importFrom(CellChat,identifyOverExpressedGenes) importFrom(CellChat,identifyOverExpressedInteractions) -importFrom(CellChat,projectData) importFrom(CellChat,scPalette) importFrom(CellChat,searchPair) importFrom(CellChat,setIdent) +importFrom(CellChat,smoothData) importFrom(CellChat,subsetCommunication) importFrom(CellChat,subsetDB) importFrom(CellChat,subsetData) diff --git a/R/CellChat.R b/R/CellChat.R index e230ba60..69f47514 100644 --- a/R/CellChat.R +++ b/R/CellChat.R @@ -952,7 +952,7 @@ grab_grob <- function(){ #' @importFrom CellChat subsetData #' @importFrom CellChat identifyOverExpressedGenes #' @importFrom CellChat identifyOverExpressedInteractions -#' @importFrom CellChat projectData +#' @importFrom CellChat smoothData #' @importFrom CellChat filterCommunication #' @importFrom CellChat aggregateNet #' @importFrom rlang quo_name @@ -1009,7 +1009,7 @@ seurat_to_ligand_receptor_count = function(counts, .cell_group, assay, sample_fo subsetData() |> identifyOverExpressedGenes() |> identifyOverExpressedInteractions() |> - projectData(CellChat::PPI.human) + smoothData(adj = CellChat::PPI.human) if(nrow(x@LR$LRsig)==0) return(NA) diff --git a/R/functions.R b/R/functions.R index f382f51a..0b5f23f1 100644 --- a/R/functions.R +++ b/R/functions.R @@ -55,21 +55,23 @@ annotation_label_transfer <- function(input_read_RNA_assay, # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) + if (!is.null(empty_droplets_tbl)) { + filtered_counts = + input_read_RNA_assay |> + left_join(empty_droplets_tbl, by=".cell") |> + dplyr::filter(!empty_droplet) + } else if (is.null(empty_droplets_tbl)) {return(NULL)} + # SingleR if (inherits(input_read_RNA_assay, "Seurat")) { sce = - input_read_RNA_assay |> - # Filter empty - left_join(empty_droplets_tbl, by = ".cell") |> - dplyr::filter(!empty_droplet) |> + filtered_counts |> as.SingleCellExperiment() |> logNormCounts(assay.type = assay) } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")){ sce = - input_read_RNA_assay |> # Filter empty - left_join(empty_droplets_tbl, by = ".cell") |> - dplyr::filter(!empty_droplet) |> + filtered_counts|> logNormCounts(assay.type = assay) } @@ -79,12 +81,10 @@ annotation_label_transfer <- function(input_read_RNA_assay, colnames(sce)[2]= "dummy___" } - if (gene_nomenclature == "ensembl") { - blueprint <- celldex::BlueprintEncodeData(ensembl = TRUE, legacy = TRUE) - } else if (gene_nomenclature == "symbol") { - blueprint <- celldex::BlueprintEncodeData(legacy = TRUE) - - } + blueprint <- celldex::BlueprintEncodeData( + ensembl = gene_nomenclature == "ensembl", + legacy = TRUE + ) data_annotated = @@ -115,13 +115,11 @@ annotation_label_transfer <- function(input_read_RNA_assay, rm(blueprint) gc() - - if (gene_nomenclature == "ensembl") { - MonacoImmuneData = celldex::MonacoImmuneData(ensembl = TRUE, legacy = TRUE) - } else if (gene_nomenclature == "symbol") { - MonacoImmuneData = celldex::MonacoImmuneData(legacy = TRUE) - } + MonacoImmuneData <- celldex::MonacoImmuneData( + ensembl = gene_nomenclature == "ensembl", + legacy = TRUE + ) data_annotated = data_annotated |> @@ -355,10 +353,12 @@ alive_identification <- function(input_read_RNA_assay, # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) + if (!is.null(empty_droplets_tbl)) { input_read_RNA_assay = input_read_RNA_assay |> left_join(empty_droplets_tbl, by=".cell") |> dplyr::filter(!empty_droplet) + } else if (is.null(empty_droplets_tbl)) {return(NULL)} # Calculate nFeature_RNA and nCount_RNA if not exist in the data nFeature_name <- paste0("nFeature_", assay) @@ -583,6 +583,8 @@ doublet_identification <- function(input_read_RNA_assay, Seurat::as.SingleCellExperiment() } + if (!is.null(empty_droplets_tbl)) { + filter_empty_droplets <- input_read_RNA_assay |> # Filtering empty left_join(empty_droplets_tbl |> select(.cell, empty_droplet), by = ".cell") |> @@ -590,7 +592,8 @@ doublet_identification <- function(input_read_RNA_assay, # Filter dead left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> - filter(alive) + filter(alive) + } else if (is.null(empty_droplets_tbl)) {return(NULL)} # Condition as scDblFinder only accept assay "counts" if (!"counts" %in% (SummarizedExperiment::assays(filter_empty_droplets) |> names())){ @@ -675,28 +678,26 @@ cell_cycle_scoring <- function(input_read_RNA_assay, g2m.features_tidy = Seurat::cc.genes$g2m.genes } + # avoid small number of cells + if (!is.null(empty_droplets_tbl)) { + filtered_counts <- input_read_RNA_assay |> + left_join(empty_droplets_tbl, by = ".cell") |> + dplyr::filter(!empty_droplet) + } else if (is.null(empty_droplets_tbl)) {return(NULL)} - counts <- - input_read_RNA_assay |> - left_join(empty_droplets_tbl, by = ".cell") |> - dplyr::filter(!empty_droplet) |> - + counts <- filtered_counts |> # Normalise needed NormalizeData() |> - # Assign cell cycle scores of each cell + # Assign cell cycle scores of each cell # Based on its expression of G2/M and S phase markers #Stores S and G2/M scores in object meta data along with predicted classification of each cell in either G2M, S or G1 phase - CellCycleScoring( - s.features = s.features_tidy, - g2m.features = g2m.features_tidy, - set.ident = FALSE - # need to find a bin-free method. Relevant issue: https://github.com/satijalab/seurat/issues/7694 - # nbin = 1 - ) |> + CellCycleScoring(s.features = s.features_tidy, + g2m.features = g2m.features_tidy, + set.ident = FALSE) |> as_tibble() |> - select(.cell, S.Score, G2M.Score, Phase) + select(.cell, S.Score, G2M.Score, Phase) counts @@ -755,11 +756,15 @@ non_batch_variation_removal <- function(input_read_RNA_assay, new.assay.name = assay) } + # avoid small number of cells + if (!is.null(empty_droplets_tbl)) { + filtered_counts <- input_read_RNA_assay_transform |> + left_join(empty_droplets_tbl, by = ".cell") |> + dplyr::filter(!empty_droplet) + } else if (is.null(empty_droplets_tbl)) {return(NULL)} + counts = - input_read_RNA_assay_transform |> - left_join(empty_droplets_tbl, by = ".cell") |> - filter(!empty_droplet) |> - + filtered_counts |> left_join( alive_identification_tbl |> select(.cell, any_of(factors_to_regress)), @@ -879,11 +884,14 @@ preprocessing_output <- function(input_read_RNA_assay, scDblFinder.class <- NULL predicted.celltype.l2 <- NULL - if(empty_droplets_tbl |> is.null() |> not()) + if (empty_droplets_tbl |> is.null() |> not()) { input_read_RNA_assay = input_read_RNA_assay |> left_join(empty_droplets_tbl, by = ".cell") |> - filter(!empty_droplet) + filter(!empty_droplet) + } else if (empty_droplets_tbl |> is.null()) { + return(NULL) + } # Add normalisation if(!is.null(non_batch_variation_removal_S)){ diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index ce7ba0bf..f7c6033a 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -94,7 +94,7 @@ initialise_hpc <- function(input_hpc, garbage_collection = TRUE, storage = "worker", retrieval = "worker", - #error = "continue", + # error = "continue", format = "qs", debug = d, # Set the target you want to debug. # cue = tar_cue(mode = "never") # Force skip non-debugging outdated targets. @@ -152,197 +152,193 @@ initialise_hpc <- function(input_hpc, add_class("HPCell") } - # Define the generic function #' @export -remove_empty_threshold <- function(input_hpc, RNA_count_threshold = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { - UseMethod("remove_empty_threshold") +remove_empty_DropletUtils <- function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { + UseMethod("remove_empty_DropletUtils") } #' @export -remove_empty_threshold.Seurat = function(input_hpc, RNA_count_threshold = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { +remove_empty_DropletUtils.Seurat = function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { # Capture all arguments including defaults args_list <- as.list(environment()) - + # Optionally, you can evaluate the arguments if they are expressions args_list <- lapply(args_list, eval, envir = parent.frame()) - + list(initialisation = list(input_hpc = input_hpc)) |> add_class("HPCell") |> - remove_empty_threshold() - + remove_empty_DropletUtils() + } #' @export -remove_empty_threshold.HPCell = function(input_hpc, RNA_count_threshold = NULL, target_input = "read_file", target_output = "empty_tbl",...) { - +remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl",...) { + # Capture all arguments including defaults args_list <- as.list(environment())[-1] - + # Optionally, you can evaluate the arguments if they are expressions args_list <- lapply(args_list, eval, envir = parent.frame()) - + args_list$factory = function(tiers, target_input, target_output){ list( - tar_target_raw("RNA_count_threshold", readRDS("RNA_count_threshold.rds") |> quote(), deployment = "main"), - + tar_target_raw("total_RNA_count_check", readRDS("total_RNA_count_check.rds") |> quote(), deployment = "main"), + factory_split( - target_output, - i |> - read_data_container(container_type = data_container_type) |> - empty_droplet_threshold(RNA_count_threshold, - gene_nomenclature = gene_nomenclature) |> - substitute(env = list(i=as.symbol(target_input))), - tiers, + target_output, + i |> + read_data_container(container_type = data_container_type) |> + empty_droplet_id(total_RNA_count_check, + gene_nomenclature = gene_nomenclature) |> + substitute(env = list(i=as.symbol(target_input))), + #quote() + tiers, other_arguments_to_tier = target_input, other_arguments_to_map = target_input - ) + ) + # factory_collapse( + # "my_report", + # do.call(bind_rows, target_output) |> quote(), + # # "empty_droplets_tbl", + # #bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), + # target_output, + # tiers, packages = c("dplyr") + # ) ) + } - + # We don't want recursive when we call factory if(input_hpc |> length() > 0) { - RNA_count_threshold |> saveRDS("RNA_count_threshold.rds") - + total_RNA_count_check |> saveRDS("total_RNA_count_check.rds") + # Delete line with target in case the user execute the command, without calling initialise_hpc target_output |> delete_lines_with_word(glue("{input_hpc$initialisation$store}.R")) - + tar_tier_append( - fx = quote(dummy_hpc |> remove_empty_threshold() %$% remove_empty_threshold %$% factory), + fx = quote(dummy_hpc |> remove_empty_DropletUtils() %$% remove_empty_DropletUtils %$% factory), tiers = input_hpc$initialisation$tier |> get_positions() , target_input = target_input, target_output = target_output, script = glue("{input_hpc$initialisation$store}.R") ) - + } - - + + # Add pipeline step input_hpc |> - c(list(remove_empty_threshold = args_list)) |> + c(list(remove_empty_DropletUtils = args_list)) |> add_class("HPCell") - - + + } -target_chunk_undefined_remove_empty_threshold = function(input_hpc){ +target_chunk_undefined_remove_empty_DropletUtils = function(input_hpc){ append_chunk_tiers( { tar_target( empty_tbl_TIER_PLACEHOLDER, - read_file_list |> + read_file_list |> read_data_container(container_type = data_container_type) |> as_tibble() |> select(.cell) |> mutate(empty_droplet = FALSE), pattern = slice(read_file_list, index = SLICE_PLACEHOLDER ), - iteration = "list", + iteration = "list", resources = RESOURCE_PLACEHOLDER, packages = c("dplyr", "tidySingleCellExperiment", "tidyseurat") - ) }, + ) }, tiers = input_hpc$initialisation$tier, script = glue("{input_hpc$initialisation$store}.R") ) } - # Define the generic function #' @export -remove_empty_DropletUtils <- function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { - UseMethod("remove_empty_DropletUtils") +remove_empty_threshold <- function(input_hpc, RNA_feature_threshold = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { + UseMethod("remove_empty_threshold") } #' @export -remove_empty_DropletUtils.Seurat = function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { +remove_empty_threshold.Seurat = function(input_hpc, RNA_feature_threshold = NULL, target_input = "read_file", target_output = "empty_tbl", ...) { # Capture all arguments including defaults args_list <- as.list(environment()) - + # Optionally, you can evaluate the arguments if they are expressions args_list <- lapply(args_list, eval, envir = parent.frame()) - + list(initialisation = list(input_hpc = input_hpc)) |> add_class("HPCell") |> - remove_empty_DropletUtils() - + remove_empty_threshold() + } #' @export -remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = NULL, target_input = "read_file", target_output = "empty_tbl",...) { - +remove_empty_threshold.HPCell = function(input_hpc, RNA_feature_threshold = NULL, target_input = "read_file", target_output = "empty_tbl",...) { + # Capture all arguments including defaults args_list <- as.list(environment())[-1] - + # Optionally, you can evaluate the arguments if they are expressions args_list <- lapply(args_list, eval, envir = parent.frame()) - + args_list$factory = function(tiers, target_input, target_output){ list( - tar_target_raw("total_RNA_count_check", readRDS("total_RNA_count_check.rds") |> quote(), deployment = "main"), - + tar_target_raw("RNA_feature_threshold", readRDS("RNA_feature_threshold.rds") |> quote(), deployment = "main"), factory_split( - target_output, - i |> - read_data_container(container_type = data_container_type) |> - empty_droplet_id(total_RNA_count_check, - gene_nomenclature = gene_nomenclature) |> - substitute(env = list(i=as.symbol(target_input))), - #quote() - tiers, + target_output, + i |> + read_data_container(container_type = data_container_type) |> + empty_droplet_threshold(gene_nomenclature = gene_nomenclature, + RNA_feature_threshold = RNA_feature_threshold) |> + substitute(env = list(i=as.symbol(target_input))), + tiers, other_arguments_to_tier = target_input, other_arguments_to_map = target_input - ) - # factory_collapse( - # "my_report", - # do.call(bind_rows, target_output) |> quote(), - # # "empty_droplets_tbl", - # #bind_rows(o) |> substitute(env = list(o = as.symbol(target_output))), - # target_output, - # tiers, packages = c("dplyr") - # ) + ) ) - } - + # We don't want recursive when we call factory if(input_hpc |> length() > 0) { - total_RNA_count_check |> saveRDS("total_RNA_count_check.rds") - + RNA_feature_threshold |> saveRDS("RNA_feature_threshold.rds") + # Delete line with target in case the user execute the command, without calling initialise_hpc target_output |> delete_lines_with_word(glue("{input_hpc$initialisation$store}.R")) - + tar_tier_append( - fx = quote(dummy_hpc |> remove_empty_DropletUtils() %$% remove_empty_DropletUtils %$% factory), + fx = quote(dummy_hpc |> remove_empty_threshold() %$% remove_empty_threshold %$% factory), tiers = input_hpc$initialisation$tier |> get_positions() , target_input = target_input, target_output = target_output, script = glue("{input_hpc$initialisation$store}.R") ) - + } - - + + # Add pipeline step input_hpc |> - c(list(remove_empty_DropletUtils = args_list)) |> + c(list(remove_empty_threshold = args_list)) |> add_class("HPCell") - - + + } -target_chunk_undefined_remove_empty_DropletUtils = function(input_hpc){ +target_chunk_undefined_remove_empty_threshold = function(input_hpc){ append_chunk_tiers( { tar_target( empty_tbl_TIER_PLACEHOLDER, - read_file_list |> + read_file_list |> read_data_container(container_type = data_container_type) |> as_tibble() |> select(.cell) |> mutate(empty_droplet = FALSE), pattern = slice(read_file_list, index = SLICE_PLACEHOLDER ), - iteration = "list", + iteration = "list", resources = RESOURCE_PLACEHOLDER, packages = c("dplyr", "tidySingleCellExperiment", "tidyseurat") - ) }, + ) }, tiers = input_hpc$initialisation$tier, script = glue("{input_hpc$initialisation$store}.R") ) } - # Define the generic function #' @export remove_dead_scuttle <- function(input_hpc, group_by = NULL, target_input = "read_file", target_output = "alive_tbl") { @@ -965,73 +961,73 @@ get_single_cell.HPCell = function(input_hpc, factors_to_regress = NULL, target_i # setMethod( # "test_differential_abundance", # signature(.data = "HPCell"), -# function(.data, .formula, .sample = NULL, .transcript = NULL, -# .abundance = NULL, contrasts = NULL, method = "edgeR_quasi_likelihood", -# test_above_log2_fold_change = NULL, scaling_method = "TMM", +# function(.data, .formula, .sample = NULL, .transcript = NULL, +# .abundance = NULL, contrasts = NULL, method = "edgeR_quasi_likelihood", +# test_above_log2_fold_change = NULL, scaling_method = "TMM", # omit_contrast_in_colnames = FALSE, prefix = "", action = "add", factor_of_interest = NULL, # target_input = "create_pseudobulk_sample", target_output = "de", -# ..., significance_threshold = NULL, fill_missing_values = NULL, +# ..., significance_threshold = NULL, fill_missing_values = NULL, # .contrasts = NULL) { -# +# # # Capture all arguments including defaults # args_list <- as.list(environment())[-1] -# +# # # Optionally, you can evaluate the arguments if they are expressions # args_list <- lapply(args_list, eval, envir = parent.frame()) -# +# # args_list$factory = function(tiers, .formula, factor_of_interest = NULL, .abundance = NULL, target_input, target_output){ -# +# # if(.formula |> deparse() |> str_detect("\\|")) # factory_de_random_effect( -# se_list_input = target_input, -# output_se = target_output, +# se_list_input = target_input, +# output_se = target_output, # formula=.formula, -# #method="edger_robust_likelihood_ratio", +# #method="edger_robust_likelihood_ratio", # tiers = tiers, # factor_of_interest = factor_of_interest, # .abundance = .abundance # ) -# +# # else # factory_de_fix_effect( -# se_list_input = target_input, -# output_se = target_output, +# se_list_input = target_input, +# output_se = target_output, # formula=.formula, -# method="edger_robust_likelihood_ratio", +# method="edger_robust_likelihood_ratio", # tiers = tiers, # factor_of_interest = factor_of_interest, # .abundance = .abundance # ) -# +# # } -# +# # # We don't want recursive when we call factory # if(.data |> length() > 0) { -# +# # environment(.formula) <- new.env(parent = emptyenv()) -# +# # # Delete line with target in case the user execute the command, without calling initialise_hpc # target_output |> delete_lines_with_word(glue("{.data$initialisation$store}.R")) -# -# +# +# # tar_tier_append( # quote(dummy_hpc |> test_differential_abundance() %$% test_differential_abundance %$% factory), # tiers = .data$initialisation$tier |> get_positions() , # script = glue("{.data$initialisation$store}.R"), -# .formula = .formula, +# .formula = .formula, # factor_of_interest = factor_of_interest, # .abundance = .abundance, # target_input = target_input, # target_output = target_output # ) -# +# # } -# -# +# +# # .data |> # c(list(test_differential_abundance = args_list)) |> # add_class("HPCell") -# +# # } # ) @@ -1123,14 +1119,15 @@ evaluate_hpc.HPCell = function(input_hpc) { "temp_computing_resources.rds", "temp_debug_step.rds", "sample_names.rds", - "RNA_count_threshold.rds", + "RNA_feature_threshold.rds", "total_RNA_count_check.rds", "temp_group_by.rds", "factors_to_regress.rds", "pseudobulk_group_by.rds", "temp_tiers.rds", "temp_gene_nomenclature.rds", - "data_container_type.rds" + "data_container_type.rds", + "temp_fx.rds" ) |> remove_files_safely() diff --git a/R/utilities.R b/R/utilities.R index e389eb3f..14eea48d 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -179,8 +179,6 @@ empty_droplet_id <- function(input_read_RNA_assay, # } significance_threshold = 0.001 - RNA_feature_count_threshold = 200 - RNA_count_threshold = 100 # Genes to exclude if (gene_nomenclature == "symbol") { location <- mapIds( @@ -219,9 +217,6 @@ empty_droplet_id <- function(input_read_RNA_assay, } filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] - # filter based on RNA_count_threshold - filtered_counts <- filtered_counts[rowSums(filtered_counts) > RNA_count_threshold, ] - # Calculate bar-codes ranks barcode_ranks <- barcodeRanks(filtered_counts) @@ -301,15 +296,16 @@ empty_droplet_id <- function(input_read_RNA_assay, #' Identify Empty Droplets in Single-Cell RNA-seq Data #' #' @description -#' `empty_droplet_id` distinguishes between empty and non-empty droplets using the DropletUtils package. -#' It excludes mitochondrial and ribosomal genes, calculates barcode ranks, and optionally filters input data -#' based on these criteria. The function returns a tibble containing log probabilities, FDR, and a classification -#' indicating whether cells are empty droplets. +#' `empty_droplet_threshold` distinguishes between empty and non-empty droplets by threshold. +#' It excludes mitochondrial and ribosomal genes, and filters input data +#' based on defined values of `nCount_RNA` and `nFeature_RNA` +#' The function returns a tibble containing RNA count, RNA feature count indicating whether cells are empty droplets. #' #' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. #' @param filter_empty_droplets Logical value indicating whether to filter the input data. +#' @param RNA_feature_threshold An optional integer for the number of feature count. Default is 200 #' -#' @return A tibble with columns: logProb, FDR, empty_droplet (classification of droplets). +#' @return A tibble with columns: Cell, nFeature_RNA, empty_droplet (classification of droplets). #' #' @importFrom AnnotationDbi mapIds #' @importFrom stringr str_subset @@ -324,7 +320,8 @@ empty_droplet_id <- function(input_read_RNA_assay, empty_droplet_threshold<- function(input_read_RNA_assay, total_RNA_count_check = -Inf, assay = NULL, - gene_nomenclature){ + gene_nomenclature, + RNA_feature_threshold = 200){ #Fix GChecks FDR = NULL .cell = NULL @@ -338,8 +335,6 @@ empty_droplet_threshold<- function(input_read_RNA_assay, filter_empty_droplets <- "TRUE" significance_threshold = 0.001 - RNA_feature_count_threshold = 200 - RNA_count_threshold = 100 # Genes to exclude if (gene_nomenclature == "symbol") { location <- mapIds( @@ -371,18 +366,17 @@ empty_droplet_threshold<- function(input_read_RNA_assay, } filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] - # filter based on RNA_count_threshold - result <- colSums(filtered_counts) |> enframe(name = ".cell", value = "RNA_count") |> - mutate(empty_droplet = RNA_count < RNA_count_threshold) |> - select(.cell, empty_droplet) + # filter based on nCount_RNA and nFeature_RNA + result <- colSums(filtered_counts > 0 ) |> enframe(name = ".cell", value = "nFeature_RNA") |> + #left_join(colSums(filtered_counts) |> enframe(name = ".cell", value = "nCount_RNA"), by = ".cell") |> + mutate(empty_droplet = nFeature_RNA < RNA_feature_threshold) - result - # rosums(…) |> enframe(value…, name…) |> mutate(rowSums(filtered_counts) > - # RNA_count_threshold) - # - # #|> select(-row_sum_column_whatever_that_name_is) + # Discard samples with nFeature_RNA density mode < threshold, avoid potential downstream error + density_est = result |> pull(nFeature_RNA) |> density() + density_value = density_est$x[which.max(density_est$y)] + if (density_value < RNA_feature_threshold) return(NULL) - #the result should be a two column tibble, with .cell anf empty_drople columkn names + result } diff --git a/man/empty_droplet_threshold.Rd b/man/empty_droplet_threshold.Rd index c6eed1de..63582e74 100644 --- a/man/empty_droplet_threshold.Rd +++ b/man/empty_droplet_threshold.Rd @@ -8,20 +8,23 @@ empty_droplet_threshold( input_read_RNA_assay, total_RNA_count_check = -Inf, assay = NULL, - gene_nomenclature + gene_nomenclature, + RNA_feature_threshold = 200 ) } \arguments{ \item{input_read_RNA_assay}{SingleCellExperiment or Seurat object containing RNA assay data.} +\item{RNA_feature_threshold}{An optional integer for the number of feature count. Default is 200} + \item{filter_empty_droplets}{Logical value indicating whether to filter the input data.} } \value{ -A tibble with columns: logProb, FDR, empty_droplet (classification of droplets). +A tibble with columns: Cell, nFeature_RNA, empty_droplet (classification of droplets). } \description{ -\code{empty_droplet_id} distinguishes between empty and non-empty droplets using the DropletUtils package. -It excludes mitochondrial and ribosomal genes, calculates barcode ranks, and optionally filters input data -based on these criteria. The function returns a tibble containing log probabilities, FDR, and a classification -indicating whether cells are empty droplets. +\code{empty_droplet_threshold} distinguishes between empty and non-empty droplets by threshold. +It excludes mitochondrial and ribosomal genes, and filters input data +based on defined values of \code{nCount_RNA} and \code{nFeature_RNA} +The function returns a tibble containing RNA count, RNA feature count indicating whether cells are empty droplets. } diff --git a/tests/testthat/test-census-samples.R b/tests/testthat/test-census-samples.R index 7ed569a4..3a978a58 100644 --- a/tests/testthat/test-census-samples.R +++ b/tests/testthat/test-census-samples.R @@ -15,16 +15,18 @@ library(plotly) library(targets) library(stringr) directory = "~/cellxgene_curated/census_samples/anndata" -store = "~/scratch/Census/census_reanalysis/census-run-20-samples" -files <- dir(glue("{directory}"), full.names = T) |> head(20) +store = "~/scratch/Census/census_reanalysis/census-run-samples" +files <- dir(glue("{directory}"), full.names = T) |> head(50) # results <- purrr::map_dfr(files, function(file_path) { # data <- zellkonverter::readH5AD(file_path, use_hdf5 = TRUE, reader = "R", verbose = TRUE) -# +# # cell_number <- length(colnames(data)) -# -# +# +# # file_size <- file.info(file_path)$size / 1073741824 # +# # nFeature_threshold +# # tibble(file_name = file_path, # cell_number = cell_number, # file_size = file_size) @@ -36,7 +38,9 @@ results <- readRDS(glue("{store}/sample_tiers.rds")) tiers_dataframe <- results |> mutate(file_name = file_name, file_size = round(file_size, 3), - tier = ifelse(cell_number > 6000, "tier_2", "tier_1"), + tier = case_when(cell_number < 6000 ~ "tier_1", + cell_number > 6000 & cell_number < 10000 ~ "tier_2", + cell_number > 10000 & cell_number < 20000 ~ "tier_3"), set_names = basename(file_name) |> stringr::str_remove("\\.h5ad$")) result_directory = "/vast/projects/cellxgene_curated/metadata_cellxgenedp_Apr_2024" @@ -45,32 +49,7 @@ sample_meta <- tar_read(metadata_dataset_id_common_sample_columns, store = glue( samples = samples |> left_join(get_metadata() |> select(dataset_id, contains("norm")) |> distinct() |> filter(!is.na(x_normalization)) |> as_tibble(), by = "dataset_id") -# df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_id, sample_2, x_normalization, x_approximate_distribution) |> -# mutate(current_normalisation_method = case_when(str_like(x_normalization, "C%") ~ "log", -# x_normalization == "none" ~ "log", -# x_normalization == "normalized" ~ "log", -# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "log", -# is.na(x_normalization) & x_approximate_distribution == "NORMAL" ~ "NORMAL", -# is.na(x_normalization) & x_approximate_distribution == "COUNT" ~ "COUNT", -# str_like(x_normalization, "%canpy%") ~ "log1p", -# -# TRUE ~ x_normalization)) |> -# mutate(method_to_apply = case_when(current_normalisation_method %in% c("log","LogNormalization","LogNormalize","log-normalization") ~ "exp(counts)", -# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "exp(counts)", -# str_like(current_normalisation_method, "Counts%") ~ "exp(counts)", -# str_like(current_normalisation_method, "%log2%") ~ "2^counts", -# current_normalisation_method %in% c("log1p", "log1p, base e", "Scanpy", -# "scanpy.api.pp.normalize_per_cell method, scaling factor 10000") ~ "expm1(counts)", -# current_normalisation_method == "log1p, base 2" ~ "2^counts - 1", -# current_normalisation_method == "NORMAL" ~ "exp(counts)", -# current_normalisation_method == "COUNT" ~ "no method applied" -# ) -# ) |> -# mutate(comment = case_when(str_like(x_normalization, "Counts%") ~ "a checkpoint for max value of Assay must <= 50", -# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "round negative value to 0", -# x_normalization == "normalized" ~ "round negative value to 0" -# -# )) + df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_id, sample_2, x_normalization, x_approximate_distribution) |> mutate(transform_method = case_when(str_like(x_normalization, "C%") ~ "log", @@ -98,7 +77,7 @@ df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_i )) |> mutate(transformation_function = map( method_to_apply, - ~ (function(data) { + ~ ( function(data) { assay_name <- data@assays |> names() |> magrittr::extract2(1) counts <- assay(data, assay_name) density_est <- density(counts |> HPCell:::get_count_per_gene_df() |> pull(counts) ) @@ -106,31 +85,29 @@ df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_i if (mode_value < 0 ) counts <- counts + abs(mode_value) # Scale max counts to 20 to avoid any downstream failure - if ((.x == "exp") && (max(counts) > 20)){ - scale_factor = 20/max(counts) - counts = counts * scale_factor - # Apply the transformation - counts <- transform_method(counts) - - # Avoid majority of genes after transformation are 1, so substract by 1 - majority_gene_counts = names(which.max(table(as.vector(counts)))) |> as.numeric() - - #substract all counts by the majority_gene_counts if majority_gene_counts is not 0. - if (majority_gene_counts != transform_method(scale_factor)) counts <- counts - majority_gene_counts + if ((.x == "exp") && (max(counts) > 20)) { + scale_factor = 20 / max(counts) + counts <- counts * scale_factor} + + counts <- transform_method(counts) + # round counts to avoid potential substraction error due to different digits print out + counts <- counts |> round(5) + majority_gene_counts = names(which.max(table(as.vector(counts)))) |> as.numeric() + if (majority_gene_counts != 0) { + counts <- counts - majority_gene_counts } - # Avoid downstream failures negative counts if((counts[,1:min(10000, ncol(counts))] |> min()) < 0) counts[counts < 0] <- 0 col_sums <- colSums(counts) - # Cap large values - if(max(col_sums) > 1e100) { - temp <- counts[, sample(1:ncol(data), size = 10000, replace = TRUE), drop = TRUE] - q <- quantile(temp[temp > 0], 0.9) - counts[counts > 1e100] <- q - } + # # Cap large values + # if(max(col_sums) > 1e100) { + # temp <- counts[, sample(1:ncol(data), size = 10000, replace = TRUE), drop = TRUE] + # q <- quantile(temp[temp > 0], 0.9) + # counts[counts > 1e100] <- q + # } # Drop all zero cells data <- data[, col_sums > 0] @@ -155,15 +132,16 @@ files <- results |> mutate(sample_2 = basename(file_name) |> tools::file_path_sa select(-file_name.y, -cell_number.y, -file_size.y) |> rename(file_name = file_name.x, cell_number = cell_number.x, file_size = file_size.x) -files |> head(20) |> pull(file_name) |> +files |> slice(21:50) |> pull(file_name) |> +#files |> filter(cell_number == 306) |> pull(file_name) |> initialise_hpc( gene_nomenclature = "ensembl", data_container_type = "anndata", - store = "~/scratch/Census/census_reanalysis/census-run-20-samples/20samples/", - #debug_step = "cell_cycle_tbl_tier_1_e0606bff6b731c54", # problematic sample - #debug_step = "cell_cycle_tbl_tier_1_ea6705b8ecef4374", - tier = files |> head(20) |> pull(tier), - #tier = "tier_1", + store = "~/scratch/Census/census_reanalysis/census-run-samples/50samples_null_empty_tbl_method/", + #store = "~/scratch/Census/census_reanalysis/census-run-samples/fail_sample/", + #debug_step = "cell_cycle_tbl_tier_1_907f2d141bc50b9e", + #tier = files |> filter(cell_number == 306)|> pull(tier), + tier = files |> slice(21:50) |> pull(tier), #computing_resources = crew_controller_local(workers = 10) #resource_tuned_slurm computing_resources = list( @@ -173,8 +151,7 @@ files |> head(20) |> pull(file_name) |> slurm_cpus_per_task = 1, workers = 50, tasks_max = 5, - verbose = T, - slurm_time_minutes = 120 + verbose = T ), crew_controller_slurm( name = "tier_2", @@ -182,25 +159,28 @@ files |> head(20) |> pull(file_name) |> slurm_cpus_per_task = 1, workers = 50, tasks_max = 5, - verbose = T, - slurm_time_minutes = 120 + verbose = T + ), + crew_controller_slurm( + name = "tier_3", + slurm_memory_gigabytes_per_cpu = 45, + slurm_cpus_per_task = 1, + workers = 50, + tasks_max = 5, + verbose = T )) ) |> - # this does not tested whether identity being successfully assigned or unassigned, because identity remains the original function #tranform_assay(fx = purrr::map(1:20, ~identity), target_output = "sce_transformed") |> - # tranform_assay(fx = files |> filter(file_name == "/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0024f909bf540734c021854ee1c758ca.h5ad") |> - # pull(transformation_function) |> _[[1]], - # target_output = "sce_transformed") |> - tranform_assay(fx = files |> head(20) |> + tranform_assay(fx = files |> slice(21:50) |> pull(transformation_function), target_output = "sce_transformed") |> # Remove empty outliers based on RNA count threshold per cell - remove_empty_threshold(target_input = "sce_transformed", RNA_count_threshold = 100 ) |> + remove_empty_threshold(target_input = "sce_transformed", RNA_feature_threshold = 200 ) |> # Remove empty outliers - # remove_empty_DropletUtils(target_input = "sce_transformed") |> + #remove_empty_DropletUtils(target_input = "sce_transformed") |> # Remove dead cells remove_dead_scuttle(target_input = "sce_transformed") |> @@ -220,7 +200,7 @@ files |> head(20) |> pull(file_name) |> "G2M.Score" ), target_input = "sce_transformed") - # calculate_pseudobulk(group_by = "monaco_first.labels.fine", target_input = "sce_transformed") |> + # calculate_pseudobulk(group_by = "monaco_first.labels.fine", target_input = "sce_transformed") |> # # # test_differential_abundance(~ age_days + (1|collection_id), .abundance="counts") |> # # #test_differential_abundance(~ age_days, .abundance="counts") @@ -228,70 +208,5 @@ files |> head(20) |> pull(file_name) |> # # # For the moment only available for single cell # get_single_cell(target_input = "sce_transformed") - -# # Test substitute eval function -# .x = "exp" -# fx <- (function(x){ bla(x) }) |> substitute( env = list(bla = as.name(.x))) |> eval() -# fx(2) -# -# -# get_count_per_gene_df <- function(counts) { -# counts_tidy <- counts |> as.data.frame() |> tibble::rownames_to_column(var = "features") |> -# as_tibble() |> pivot_longer(!features, names_to = "cells", -# values_to = "counts") -# counts_tidy -# } -# -# .x = "exp" -# my_function <- (function(data) { -# assay_name <- data@assays |> names() |> magrittr::extract2(1) -# counts <- assay(data, assay_name) -# density_est <- density(counts |> get_count_per_gene_df() |> pull(counts) ) -# mode_value <- density_est$x[which.max(density_est$y)] -# if (mode_value < 0 ) counts <- counts + abs(mode_value) -# # Apply the transformation -# counts <- transform_method(counts) -# -# # Avoid downstream failures -# if((counts[,1:min(10000, ncol(counts))] |> min()) < 0) -# counts[counts < 0] <- 0 -# -# # Avoid majority of genes after transformation are 1, so substract by 1 -# counts = names(which.max(table(as.vector(counts)))) -# -# if (counts == "1") counts <- counts - 1 -# col_sums <- colSums(counts) -# # Cap large values -# if(max(col_sums) > 1e100) { -# temp <- counts[, sample(1:ncol(data), size = 10000, replace = TRUE), drop = TRUE] -# q <- quantile(temp[temp > 0], 0.9) -# counts[counts > 1e100] <- q -# } -# # Drop all zero cells -# data <- data[, col_sums > 0] -# -# # Avoid downstream binding error -# rowData(data) = NULL -# -# # Assign counts back to data -# assay(data, assay_name) <- counts -# -# data -# -# }) |> -# # Meta programming, replacing the transformation programmatically -# substitute( env = list(transform_method = as.name(.x))) |> -# # Evaluate back to a working function -# eval() -# -# original_data = readH5AD("/home/users/allstaff/shen.m/cellxgene_curated/census_samples/anndata/0024f909bf540734c021854ee1c758ca.h5ad", reader = "R", use_hdf5 = TRUE) -# original_data |> assay("X") |> as.numeric() |> summary() -# transform_data <- my_function(original_data) -# transform_data |> assay("X") |> as.numeric() |> summary() -# -# -# transform_data |> assay("X") |> get_count_per_gene_df() |> ggplot(aes(counts)) +geom_density() -# - From 12a2147d923df9cdca7208d81c5abaa7323d1d7b Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 22 Aug 2024 17:08:19 +1000 Subject: [PATCH 022/145] update azimuth reference --- DESCRIPTION | 6 +++- NAMESPACE | 2 ++ R/functions.R | 44 +++++++++++++++++++++------- R/modules_grammar_hpc.R | 4 +-- tests/testthat/test-census-samples.R | 20 +++++++------ 5 files changed, 53 insertions(+), 23 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 399ec1d4..83307035 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -11,7 +11,11 @@ License: GPL-3 Roxygen: list(markdown = TRUE) Depends: R (>= 4.2.0) -Remotes: sqjin/CellChat +Remotes: + sqjin/CellChat, + satijalab/seurat@seurat5, + satijalab/seurat-data@seurat5, + seurat-data/azimuth@master Biarch: true Imports: targets, diff --git a/NAMESPACE b/NAMESPACE index 453aa2d1..3536fecb 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -66,6 +66,7 @@ export(tranform_assay) export(transform_utility) export(vector_to_code) exportMethods(test_differential_abundance) +import(Seurat) import(SeuratObject) import(broom) import(crew) @@ -83,6 +84,7 @@ import(tidySingleCellExperiment) import(tidySummarizedExperiment) import(tidyseurat) importFrom(AnnotationDbi,mapIds) +importFrom(Azimuth,RunAzimuth) importFrom(CellChat,aggregateNet) importFrom(CellChat,computeExpr_LR) importFrom(CellChat,computeExpr_agonist) diff --git a/R/functions.R b/R/functions.R index 73eda882..e0ca6234 100644 --- a/R/functions.R +++ b/R/functions.R @@ -37,6 +37,8 @@ if(getRversion() >= "2.15.1") utils::globalVariables(c(".")) #' @importFrom magrittr extract2 #' @importFrom SummarizedExperiment assay #' @importFrom SummarizedExperiment assay<- +#' @importFrom Azimuth RunAzimuth +#' @import Seurat #' #' @export annotation_label_transfer <- function(input_read_RNA_assay, @@ -195,18 +197,37 @@ annotation_label_transfer <- function(input_read_RNA_assay, #print("Start Seurat") # Reading input - input_read_RNA_assay = - input_read_RNA_assay |> - # Filter empty - left_join(empty_droplets_tbl, by = ".cell") |> - filter(!empty_droplet) - azimuth_annotation = input_read_RNA_assay |> RunAzimuth(reference = reference_azimuth) |> - SCTransform(assay = assay) |> + if (!is.null(empty_droplets_tbl)) { + input_read_RNA_assay = + input_read_RNA_assay |> + # Filter empty + left_join(empty_droplets_tbl, by = ".cell") |> + filter(!empty_droplet) + } else if (is.null(empty_droplets_tbl)) {return(NULL)} + + library(Seurat) + azimuth_annotation = input_read_RNA_assay |> RenameAssays(assay.name = assay, + new.assay.name = "RNA") |> + Azimuth::RunAzimuth(reference = reference_azimuth, assay = "RNA", umap.name = "refUMAP") |> + SCTransform(assay = "RNA") |> ScaleData(assay = "SCT") |> RunPCA(assay = "SCT") |> as_tibble() |> - select(.cell, any_of(c("predicted.celltype.l1", "predicted.celltype.l2")), contains("refUMAP")) + select(.cell, any_of( + c( + "predicted.celltype.l1", + "predicted.celltype.l2", + "predicted.celltype.l3", + "predicted.celltype.l1.score", + "predicted.celltype.l2.score", + "predicted.celltype.l3.score" + ) + ), matches("umap|UMAP")) |> + nest(azimuth_scores_celltype = c(ends_with("score"), matches("umap|UMAP"))) |> + dplyr::rename(azimuth_predicted.celltype.l1 = predicted.celltype.l1, + azimuth_predicted.celltype.l2 = predicted.celltype.l2, + azimuth_predicted.celltype.l3 = predicted.celltype.l3) # Save modified_data <- data_annotated |> @@ -375,14 +396,15 @@ alive_identification <- function(input_read_RNA_assay, as_tibble(rownames = ".cell") %>% dplyr::select(-sum, -detected) + # I HAVE TO DROP UNIQUE, AS SOON AS THE BUG IN SEURAT IS RESOLVED. UNIQUE IS BUG PRONE HERE. + percentage_output = PercentageFeatureSet(input_read_RNA_assay, pattern = "^RPS|^RPL", assay = assay) + percentage_output = percentage_output[!duplicated(names(percentage_output))] # Compute ribosome statistics ribosome = input_read_RNA_assay |> select(.cell) |> #mutate(subsets_Ribo_percent = PercentageFeatureSet(input_read_RNA_assay, pattern = "^RPS|^RPL", assay = assay)[,1]) |> - - # I HAVE TO DROP UNIQUE, AS SOON AS THE BUG IN SEURAT IS RESOLVED. UNIQUE IS BUG PRONE HERE. - mutate(subsets_Ribo_percent = PercentageFeatureSet(input_read_RNA_assay, pattern = "^RPS|^RPL", assay = assay)) + mutate(subsets_Ribo_percent = percentage_output) # Add cell type labels and determine high mitochondrion content, if annotation_label_transfer_tbl is provided if(annotation_column |> is.null() |> not()) { diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index fde5598e..70bcdb5d 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -605,7 +605,7 @@ annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL, target args_list$factory = function(tiers, target_input, target_output){ list( - tar_target_raw("reference_read", readRDS("input_reference.rds") |> quote()), + tar_target_raw("azimuth_reference", readRDS("input_reference.rds") |> quote()), factory_split( target_output, @@ -613,7 +613,7 @@ annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL, target read_data_container(container_type = data_container_type) |> annotation_label_transfer( empty_tbl, - reference_read, + reference_azimuth = azimuth_reference, gene_nomenclature = gene_nomenclature ) |> substitute(env = list(i=as.symbol(target_input))), diff --git a/tests/testthat/test-census-samples.R b/tests/testthat/test-census-samples.R index bc3ae6fe..386b9f0d 100644 --- a/tests/testthat/test-census-samples.R +++ b/tests/testthat/test-census-samples.R @@ -126,16 +126,18 @@ files <- results |> mutate(sample_2 = basename(file_name) |> tools::file_path_sa select(-file_name.y, -cell_number.y, -file_size.y) |> rename(file_name = file_name.x, cell_number = cell_number.x, file_size = file_size.x) -files |> slice(21:50) |> pull(file_name) |> -#files |> filter(cell_number == 306) |> pull(file_name) |> + + +#files |> slice(21:50) |> pull(file_name) |> +files |>head(5) |> pull(file_name) |> initialise_hpc( gene_nomenclature = "ensembl", data_container_type = "anndata", - store = "~/scratch/Census/census_reanalysis/census-run-samples/50samples_null_empty_tbl_method/", - #store = "~/scratch/Census/census_reanalysis/census-run-samples/fail_sample/", - #debug_step = "cell_cycle_tbl_tier_1_907f2d141bc50b9e", - #tier = files |> filter(cell_number == 306)|> pull(tier), - tier = files |> slice(21:50) |> pull(tier), + #store = "~/scratch/Census/census_reanalysis/census-run-samples/50samples_null_empty_tbl_method/", + store = "~/scratch/Census/census_reanalysis/census-run-samples/try_azimuth_5samples/", + #debug_step = "alive_tbl_tier_1_365e6e7d163ec2b9", + tier = files |> head(5) |> pull(tier), + #tier = files |> slice(21:50) |> pull(tier), #computing_resources = crew_controller_local(workers = 10) #resource_tuned_slurm computing_resources = list( @@ -166,7 +168,7 @@ files |> slice(21:50) |> pull(file_name) |> ) |> #tranform_assay(fx = purrr::map(1:20, ~identity), target_output = "sce_transformed") |> - tranform_assay(fx = files |> slice(21:50) |> + tranform_assay(fx = files |> head(5) |> pull(transformation_function), target_output = "sce_transformed") |> @@ -186,7 +188,7 @@ files |> slice(21:50) |> pull(file_name) |> remove_doublets_scDblFinder(target_input = "sce_transformed") |> # Annotation - annotate_cell_type(target_input = "sce_transformed") |> + annotate_cell_type(target_input = "sce_transformed", azimuth_reference = "pbmcref") |> normalise_abundance_seurat_SCT(factors_to_regress = c( "subsets_Mito_percent", From aa6f2a96e13cf3444cc7a01de6a6bb695eb9561b Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Wed, 28 Aug 2024 11:41:45 +0930 Subject: [PATCH 023/145] Update DESCRIPTION --- DESCRIPTION | 1 - 1 file changed, 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 399ec1d4..d9ee73b5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -40,7 +40,6 @@ Imports: SingleR, celldex, scuttle, - CellChat, gridGraphics, scDblFinder, magrittr, From e75e8815bb5879297f94da6f26237dcc79e97325 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Wed, 28 Aug 2024 11:42:20 +0930 Subject: [PATCH 024/145] Update DESCRIPTION --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index d9ee73b5..710bacf2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.2.1 +Version: 0.3.1 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", From bcaaceac5f63c6ab7fea1a2b5f7d04f770e8ad57 Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 28 Aug 2024 12:16:59 +1000 Subject: [PATCH 025/145] update azimuth --- R/functions.R | 47 +++++++++++++++------------- R/modules_grammar_hpc.R | 1 + tests/testthat/test-census-samples.R | 10 +++--- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/R/functions.R b/R/functions.R index e0ca6234..4ff74ebe 100644 --- a/R/functions.R +++ b/R/functions.R @@ -207,27 +207,32 @@ annotation_label_transfer <- function(input_read_RNA_assay, } else if (is.null(empty_droplets_tbl)) {return(NULL)} library(Seurat) - azimuth_annotation = input_read_RNA_assay |> RenameAssays(assay.name = assay, - new.assay.name = "RNA") |> - Azimuth::RunAzimuth(reference = reference_azimuth, assay = "RNA", umap.name = "refUMAP") |> - SCTransform(assay = "RNA") |> - ScaleData(assay = "SCT") |> - RunPCA(assay = "SCT") |> - as_tibble() |> - select(.cell, any_of( - c( - "predicted.celltype.l1", - "predicted.celltype.l2", - "predicted.celltype.l3", - "predicted.celltype.l1.score", - "predicted.celltype.l2.score", - "predicted.celltype.l3.score" - ) - ), matches("umap|UMAP")) |> - nest(azimuth_scores_celltype = c(ends_with("score"), matches("umap|UMAP"))) |> - dplyr::rename(azimuth_predicted.celltype.l1 = predicted.celltype.l1, - azimuth_predicted.celltype.l2 = predicted.celltype.l2, - azimuth_predicted.celltype.l3 = predicted.celltype.l3) + azimuth_annotation = + tryCatch({input_read_RNA_assay |> RenameAssays(assay.name = assay, + new.assay.name = "RNA") |> + Azimuth::RunAzimuth(reference = reference_azimuth, assay = "RNA", umap.name = "refUMAP") |> + SCTransform(assay = "RNA") |> + ScaleData(assay = "SCT") |> + RunPCA(assay = "SCT") |> + as_tibble() |> + select(.cell, any_of( + c( + "predicted.celltype.l1", + "predicted.celltype.l2", + "predicted.celltype.l3", + "predicted.celltype.l1.score", + "predicted.celltype.l2.score", + "predicted.celltype.l3.score" + ) + ), matches("umap|UMAP")) |> + nest(azimuth_scores_celltype = c(ends_with("score"), matches("umap|UMAP"))) |> + dplyr::rename(azimuth_predicted.celltype.l1 = predicted.celltype.l1, + azimuth_predicted.celltype.l2 = predicted.celltype.l2, + azimuth_predicted.celltype.l3 = predicted.celltype.l3)}, + error = function(e) { + print(e) + input_read_RNA_assay |> as_tibble() |> select(.cell) + }) # Save modified_data <- data_annotated |> diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 70bcdb5d..d6c3f927 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -1124,6 +1124,7 @@ evaluate_hpc.HPCell = function(input_hpc) { "total_RNA_count_check.rds", "temp_group_by.rds", "factors_to_regress.rds", + "input_reference.rds", "pseudobulk_group_by.rds", "temp_tiers.rds", "temp_gene_nomenclature.rds", diff --git a/tests/testthat/test-census-samples.R b/tests/testthat/test-census-samples.R index 386b9f0d..8c342691 100644 --- a/tests/testthat/test-census-samples.R +++ b/tests/testthat/test-census-samples.R @@ -129,14 +129,14 @@ files <- results |> mutate(sample_2 = basename(file_name) |> tools::file_path_sa #files |> slice(21:50) |> pull(file_name) |> -files |>head(5) |> pull(file_name) |> +files |> head(3) |> pull(file_name) |> initialise_hpc( gene_nomenclature = "ensembl", data_container_type = "anndata", #store = "~/scratch/Census/census_reanalysis/census-run-samples/50samples_null_empty_tbl_method/", - store = "~/scratch/Census/census_reanalysis/census-run-samples/try_azimuth_5samples/", - #debug_step = "alive_tbl_tier_1_365e6e7d163ec2b9", - tier = files |> head(5) |> pull(tier), + store = "~/scratch/Census/census_reanalysis/census-run-samples/pilot/", + #debug_step = "annotation_tbl_tier_1_dcafa11e20d45e82", + tier = files |> head(3) |> pull(tier), #tier = files |> slice(21:50) |> pull(tier), #computing_resources = crew_controller_local(workers = 10) #resource_tuned_slurm computing_resources = list( @@ -168,7 +168,7 @@ files |>head(5) |> pull(file_name) |> ) |> #tranform_assay(fx = purrr::map(1:20, ~identity), target_output = "sce_transformed") |> - tranform_assay(fx = files |> head(5) |> + tranform_assay(fx = files |> head(3) |> pull(transformation_function), target_output = "sce_transformed") |> From 11e6118115bc1829ca8fa559219ac4de8b1d0697 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Wed, 28 Aug 2024 15:48:38 +0930 Subject: [PATCH 026/145] track files --- R/factories.R | 21 ++++-- R/functions.R | 8 ++- R/modules_grammar_hpc.R | 48 ++++++++----- R/tranform_assay.R | 5 +- tests/testthat/test_single_functions.R | 96 +++++++++++++------------- 5 files changed, 106 insertions(+), 72 deletions(-) diff --git a/R/factories.R b/R/factories.R index 48c8804c..48130c88 100644 --- a/R/factories.R +++ b/R/factories.R @@ -49,26 +49,32 @@ hpc_internal = function( other_arguments_to_map = c(), packages = targets::tar_option_get("packages") , deployment = targets::tar_option_get("deployment"), + format = targets::tar_option_get("format"), ... ){ args <- list(...) # Capture the ... arguments as a list - # Construct the full call expression with the pipeline substituted into the function - fx_call <- as.call(c(user_function, args)) + + # If format is file just pass the argument + if(format != "file") + + # Construct the full call expression with the pipeline substituted into the function + user_function <- as.call(c(user_function, args)) if(tiers |> is.null() || tiers |> length() < 2){ tar_target_raw( name = target_output |> as.character(), - command = fx_call, + command = user_function, # This is in case I am not tiering (e.g. DE analyses) but I need to map pattern = build_pattern(other_arguments_to_map = other_arguments_to_map), iteration = "list", packages = packages, - deployment = deployment + deployment = deployment, + format = format ) @@ -78,7 +84,7 @@ hpc_internal = function( else { - if(fx_call |> deparse() |> str_detect("%>%") |> any()) + if(user_function |> deparse() |> str_detect("%>%") |> any()) stop("HPCell says: no \"%>%\" allowed in the command, please use \"|>\" ") # Filter out arguments to be tiered from the input command @@ -93,7 +99,7 @@ hpc_internal = function( # This is needed because using glue as.character() , - command = fx_call |> add_tier_inputs(arguments_already_tiered, .y), + command = user_function |> add_tier_inputs(arguments_already_tiered, .y), pattern = build_pattern( other_arguments_to_map = glue("{other_arguments_to_map}_{.y}"), @@ -103,7 +109,8 @@ hpc_internal = function( iteration = "list", packages = packages, deployment = deployment, - resources = tar_resources(crew = tar_resources_crew(.y)) + resources = tar_resources(crew = tar_resources_crew(.y)) , + format = format ) }) diff --git a/R/functions.R b/R/functions.R index 1999dd4f..67dc70ba 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1530,4 +1530,10 @@ annotation_consensus = function(single_cell_data, .sample_column, .cell_type, .a #' @export -is_target = function(x) as.name(x) +is_target = function(x) { + + if(x |> is("character") |> not()) + stop("HPCell says: the input to `is_target` must be a character") + + as.name(x) +} diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 66dc86ee..2968da09 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -56,8 +56,7 @@ initialise_hpc <- function(input_hpc, input_hpc = input_hpc |> set_names(seq_len(length(input_hpc))) input_hpc |> names() |> saveRDS("sample_names.rds") - #cell_count |> saveRDS("cell_count.rds") - + # Optionally, you can evaluate the arguments if they are expressions args_list <- lapply(args_list, eval, envir = parent.frame()) @@ -72,8 +71,6 @@ initialise_hpc <- function(input_hpc, computing_resources |> saveRDS("temp_computing_resources.rds") tiers = tier |> get_positions() - tiers |> - saveRDS("temp_tiers.rds") # Write pipeline to a file { @@ -99,12 +96,7 @@ initialise_hpc <- function(input_hpc, packages = c("HPCell") ) - target_list = list( - tar_target(gene_nomenclature, readRDS("temp_gene_nomenclature.rds"), iteration = "list", deployment = "main"), - tar_target(data_container_type, readRDS("data_container_type.rds"), deployment = "main") - - ) - + target_list = list( ) } |> substitute(env = list(d = debug_step)) |> @@ -113,25 +105,50 @@ initialise_hpc <- function(input_hpc, input_hpc = list(initialisation = args_list ) |> - c(list(sample_names = list(iterate = "map")) ) |> - + add_class("HPCell") input_hpc |> + # Nomenclature + hpc_single("temp_gene_nomenclature_file", "temp_gene_nomenclature.rds", format = "file") |> + + hpc_single( + target_output = "gene_nomenclature", + user_function = readRDS |> quote(), + file = "temp_gene_nomenclature_file" |> is_target(), + deployment = "main" + ) |> + + # Container class + hpc_single("data_container_type_file", "data_container_type.rds", format = "file") |> + + hpc_single( + target_output = "data_container_type", + user_function = readRDS |> quote(), + file = "data_container_type_file" |> is_target(), + deployment = "main" + ) |> + + # Sample names + hpc_single("sample_names_file", "sample_names.rds", format = "file") |> + hpc_single( target_output = "sample_names", user_function = readRDS |> quote(), - file = "sample_names.rds", + file = "sample_names_file" |> is_target(), deployment = "main", iterate = "map" ) |> + # Files + hpc_single("read_file_list_file", "input_file.rds", format = "file") |> + hpc_single( target_output = "read_file_list", user_function = readRDS |> quote(), - file = "input_file.rds", + file = "read_file_list_file" |> is_target(), deployment = "main", iterate = "map" ) |> @@ -612,7 +629,7 @@ evaluate_hpc.HPCell = function(input_hpc) { # Call final list tar_script_append({ - target_list + target_list }, script = glue("{input_hpc$initialisation$store}.R")) if(input_hpc$initialisation$debug_step |> is.null()) @@ -637,7 +654,6 @@ evaluate_hpc.HPCell = function(input_hpc) { "temp_group_by.rds", "factors_to_regress.rds", "pseudobulk_group_by.rds", - "temp_tiers.rds", "temp_gene_nomenclature.rds" ) |> remove_files_safely() diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 43982d0d..1c6669b5 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -21,10 +21,13 @@ tranform_assay.HPCell = function( input_hpc |> + # Track the file + hpc_single("transform_file", "temp_fx.rds", format = "file") |> + hpc_iterate( target_output = "transform", user_function = readRDS |> quote() , - file = "temp_fx.rds" + file = "transform_file" |> is_target() # , # iteration = "list", # deployment = "main" diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 414737e1..b8282fde 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -488,6 +488,50 @@ library(crew.cluster) # InstallData("pbmcsca") # pbmcsca <- LoadData("pbmcsca") # save this to disk, so you can recall every time you execute HPCell +computing_resources = crew_controller_local(workers = 8) #resource_tuned_slurm + +# tier = rep(c("tier_1", "tier_2"), times = 6), +# computing_resources = list( +# +# crew_controller_local( +# name = "tier_1", +# workers = 4 +# ), +# crew_controller_local( +# name = "tier_2", +# workers = 4 +# ) +# ) + +# computing_resources = list( +# +# crew_controller_slurm( +# name = "tier_1", +# slurm_memory_gigabytes_per_cpu = 5, +# slurm_cpus_per_task = 1, +# workers = 50, +# tasks_max = 5, +# verbose = T +# ), +# crew_controller_slurm( +# name = "tier_2", +# slurm_memory_gigabytes_per_cpu = 10, +# slurm_cpus_per_task = 1, +# workers = 50, +# tasks_max = 5, +# verbose = T +# ) +# ) + +# # Slurm resources +# computing_resources = +# crew.cluster::crew_controller_slurm( +# slurm_memory_gigabytes_per_cpu = 5, +# workers = 500, +# tasks_max = 5, +# verbose = T, +# slurm_cpus_per_task = 1 +# ) # # Define and execute the pipeline file_list = @@ -504,59 +548,19 @@ file_list = # Initialise pipeline characteristics file_list |> + head(2) |> initialise_hpc( gene_nomenclature = "symbol", data_container_type = "sce_hdf5", - + computing_resources = computing_resources # debug_step = "non_batch_variation_removal_S_1", # Default resourced - computing_resources = crew_controller_local(workers = 8), #resource_tuned_slurm - - # tier = rep(c("tier_1", "tier_2"), times = 6), - # computing_resources = list( - # - # crew_controller_local( - # name = "tier_1", - # workers = 4 - # ), - # crew_controller_local( - # name = "tier_2", - # workers = 4 - # ) - # ) - # computing_resources = list( - # - # crew_controller_slurm( - # name = "tier_1", - # slurm_memory_gigabytes_per_cpu = 5, - # slurm_cpus_per_task = 1, - # workers = 50, - # tasks_max = 5, - # verbose = T - # ), - # crew_controller_slurm( - # name = "tier_2", - # slurm_memory_gigabytes_per_cpu = 10, - # slurm_cpus_per_task = 1, - # workers = 50, - # tasks_max = 5, - # verbose = T - # ) - # ) - - # # Slurm resources - # computing_resources = - # crew.cluster::crew_controller_slurm( - # slurm_memory_gigabytes_per_cpu = 5, - # workers = 500, - # tasks_max = 5, - # verbose = T, - # slurm_cpus_per_task = 1 - # ) ) |> + # ONLY APPLICABLE TO SCE FOR NOW + tranform_assay(fx = file_list |> purrr::map(~identity), target_output = "sce_transformed") |> hpc_report( "empty_report", @@ -565,9 +569,7 @@ file_list |> sample_names = "sample_names" |> is_target() ) |> - # ONLY APPLICABLE TO SCE FOR NOW - tranform_assay(fx = file_list |> purrr::map(~identity), target_output = "sce_transformed") |> - + hpc_iterate( target_output = "o", user_function = function(x, y){x |> dplyr::mutate(bla = y)}, From 51123008e59c7076b107fc8359966203490b62b3 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Wed, 28 Aug 2024 15:49:30 +0930 Subject: [PATCH 027/145] version UP --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 710bacf2..f58eff42 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.1 +Version: 0.3.2 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", From 4e95796cac4052bcc3274b46b9dfcc257b99be71 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Thu, 29 Aug 2024 20:52:58 +0930 Subject: [PATCH 028/145] fix transform assay --- R/tranform_assay.R | 3 +-- tests/testthat/test_single_functions.R | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 1c6669b5..b18ceb4a 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -38,7 +38,7 @@ tranform_assay.HPCell = function( user_function = transform_utility |> quote() , input_read_RNA_assay = as.name(target_input), transform_fx = transform |> quote() , - external_path = glue("{input_hpc$initialisation$store}/external") + external_path = glue("{input_hpc$initialisation$store}/external") |> as.character() ) } @@ -75,5 +75,4 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path) as.sparse=TRUE ) - file_name } diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index b8282fde..85f350ae 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -548,7 +548,6 @@ file_list = # Initialise pipeline characteristics file_list |> - head(2) |> initialise_hpc( gene_nomenclature = "symbol", data_container_type = "sce_hdf5", @@ -578,7 +577,7 @@ file_list |> ) |> # Remove empty outliers - remove_empty_DropletUtils( target_input = "data_object") |> + remove_empty_DropletUtils( target_input = "sce_transformed") |> # Annotation annotate_cell_type( From 37cd14eb12ffa4925162e16d1ffc3ab5727c1cb0 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Thu, 29 Aug 2024 22:52:21 +0930 Subject: [PATCH 029/145] add source argument to sutom functions --- DESCRIPTION | 2 +- R/differential_expression.R | 4 +-- R/factories.R | 44 ++++++++++++++++++-------- R/functions.R | 10 +----- R/modules_grammar_hpc.R | 2 +- R/utilities.R | 36 +++++++++++++++++++++ man/hpc_iterate.Rd | 8 ++++- man/hpc_merge.Rd | 8 ++++- man/hpc_single.Rd | 1 + tests/testthat/test_single_functions.R | 26 +++++++++++---- 10 files changed, 106 insertions(+), 35 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f58eff42..9e8eedfd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.2 +Version: 0.3.4 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", diff --git a/R/differential_expression.R b/R/differential_expression.R index b9249428..faa678cd 100644 --- a/R/differential_expression.R +++ b/R/differential_expression.R @@ -202,7 +202,7 @@ map_de = function(se, my_formula, assay, method, max_rows_for_matrix_multiplicat #' @export #' @noRd -internal_de_function = function(x, fi, a, f, m){ +internal_de_function = function(x, fi, a, formul, m){ # Skip if not enough samples if(x |> ncol() < 3) warning("HPCell says: your dataset has less than 3 samples, the differential expression analysis was skipped") @@ -210,7 +210,7 @@ internal_de_function = function(x, fi, a, f, m){ x |> keep_abundant(factor_of_interest = fi, .abundance = !!sym(a)) |> - test_differential_abundance(f, .abundance = !!sym(a), method = m) |> + test_differential_abundance(formul, .abundance = !!sym(a), method = m) |> pivot_transcript() |> # This because fi can be NULL. diff --git a/R/factories.R b/R/factories.R index 48130c88..1c62d6fd 100644 --- a/R/factories.R +++ b/R/factories.R @@ -201,7 +201,13 @@ hpc_internal_report = function( #' @importFrom purrr set_names #' @export hpc_iterate = - function(input_hpc, target_output = NULL, user_function = NULL, ...) { + function( + input_hpc, + target_output = NULL, + user_function = NULL, + user_function_source_path = NULL, + ... + ) { # Check for argument consistency check_for_name_value_conflicts(...) @@ -212,6 +218,9 @@ hpc_iterate = # Delete line with target in case the user execute the command, without calling initialise_hpc target_output |> delete_lines_with_word(target_script) + # Append source if any + write_source(user_function_source_path, target_script) + # please, because sometime we set up list target that do not depend on any other ones # if tiers is set to NULL, then the target will not acquire the _ suffix # I HAVE TO MAKE THIS MORE ELEGANT, AND NOT RELY ON tiers ARGUMENT @@ -276,7 +285,13 @@ hpc_iterate = #' @importFrom purrr set_names #' @export hpc_single = - function(input_hpc, target_output = NULL, user_function = NULL, iterate = "none", ...) { + function( + input_hpc, + target_output = NULL, + user_function = NULL, + user_function_source_path = NULL, + iterate = "none", + ...) { # Target script target_script = glue("{input_hpc$initialisation$store}.R") @@ -284,6 +299,10 @@ hpc_single = # Delete line with target in case the user execute the command, without calling initialise_hpc target_output |> delete_lines_with_word(target_script) + # Append source if any + write_source(user_function_source_path, target_script) + + tar_append( fx = hpc_internal |> quote(), target_output = target_output, @@ -321,7 +340,13 @@ hpc_single = #' @importFrom purrr set_names #' @export hpc_merge = - function(input_hpc, target_output = NULL, user_function = NULL, ...) { + function( + input_hpc, + target_output = NULL, + user_function = NULL, + user_function_source_path = NULL, + ... + ) { # Check for argument consistency check_for_name_value_conflicts(...) @@ -332,17 +357,8 @@ hpc_merge = # Delete line with target in case the user execute the command, without calling initialise_hpc target_output |> delete_lines_with_word(target_script) - # name_target_intermediate = glue("{target_output}_merge_within_tier") - - # tar_append( - # fx = hpc_internal |> quote(), - # tiers = input_hpc$initialisation$tier |> get_positions() , - # target_output = name_target_intermediate, - # script = target_script, - # user_function = user_function, - # arguments_already_tiered = list(...) |> arguments_to_action(input_hpc, "tiered") , # This "tiered" value is decided for each new target below. Ususally every other list targets. - # ... - # ) + # Append source if any + write_source(user_function_source_path, target_script) # If no tiers diff --git a/R/functions.R b/R/functions.R index 67dc70ba..7311b37b 100644 --- a/R/functions.R +++ b/R/functions.R @@ -768,16 +768,8 @@ non_batch_variation_removal <- function(input_read_RNA_assay, if (class_input == "SingleCellExperiment") { - dir.create(external_path, showWarnings = FALSE, recursive = TRUE) - - # Write the slice to the output HDF5 file - normalized_rna |> - HDF5Array::writeHDF5Array( - filepath = glue("{external_path}/{digest(normalized_rna)}"), - name = "SCT", - as.sparse = TRUE - ) + write_HDF5_array_safe(normalized_rna, "SCT", external_path) } else if (class_input == "Seurat") { diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 2968da09..eade4f69 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -556,7 +556,7 @@ setMethod( x = "pseudobulk_group_list" |> is_target(), fi = factor_of_interest, a = .abundance, - f = .formula, + formul = .formula, m = method, packages="tidybulk" ) diff --git a/R/utilities.R b/R/utilities.R index 9a4f6bc7..ae3c6a11 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -2606,3 +2606,39 @@ build_pattern = function(arguments_to_tier = c(), other_arguments_to_map = c(), } +write_source = function(user_function_source_path, target_script){ + if(user_function_source_path |> is.null() |> not()) + + source(s) |> + substitute(env = list(s =user_function_source_path )) |> + deparse() |> + write_lines(target_script, append = TRUE) +} + +target_append <- function(list_var, ...) { + list_var <<- c(list_var, list(...)) +} + +write_HDF5_array_safe = function(normalized_rna, name, directory){ + + dir.create(directory, showWarnings = FALSE, recursive = TRUE) + + hash = digest(normalized_rna) + file_name = glue("{directory}/{hash}") + + if ( + file.exists(file_name) && + name %in% rhdf5::h5ls(file_name)$name + ) { + names_to_drop = rhdf5::h5ls(file_name)$name |> str_subset(name) + names_to_drop |> map(~rhdf5::h5delete(file_name, .x)) + } + + normalized_rna |> + HDF5Array::writeHDF5Array( + filepath = file_name, + name = name, + as.sparse = TRUE + ) + +} diff --git a/man/hpc_iterate.Rd b/man/hpc_iterate.Rd index 0e28fab3..bfc07169 100644 --- a/man/hpc_iterate.Rd +++ b/man/hpc_iterate.Rd @@ -4,7 +4,13 @@ \alias{hpc_iterate} \title{Add HPC step to pipeline} \usage{ -hpc_iterate(input_hpc, target_output = NULL, user_function = NULL, ...) +hpc_iterate( + input_hpc, + target_output = NULL, + user_function = NULL, + user_function_source_path = NULL, + ... +) } \arguments{ \item{input_hpc}{The input HPC object.} diff --git a/man/hpc_merge.Rd b/man/hpc_merge.Rd index b86f1283..8a8b157f 100644 --- a/man/hpc_merge.Rd +++ b/man/hpc_merge.Rd @@ -4,7 +4,13 @@ \alias{hpc_merge} \title{Add HPC step to pipeline} \usage{ -hpc_merge(input_hpc, target_output = NULL, user_function = NULL, ...) +hpc_merge( + input_hpc, + target_output = NULL, + user_function = NULL, + user_function_source_path = NULL, + ... +) } \arguments{ \item{input_hpc}{The input HPC object.} diff --git a/man/hpc_single.Rd b/man/hpc_single.Rd index 2a2da0a0..480969bb 100644 --- a/man/hpc_single.Rd +++ b/man/hpc_single.Rd @@ -8,6 +8,7 @@ hpc_single( input_hpc, target_output = NULL, user_function = NULL, + user_function_source_path = NULL, iterate = "none", ... ) diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 85f350ae..51aac2f0 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -533,6 +533,11 @@ computing_resources = crew_controller_local(workers = 8) #resource_tuned_slurm # slurm_cpus_per_task = 1 # ) +{ foo_function = function(x, y){x |> dplyr::mutate(foo = y)} } |> + substitute() |> + deparse() |> + readr::write_lines("dev/my_custom_script.R") + # # Define and execute the pipeline file_list = # c("dev/input_seurat_treated_1.rds", @@ -543,7 +548,8 @@ file_list = # magrittr::set_names(c("pbmc3k1_1", "pbmc3k1_2", "pbmc3k1_3", "pbmc3k1_4")) # - dir("dev/CAQ_sce/", full.names = T) + dir("dev/CAQ_sce/", full.names = T) |> + head(3) # Initialise pipeline characteristics @@ -551,8 +557,8 @@ file_list |> initialise_hpc( gene_nomenclature = "symbol", data_container_type = "sce_hdf5", - computing_resources = computing_resources - # debug_step = "non_batch_variation_removal_S_1", + computing_resources = computing_resources, + # debug_step = "empty_report", # Default resourced @@ -570,12 +576,20 @@ file_list |> hpc_iterate( - target_output = "o", - user_function = function(x, y){x |> dplyr::mutate(bla = y)}, + target_output = "bar", + user_function = function(x, y){x |> dplyr::mutate(bar = y)}, x = "data_object" |> is_target(), y = "works" ) |> + hpc_iterate( + target_output = "foo", + user_function = foo_function |> quote(), + x = "data_object" |> is_target(), + y = "works", + user_function_source_path = "dev/my_custom_script.R" |> here::here() + ) |> + # Remove empty outliers remove_empty_DropletUtils( target_input = "sce_transformed") |> @@ -606,7 +620,7 @@ file_list |> calculate_pseudobulk(group_by = "monaco_first.labels.fine", target_input = "data_object") |> # test_differential_abundance(~ age_days + (1|collection_id), .abundance="counts") |> - test_differential_abundance(~ age_days, .abundance="counts", group_by_column = "monaco_first.labels.fine") |> + test_differential_abundance(~ age_days, .abundance="counts", group_by_column = "monaco_first.labels.fine") |> # For the moment only available for single cell get_single_cell(target_input = "data_object") From fa632e5b3b61dc9bfdffaa6f79d18bcf65576123 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Fri, 30 Aug 2024 11:19:24 +0930 Subject: [PATCH 030/145] deal with undefined targets --- R/functions.R | 216 ++++++++++++------------- R/modules_grammar_hpc.R | 107 ++++++------ man/alive_identification.Rd | 2 +- man/annotation_label_transfer.Rd | 2 +- man/cell_cycle_scoring.Rd | 2 +- man/create_pseudobulk.Rd | 10 +- man/doublet_identification.Rd | 4 +- man/non_batch_variation_removal.Rd | 6 +- man/preprocessing_output.Rd | 10 +- tests/testthat/test_single_functions.R | 1 - 10 files changed, 177 insertions(+), 183 deletions(-) diff --git a/R/functions.R b/R/functions.R index 7311b37b..72a717b5 100644 --- a/R/functions.R +++ b/R/functions.R @@ -40,7 +40,7 @@ if(getRversion() >= "2.15.1") utils::globalVariables(c(".")) #' #' @export annotation_label_transfer <- function(input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, reference_azimuth = NULL, assay = NULL ){ @@ -54,34 +54,36 @@ annotation_label_transfer <- function(input_read_RNA_assay, # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - # SingleR - if (inherits(input_read_RNA_assay, "Seurat")) { - sce = + # Filter empty + if(empty_droplets_tbl |> is.null() |> not()) + input_read_RNA_assay = input_read_RNA_assay |> - # Filter empty left_join(empty_droplets_tbl, by = ".cell") |> - dplyr::filter(!empty_droplet) |> + dplyr::filter(!empty_droplet) + + # SingleR + if (inherits(input_read_RNA_assay, "Seurat")) { + input_read_RNA_assay = + input_read_RNA_assay as.SingleCellExperiment() |> logNormCounts() } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")){ - sce = + input_read_RNA_assay = input_read_RNA_assay |> - # Filter empty - left_join(empty_droplets_tbl, by = ".cell") |> - dplyr::filter(!empty_droplet) |> logNormCounts() } - - if(ncol(sce)==1){ - sce = S4Vectors::cbind(sce, sce) - colnames(sce)[2]= "dummy___" + # This because an error is num cell = 1 + if(ncol(input_read_RNA_assay)==1){ + input_read_RNA_assay = S4Vectors::cbind(input_read_RNA_assay, input_read_RNA_assay) + colnames(input_read_RNA_assay)[2]= "dummy___" } + blueprint <- celldex::BlueprintEncodeData() data_annotated = - sce |> + input_read_RNA_assay |> SingleR( ref = blueprint, assay.type.test= 1, @@ -94,7 +96,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, left_join( - sce |> + input_read_RNA_assay |> SingleR( ref = blueprint, assay.type.test= 1, @@ -116,7 +118,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, data_annotated |> left_join( - sce |> + input_read_RNA_assay |> SingleR( ref = MonacoImmuneData, assay.type.test= 1, @@ -130,7 +132,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, ) |> left_join( - sce |> + input_read_RNA_assay |> SingleR( ref = MonacoImmuneData, assay.type.test= 1, @@ -146,9 +148,6 @@ annotation_label_transfer <- function(input_read_RNA_assay, rm(MonacoImmuneData) gc() - - rm(sce) - gc() # Convert SCE to SE to calculate SCT if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { @@ -181,22 +180,6 @@ annotation_label_transfer <- function(input_read_RNA_assay, } else if (!is.null(reference_azimuth)) { - #print("Start Seurat") - - # Load reference PBMC - # reference_azimuth <- LoadH5Seurat("data//pbmc_multimodal.h5seurat") - # reference_azimuth |> saveRDS("analysis/annotation_label_transfer/reference_azimuth.rds") - - #reference_azimuth = readRDS(reference_azimuth_path) - - - # Reading input - input_read_RNA_assay = - input_read_RNA_assay |> - # Filter empty - left_join(empty_droplets_tbl, by = ".cell") |> - filter(!empty_droplet) - # Subset RNA_assay = input_read_RNA_assay[rownames(input_read_RNA_assay[[assay]]) %in% rownames(reference_azimuth[["SCT"]]),][[assay]] @@ -322,7 +305,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, #' #' @export alive_identification <- function(input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, annotation_label_transfer_tbl = NULL, annotation_column = NULL, assay = NULL) { @@ -332,8 +315,7 @@ alive_identification <- function(input_read_RNA_assay, detected = NULL .cell = NULL high_mitochondrion = NULL - blueprint_first.labels.fine = NULL - + if( !is.null(annotation_column) && !annotation_column %in% colnames(as_tibble(input_read_RNA_assay[1,1])) @@ -343,10 +325,12 @@ alive_identification <- function(input_read_RNA_assay, # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - input_read_RNA_assay = - input_read_RNA_assay |> - left_join(empty_droplets_tbl, by=".cell") |> - dplyr::filter(!empty_droplet) + # Filter empty + if(empty_droplets_tbl |> is.null() |> not()) + input_read_RNA_assay = + input_read_RNA_assay |> + left_join(empty_droplets_tbl, by=".cell") |> + dplyr::filter(!empty_droplet) # Calculate nFeature_RNA and nCount_RNA if not exist in the data nFeature_name <- paste0("nFeature_", assay) @@ -544,8 +528,8 @@ alive_identification <- function(input_read_RNA_assay, #' @import scDblFinder #' @export doublet_identification <- function(input_read_RNA_assay, - empty_droplets_tbl, - alive_identification_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, #annotation_label_transfer_tbl, #reference_label_fine, assay = NULL){ @@ -553,8 +537,6 @@ doublet_identification <- function(input_read_RNA_assay, # Fix GChecks .cell = NULL empty_droplet = NULL - high_mitochondrion = NULL - high_ribosome = NULL # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) @@ -564,26 +546,29 @@ doublet_identification <- function(input_read_RNA_assay, input_read_RNA_assay <- input_read_RNA_assay |> # Filtering empty Seurat::as.SingleCellExperiment() - } - filter_empty_droplets <- input_read_RNA_assay |> - # Filtering empty + # Filtering empty + if(empty_droplets_tbl |> is.null() |> not()) + input_read_RNA_assay <- input_read_RNA_assay |> left_join(empty_droplets_tbl |> select(.cell, empty_droplet), by = ".cell") |> - filter(!empty_droplet) |> - - # Filter dead + filter(!empty_droplet) + + # Filtering dead + if(alive_identification_tbl |> is.null() |> not()) + input_read_RNA_assay = input_read_RNA_assay |> left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> filter(alive) # Annotate - filter_empty_droplets <- filter_empty_droplets |> + input_read_RNA_assay |> #left_join(annotation_label_transfer_tbl, by = ".cell")|> #scDblFinder(clusters = ifelse(reference_label_fine=="none", TRUE, reference_label_fine)) |> - scDblFinder(clusters = NULL) - - as_tibble(colData(filter_empty_droplets), rownames = ".cell")|> select(.cell, contains("scDblFinder")) + scDblFinder(clusters = NULL) |> + colData() |> + as_tibble(rownames = ".cell") |> + select(.cell, contains("scDblFinder")) } @@ -614,7 +599,7 @@ doublet_identification <- function(input_read_RNA_assay, #' @importFrom SingleCellExperiment SingleCellExperiment #' @export cell_cycle_scoring <- function(input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, gene_nomenclature, assay = NULL){ #Fix GCHECK @@ -649,11 +634,15 @@ cell_cycle_scoring <- function(input_read_RNA_assay, g2m.features_tidy = Seurat::cc.genes$g2m.genes } - - counts <- + # Filter empty + if(empty_droplets_tbl |> is.null() |> not()) + input_read_RNA_assay = input_read_RNA_assay |> left_join(empty_droplets_tbl, by = ".cell") |> - dplyr::filter(!empty_droplet) |> + dplyr::filter(!empty_droplet) + + + input_read_RNA_assay |> # Normalise needed NormalizeData() |> @@ -670,8 +659,6 @@ cell_cycle_scoring <- function(input_read_RNA_assay, as_tibble() |> select(.cell, S.Score, G2M.Score, Phase) - counts - } @@ -693,9 +680,9 @@ cell_cycle_scoring <- function(input_read_RNA_assay, #' @importFrom Seurat NormalizeData VariableFeatures SCTransform #' @export non_batch_variation_removal <- function(input_read_RNA_assay, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, assay = NULL, factors_to_regress = NULL, external_path){ @@ -724,25 +711,27 @@ non_batch_variation_removal <- function(input_read_RNA_assay, new.assay.name = assay) } - input_read_RNA_assay = - input_read_RNA_assay |> - left_join(empty_droplets_tbl, by = ".cell") |> - filter(!empty_droplet) |> - - left_join( - alive_identification_tbl |> - select(.cell, any_of(factors_to_regress)), - by=".cell" - ) + # Filtering empty + if(empty_droplets_tbl |> is.null() |> not()) + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(empty_droplets_tbl |> select(.cell, empty_droplet), by = ".cell") |> + filter(!empty_droplet) - if(!is.null(cell_cycle_score_tbl)) + # Filtering dead + if(alive_identification_tbl |> is.null() |> not()) input_read_RNA_assay = input_read_RNA_assay |> - - left_join( - cell_cycle_score_tbl |> - select(.cell, any_of(factors_to_regress)), - by=".cell" - ) + left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> + filter(alive) + + # attach cell cycle + if(cell_cycle_score_tbl |> is.null() |> not()) + input_read_RNA_assay = + input_read_RNA_assay |> + left_join( + cell_cycle_score_tbl |> + select(.cell, any_of(factors_to_regress)), + by=".cell" + ) # filter(!high_mitochondrion | !high_ribosome) @@ -826,11 +815,11 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #' @importFrom SingleCellExperiment altExp<- #' @export preprocessing_output <- function(input_read_RNA_assay, - empty_droplets_tbl, - non_batch_variation_removal_S, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, + empty_droplets_tbl = NULL, + non_batch_variation_removal_S = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + annotation_label_transfer_tbl = NULL, doublet_identification_tbl){ #Fix GCHECKS .cell <- NULL @@ -854,38 +843,37 @@ preprocessing_output <- function(input_read_RNA_assay, input_read_RNA_assay[["SCT"]] = non_batch_variation_removal_S else if(input_read_RNA_assay |> is("SingleCellExperiment")){ message("HPCell says: in order to attach SCT assay to the SingleCellExperiment, SCT was added to external experiments slot") - - #input_read_RNA_assay = input_read_RNA_assay[rownames(non_batch_variation_removal_S), ] - + #input_read_RNA_assay = input_read_RNA_assay[rownames(non_batch_variation_removal_S), # altExp(input_read_RNA_assay) = SingleCellExperiment(assay = list(SCT = non_batch_variation_removal_S)) - assay(input_read_RNA_assay, "SCT") <- non_batch_variation_removal_S } } + # Filtering dead + if(alive_identification_tbl |> is.null() |> not()) + input_read_RNA_assay = input_read_RNA_assay |> + left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> + filter(alive) + + + + # Filter doublets + if(doublet_identification_tbl |> is.null() |> not()) input_read_RNA_assay <- input_read_RNA_assay |> - - # Filter dead cells - left_join( - alive_identification_tbl |> - select(.cell, any_of(c("alive", "subsets_Mito_percent", "subsets_Ribo_percent", "high_mitochondrion", "high_ribosome"))), - by = ".cell" - ) |> - filter(alive) |> - - # Filter doublets left_join(doublet_identification_tbl |> select(.cell, scDblFinder.class), by = ".cell") |> filter(scDblFinder.class=="singlet") - # Add cell cycle + # attach cell cycle if(cell_cycle_score_tbl |> is.null() |> not()) - input_read_RNA_assay <- input_read_RNA_assay |> - left_join( - cell_cycle_score_tbl, + input_read_RNA_assay = + input_read_RNA_assay |> + left_join( + cell_cycle_score_tbl |> + select(.cell, any_of(factors_to_regress)), by=".cell" - ) + ) # Attach annotation if (inherits(annotation_label_transfer_tbl, "tbl_df")){ @@ -947,11 +935,11 @@ preprocessing_output <- function(input_read_RNA_assay, # Create pseudobulk for each sample create_pseudobulk <- function(input_read_RNA_assay, sample_names_vec, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, - doublet_identification_tbl , + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + annotation_label_transfer_tbl = NULL, + doublet_identification_tbl = NULL, x = c() , external_path, assays = NULL) { #Fix GChecks @@ -1524,6 +1512,8 @@ annotation_consensus = function(single_cell_data, .sample_column, .cell_type, .a #' @export is_target = function(x) { + if(x |> is.null()) return(NULL) + if(x |> is("character") |> not()) stop("HPCell says: the input to `is_target` must be a character") diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index eade4f69..fbd78f03 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -260,7 +260,6 @@ target_chunk_undefined_remove_dead_scuttle = function(input_hpc){ } - # Define the generic function #' @export score_cell_cycle_seurat <- function(input_hpc, target_input = "data_object", target_output = "cell_cycle_tbl",...) { @@ -295,20 +294,26 @@ target_chunk_undefined_score_cell_cycle_seurat = function(input_hpc, target_inpu # Define the generic function #' @export -remove_doublets_scDblFinder <- function(input_hpc, target_input = "data_object", target_output = "doublet_tbl") { +remove_doublets_scDblFinder <- function( + input_hpc, target_input = "data_object", target_output = "doublet_tbl", + target_empry_droplets = "empty_tbl", target_alive = "alive_tbl" + ) { UseMethod("remove_doublets_scDblFinder") } #' @export -remove_doublets_scDblFinder.HPCell = function(input_hpc, target_input = "data_object", target_output = "doublet_tbl") { +remove_doublets_scDblFinder.HPCell = function( + input_hpc, target_input = "data_object", target_output = "doublet_tbl", + target_empry_droplets = "empty_tbl", target_alive = "alive_tbl" + ) { input_hpc |> hpc_iterate( target_output = target_output, user_function = doublet_identification |> quote() , input_read_RNA_assay = target_input |> is_target(), - empty_droplets_tbl = "empty_tbl" |> is_target() , - alive_identification_tbl = "alive_tbl" |> is_target() + empty_droplets_tbl = target_empry_droplets |> is_target() , + alive_identification_tbl = target_alive |> is_target() ) } @@ -577,52 +582,52 @@ evaluate_hpc <- function(input_hpc) { #' @export evaluate_hpc.HPCell = function(input_hpc) { - #-----------------------# - # Empty droplets - #-----------------------# - - if(! "empty_tbl" %in% names(input_hpc)) - target_chunk_undefined_remove_empty_DropletUtils(input_hpc) - - #-----------------------# - # Annotate cell type - #-----------------------# - - if( - !("annotation_tbl" %in% names(input_hpc) | - ( "alive_tbl" %in% names(input_hpc) & !is.null(input_hpc$remove_dead_scuttle$group_by)) - )) - target_chunk_undefined_annotate_cell_type(input_hpc) - - #-----------------------# - # Remove dead - #-----------------------# - - if(! "alive_tbl" %in% names(input_hpc)) - target_chunk_undefined_remove_dead_scuttle(input_hpc) - - - #-----------------------# - # score cell cycle - #-----------------------# - if(! "cell_cycle_tbl" %in% names(input_hpc)) - target_chunk_undefined_score_cell_cycle_seurat(input_hpc) - - #-----------------------# - # Doublets - #-----------------------# - - if(! "doublet_tbl" %in% names(input_hpc)) - target_chunk_undefined_remove_doublets_scDblFinder(input_hpc) - - #-----------------------# - # SCT - #-----------------------# - - if(! "sct_matrix" %in% names(input_hpc)) - target_chunk_undefined_normalise_abundance_seurat_SCT(input_hpc) - - + # #-----------------------# + # # Empty droplets + # #-----------------------# + # + # if(! "empty_tbl" %in% names(input_hpc)) + # target_chunk_undefined_remove_empty_DropletUtils(input_hpc) + # + # #-----------------------# + # # Annotate cell type + # #-----------------------# + # + # if( + # !("annotation_tbl" %in% names(input_hpc) | + # ( "alive_tbl" %in% names(input_hpc) & !is.null(input_hpc$remove_dead_scuttle$group_by)) + # )) + # target_chunk_undefined_annotate_cell_type(input_hpc) + # + # #-----------------------# + # # Remove dead + # #-----------------------# + # + # if(! "alive_tbl" %in% names(input_hpc)) + # target_chunk_undefined_remove_dead_scuttle(input_hpc) + # + # + # #-----------------------# + # # score cell cycle + # #-----------------------# + # if(! "cell_cycle_tbl" %in% names(input_hpc)) + # target_chunk_undefined_score_cell_cycle_seurat(input_hpc) + # + # #-----------------------# + # # Doublets + # #-----------------------# + # + # if(! "doublet_tbl" %in% names(input_hpc)) + # target_chunk_undefined_remove_doublets_scDblFinder(input_hpc) + # + # #-----------------------# + # # SCT + # #-----------------------# + # + # if(! "sct_matrix" %in% names(input_hpc)) + # target_chunk_undefined_normalise_abundance_seurat_SCT(input_hpc) + # + # #-----------------------# # Close pipeline #-----------------------# diff --git a/man/alive_identification.Rd b/man/alive_identification.Rd index 78af40ef..a23ce2e9 100644 --- a/man/alive_identification.Rd +++ b/man/alive_identification.Rd @@ -6,7 +6,7 @@ \usage{ alive_identification( input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, annotation_label_transfer_tbl = NULL, annotation_column = NULL, assay = NULL diff --git a/man/annotation_label_transfer.Rd b/man/annotation_label_transfer.Rd index 912fcc9a..af60b378 100644 --- a/man/annotation_label_transfer.Rd +++ b/man/annotation_label_transfer.Rd @@ -6,7 +6,7 @@ \usage{ annotation_label_transfer( input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, reference_azimuth = NULL, assay = NULL ) diff --git a/man/cell_cycle_scoring.Rd b/man/cell_cycle_scoring.Rd index e42fc21e..4e15e765 100644 --- a/man/cell_cycle_scoring.Rd +++ b/man/cell_cycle_scoring.Rd @@ -6,7 +6,7 @@ \usage{ cell_cycle_scoring( input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, gene_nomenclature, assay = NULL ) diff --git a/man/create_pseudobulk.Rd b/man/create_pseudobulk.Rd index e61c2daf..e5b1c8a7 100644 --- a/man/create_pseudobulk.Rd +++ b/man/create_pseudobulk.Rd @@ -7,11 +7,11 @@ create_pseudobulk( input_read_RNA_assay, sample_names_vec, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, - doublet_identification_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + annotation_label_transfer_tbl = NULL, + doublet_identification_tbl = NULL, x = c(), external_path, assays = NULL diff --git a/man/doublet_identification.Rd b/man/doublet_identification.Rd index 879c3010..fad26396 100644 --- a/man/doublet_identification.Rd +++ b/man/doublet_identification.Rd @@ -6,8 +6,8 @@ \usage{ doublet_identification( input_read_RNA_assay, - empty_droplets_tbl, - alive_identification_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, assay = NULL ) } diff --git a/man/non_batch_variation_removal.Rd b/man/non_batch_variation_removal.Rd index c747c3b0..c1f2af70 100644 --- a/man/non_batch_variation_removal.Rd +++ b/man/non_batch_variation_removal.Rd @@ -6,9 +6,9 @@ \usage{ non_batch_variation_removal( input_read_RNA_assay, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, assay = NULL, factors_to_regress = NULL, external_path diff --git a/man/preprocessing_output.Rd b/man/preprocessing_output.Rd index 5b7721a6..3426b53e 100644 --- a/man/preprocessing_output.Rd +++ b/man/preprocessing_output.Rd @@ -6,11 +6,11 @@ \usage{ preprocessing_output( input_read_RNA_assay, - empty_droplets_tbl, - non_batch_variation_removal_S, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, + empty_droplets_tbl = NULL, + non_batch_variation_removal_S = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + annotation_label_transfer_tbl = NULL, doublet_identification_tbl ) } diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 51aac2f0..32cc03ff 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -609,7 +609,6 @@ file_list |> # Remove doublets remove_doublets_scDblFinder(target_input = "data_object") |> - normalise_abundance_seurat_SCT(factors_to_regress = c( "subsets_Mito_percent", "subsets_Ribo_percent", From 60a2815486e7abdb66a33fc4709f397ad08ddd49 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Fri, 30 Aug 2024 06:08:44 +0300 Subject: [PATCH 031/145] fixed bug --- R/functions.R | 30 +++++----- R/modules_grammar_hpc.R | 121 ---------------------------------------- 2 files changed, 14 insertions(+), 137 deletions(-) diff --git a/R/functions.R b/R/functions.R index 72a717b5..fb79bcb8 100644 --- a/R/functions.R +++ b/R/functions.R @@ -689,9 +689,6 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #Fix GChecks empty_droplet = NULL .cell <- NULL - subsets_Ribo_percent <- NULL - subsets_Mito_percent <- NULL - G2M.Score = NULL # Your code for non_batch_variation_removal function here class_input = input_read_RNA_assay |> class() @@ -719,8 +716,9 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # Filtering dead if(alive_identification_tbl |> is.null() |> not()) - input_read_RNA_assay = input_read_RNA_assay |> - left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> + input_read_RNA_assay = + input_read_RNA_assay |> + left_join(alive_identification_tbl |> select(.cell, alive, any_of(factors_to_regress)), by = ".cell") |> filter(alive) # attach cell cycle @@ -742,18 +740,18 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # Normalise RNA normalized_rna <- + input_read_RNA_assay |> Seurat::SCTransform( - input_read_RNA_assay, - assay=assay, - return.only.var.genes=FALSE, - residual.features = NULL, - vars.to.regress = factors_to_regress, - vst.flavor = "v2", - scale_factor=2186, - conserve.memory=T, - min_cells=0, - ) |> - GetAssayData(assay="SCT") + assay=assay, + return.only.var.genes=FALSE, + residual.features = NULL, + vars.to.regress = factors_to_regress, + vst.flavor = "v2", + scale_factor=2186, + conserve.memory=T, + min_cells=0, + ) |> + GetAssayData(assay="SCT") if (class_input == "SingleCellExperiment") { diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index fbd78f03..22c165e3 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -199,19 +199,6 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N } -target_chunk_undefined_remove_empty_DropletUtils = function(input_hpc){ - - input_hpc |> - hpc_iterate( - target_output = "empty_tbl", - user_function = (function(x) x |> as_tibble() |> select(.cell) |> mutate(empty_droplet = FALSE)) |> quote() , - x = "data_object" |> is_target(), - packages = c("dplyr", "tidySingleCellExperiment", "tidyseurat") - ) - -} - - # Define the generic function #' @export remove_dead_scuttle <- function(input_hpc, @@ -246,19 +233,6 @@ remove_dead_scuttle.HPCell = function( } -#' @importFrom dplyr mutate -target_chunk_undefined_remove_dead_scuttle = function(input_hpc){ - - input_hpc |> - hpc_iterate( - target_output = "alive_tbl", - user_function = (function(x) x |> as_tibble() |> select(.cell) |> mutate(alive = TRUE)) |> quote() , - x = "data_object" |> is_target(), - packages = c("dplyr", "tidySingleCellExperiment", "tidyseurat") - ) - -} - # Define the generic function #' @export @@ -280,18 +254,6 @@ score_cell_cycle_seurat.HPCell = function(input_hpc, target_input = "data_object } -target_chunk_undefined_score_cell_cycle_seurat = function(input_hpc, target_input = "data_object"){ - - input_hpc |> - hpc_iterate( - target_output = "cell_cycle_tbl", - user_function = function(x) NULL , - x = "read_file_list" |> is_target() - ) - -} - - # Define the generic function #' @export remove_doublets_scDblFinder <- function( @@ -318,18 +280,6 @@ remove_doublets_scDblFinder.HPCell = function( } -target_chunk_undefined_remove_doublets_scDblFinder = function(input_hpc){ - - input_hpc |> - hpc_iterate( - target_output = "doublet_tbl", - user_function = (function(x) x |> as_tibble() |> select(.cell) |> mutate(scDblFinder.class="singlet")) |> quote() , - x = "data_object" |> is_target(), - packages = c("dplyr", "tidySingleCellExperiment", "tidyseurat") - ) - -} - # Define the generic function #' @export annotate_cell_type <- function(input_hpc, azimuth_reference = NULL, target_input = "data_object", target_output = "annotation_tbl",...) { @@ -360,19 +310,6 @@ annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL, target } -target_chunk_undefined_annotate_cell_type = function(input_hpc){ - - input_hpc |> - hpc_iterate( - target_output = "annotation_tbl", - user_function = function(x) NULL , - x = read_file_list |> quote() - ) - - -} - - # Define the generic function #' @export normalise_abundance_seurat_SCT <- function(input_hpc, target_input = "data_object", target_output = "sct_matrix", ...) { @@ -396,18 +333,6 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = ) -} - -target_chunk_undefined_normalise_abundance_seurat_SCT = function(input_hpc){ - - input_hpc |> - hpc_iterate( - target_output = "sct_matrix", - user_function = function(x) NULL , - x = read_file_list |> quote() - ) - - } # Define the generic function @@ -582,52 +507,6 @@ evaluate_hpc <- function(input_hpc) { #' @export evaluate_hpc.HPCell = function(input_hpc) { - # #-----------------------# - # # Empty droplets - # #-----------------------# - # - # if(! "empty_tbl" %in% names(input_hpc)) - # target_chunk_undefined_remove_empty_DropletUtils(input_hpc) - # - # #-----------------------# - # # Annotate cell type - # #-----------------------# - # - # if( - # !("annotation_tbl" %in% names(input_hpc) | - # ( "alive_tbl" %in% names(input_hpc) & !is.null(input_hpc$remove_dead_scuttle$group_by)) - # )) - # target_chunk_undefined_annotate_cell_type(input_hpc) - # - # #-----------------------# - # # Remove dead - # #-----------------------# - # - # if(! "alive_tbl" %in% names(input_hpc)) - # target_chunk_undefined_remove_dead_scuttle(input_hpc) - # - # - # #-----------------------# - # # score cell cycle - # #-----------------------# - # if(! "cell_cycle_tbl" %in% names(input_hpc)) - # target_chunk_undefined_score_cell_cycle_seurat(input_hpc) - # - # #-----------------------# - # # Doublets - # #-----------------------# - # - # if(! "doublet_tbl" %in% names(input_hpc)) - # target_chunk_undefined_remove_doublets_scDblFinder(input_hpc) - # - # #-----------------------# - # # SCT - # #-----------------------# - # - # if(! "sct_matrix" %in% names(input_hpc)) - # target_chunk_undefined_normalise_abundance_seurat_SCT(input_hpc) - # - # #-----------------------# # Close pipeline #-----------------------# From 5d4ff7fb3ecee098fb0061de820dfd51f37fe2e0 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Fri, 30 Aug 2024 07:02:11 +0300 Subject: [PATCH 032/145] still a bug with SCT filtering --- R/functions.R | 6 ++---- R/modules_grammar_hpc.R | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/R/functions.R b/R/functions.R index fb79bcb8..9cda4239 100644 --- a/R/functions.R +++ b/R/functions.R @@ -718,8 +718,7 @@ non_batch_variation_removal <- function(input_read_RNA_assay, if(alive_identification_tbl |> is.null() |> not()) input_read_RNA_assay = input_read_RNA_assay |> - left_join(alive_identification_tbl |> select(.cell, alive, any_of(factors_to_regress)), by = ".cell") |> - filter(alive) + left_join(alive_identification_tbl |> select(.cell, alive, any_of(factors_to_regress)), by = ".cell") # attach cell cycle if(cell_cycle_score_tbl |> is.null() |> not()) @@ -868,8 +867,7 @@ preprocessing_output <- function(input_read_RNA_assay, input_read_RNA_assay = input_read_RNA_assay |> left_join( - cell_cycle_score_tbl |> - select(.cell, any_of(factors_to_regress)), + cell_cycle_score_tbl , by=".cell" ) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 22c165e3..9618d9b8 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -396,7 +396,7 @@ get_single_cell.HPCell = function(input_hpc, target_input = "data_object", targe user_function = preprocessing_output |> quote() , input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = "empty_tbl" |> is_target() , - non_batch_variation_removal_S = sct_matrix |> quote(), + non_batch_variation_removal_S = "sct_matrix" |> is_target(), alive_identification_tbl = "alive_tbl" |> is_target(), cell_cycle_score_tbl = "cell_cycle_tbl" |> is_target(), annotation_label_transfer_tbl = "annotation_tbl" |> is_target(), From 442fa7fc39e1c62fbe8720e3b3d07cb82c792b2f Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Fri, 30 Aug 2024 07:39:13 +0300 Subject: [PATCH 033/145] clean backend _target.R file --- DESCRIPTION | 2 +- NAMESPACE | 1 + R/utilities.R | 13 +++++++------ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 9e8eedfd..92f5de2f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.4 +Version: 0.3.5 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", diff --git a/NAMESPACE b/NAMESPACE index 2009c44a..e5b894bd 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -62,6 +62,7 @@ export(score_cell_cycle_seurat) export(se_add_dispersion) export(seurat_to_ligand_receptor_count) export(split_summarized_experiment) +export(target_append) export(test_differential_abundance_hpc) export(tranform_assay) export(transform_utility) diff --git a/R/utilities.R b/R/utilities.R index ae3c6a11..345f7f38 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -624,11 +624,9 @@ tar_append = function(fx, tiers = NULL, script = targets::tar_config_get("script # } # Add prefix - "target_list = c(target_list, list(" |> + "target_list |> target_append(" |> c(call_expr ) |> - - # Add suffix - c("))") |> + c(")") |> paste(collapse = " ") |> @@ -2615,8 +2613,11 @@ write_source = function(user_function_source_path, target_script){ write_lines(target_script, append = TRUE) } -target_append <- function(list_var, ...) { - list_var <<- c(list_var, list(...)) +#' @export +target_append <- function(target_list, ...) { + # Append the new elements to the list + target_list <<- c(target_list, list(...)) + } write_HDF5_array_safe = function(normalized_rna, name, directory){ From efcf63baa60235c6be0bdb7af82d67281f962af4 Mon Sep 17 00:00:00 2001 From: myushen Date: Fri, 30 Aug 2024 15:42:09 +1000 Subject: [PATCH 034/145] fix transform_assay --- .gitignore | 5 +++ R/tranform_assay.R | 12 +----- tests/testthat/test-census-samples.R | 63 ++++++++++++++++++---------- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/.gitignore b/.gitignore index ca0eaf47..bc42fc5d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,10 @@ input_reference.rds reference_azimuth.rds temp_computing_resources.rds tissue.rds +data_container_type.rds +sample_names.rds +temp_fx.rds +temp_gene_nomenclature.rds # Exclude pipeline and scripts directories and files pipeline_store pipeline_store.R @@ -28,3 +32,4 @@ fibrosis_data !README.md _target* dev +meta diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 8cb28ffa..5a8ed922 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -33,15 +33,6 @@ tranform_assay.HPCell = function( # deployment = "main" ) |> - # # Load data container type - # hpc_single("data_container_type_file", "data_container_type.rds", format = "file") |> - # - # hpc_single( - # target_output = "data_type", - # user_function = readRDS |> quote(), - # file = "data_container_type_file" |> is_target() - # ) |> - hpc_iterate( target_output = target_output, user_function = transform_utility |> quote() , @@ -95,7 +86,8 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, "anndata" = ".h5ad", "sce_hdf5" = "") file_name = paste0(file_name, extension) - file_name + # Return data as target instead of file_name pointer + input_read_RNA_assay } \ No newline at end of file diff --git a/tests/testthat/test-census-samples.R b/tests/testthat/test-census-samples.R index 1d19891b..9d9b2a5e 100644 --- a/tests/testthat/test-census-samples.R +++ b/tests/testthat/test-census-samples.R @@ -16,15 +16,15 @@ library(targets) library(stringr) directory = "~/cellxgene_curated/census_samples/anndata" store = "~/scratch/Census/census_reanalysis/census-run-samples" -files <- dir(glue("{directory}"), full.names = T) |> head(50) +files <- dir(glue("{directory}"), full.names = T) # results <- purrr::map_dfr(files, function(file_path) { # data <- zellkonverter::readH5AD(file_path, use_hdf5 = TRUE, reader = "R", verbose = TRUE) # # cell_number <- length(colnames(data)) # # -# file_size <- file.info(file_path)$size / 1073741824 -# +# file_size <- file.info(file_path)$size / 1024^3 +# # # nFeature_threshold # # tibble(file_name = file_path, @@ -32,15 +32,17 @@ files <- dir(glue("{directory}"), full.names = T) |> head(50) # file_size = file_size) # }) -#results |> saveRDS(glue("{store}/sample_tiers.rds")) -results <- readRDS(glue("{store}/sample_tiers.rds")) +#results <- readRDS(glue("{store}/sample_tiers.rds")) +results <- tar_read(results, store = glue("{store}/sample_tiers_dataframe_targets")) tiers_dataframe <- results |> mutate(file_name = file_name, file_size = round(file_size, 3), tier = case_when(cell_number < 6000 ~ "tier_1", - cell_number > 6000 & cell_number < 10000 ~ "tier_2", - cell_number > 10000 & cell_number < 20000 ~ "tier_3"), + cell_number > 6000 & cell_number <= 10000 ~ "tier_2", + cell_number > 10000 & cell_number < 20000 ~ "tier_3", + cell_number > 20000 & cell_number < 40000 ~ "tier_4", + cell_number > 40000 ~ "tier_5"), set_names = basename(file_name) |> stringr::str_remove("\\.h5ad$")) result_directory = "/vast/projects/cellxgene_curated/metadata_cellxgenedp_Apr_2024" @@ -121,27 +123,27 @@ df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_i )) -files <- results |> mutate(sample_2 = basename(file_name) |> tools::file_path_sans_ext()) |> +files <- results |> mutate(sample_2 = basename(file_name) |> stringr::str_remove("\\.h5ad$")) |> left_join(df, by = "sample_2") |> left_join(tiers_dataframe, by = c("sample_2"= "set_names")) |> select(-file_name.y, -cell_number.y, -file_size.y) |> rename(file_name = file_name.x, cell_number = cell_number.x, file_size = file_size.x) -file_list = files |> slice(21:50) -#files |> slice(21:50) |> pull(file_name) |> +file_list = files |> head(100) + file_list |> pull(file_name) |> initialise_hpc( gene_nomenclature = "ensembl", data_container_type = "anndata", - store = "~/scratch/Census/census_reanalysis/census-run-samples/pilot/", - debug_step = "annotation_tbl_tier_1_2c972bb65c135dbb", + store = "~/scratch/Census/census_reanalysis/census-run-samples/50samples_pilot/", + #debug_step = "empty_tbl_69e0f0d88e44d787", tier = file_list |> pull(tier), computing_resources = list( crew_controller_slurm( name = "tier_1", - slurm_memory_gigabytes_per_cpu = 15, + slurm_memory_gigabytes_per_cpu = 20, slurm_cpus_per_task = 1, workers = 50, tasks_max = 5, @@ -157,12 +159,29 @@ file_list |> pull(file_name) |> ), crew_controller_slurm( name = "tier_3", - slurm_memory_gigabytes_per_cpu = 45, + slurm_memory_gigabytes_per_cpu = 50, + slurm_cpus_per_task = 1, + workers = 50, + tasks_max = 5, + verbose = T + ), + crew_controller_slurm( + name = "tier_4", + slurm_memory_gigabytes_per_cpu = 100, + slurm_cpus_per_task = 1, + workers = 50, + tasks_max = 5, + verbose = T + ), + crew_controller_slurm( + name = "tier_5", + slurm_memory_gigabytes_per_cpu = 200, slurm_cpus_per_task = 1, workers = 50, tasks_max = 5, verbose = T - )) + ) + ) ) |> #tranform_assay(fx = purrr::map(1:20, ~identity), target_output = "sce_transformed") |> @@ -171,28 +190,28 @@ file_list |> pull(file_name) |> target_output = "sce_transformed") |> # Remove empty outliers based on RNA count threshold per cell - remove_empty_threshold(target_input = "data_object", RNA_feature_threshold = 200 ) |> + remove_empty_threshold(target_input = "sce_transformed", RNA_feature_threshold = 200 ) |> # Remove empty outliers - #remove_empty_DropletUtils(target_input = "data_object") |> + #remove_empty_DropletUtils(target_input = "sce_transformed") |> # Remove dead cells - remove_dead_scuttle(target_input = "data_object") |> + remove_dead_scuttle(target_input = "sce_transformed") |> # Score cell cycle - score_cell_cycle_seurat(target_input = "data_object") |> + score_cell_cycle_seurat(target_input = "sce_transformed") |> # Remove doublets - remove_doublets_scDblFinder(target_input = "data_object") |> + remove_doublets_scDblFinder(target_input = "sce_transformed") |> # Annotation - annotate_cell_type(target_input = "data_object", azimuth_reference = "pbmcref") |> + annotate_cell_type(target_input = "sce_transformed", azimuth_reference = "pbmcref") |> normalise_abundance_seurat_SCT(factors_to_regress = c( "subsets_Mito_percent", "subsets_Ribo_percent", "G2M.Score" - ), target_input = "data_object") + ), target_input = "sce_transformed") # calculate_pseudobulk(group_by = "monaco_first.labels.fine", target_input = "sce_transformed") |> # From 77c3aded80ed62633f6107ea2ca8b44563b119bb Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Thu, 5 Sep 2024 10:52:30 +1000 Subject: [PATCH 035/145] Update reports --- DESCRIPTION | 2 +- NAMESPACE | 1 - R/data.R | 28 +-- R/functions.R | 2 +- R/modules_grammar_hpc.R | 327 +++++++++++++++++-------- README.rmd | 17 +- inst/rmd/Empty_droplet_report.Rmd | 232 +++++++++--------- man/alive_identification.Rd | 3 +- man/annotation_label_transfer.Rd | 3 +- man/doublet_identification.Rd | 5 +- man/test_differential_abundance.Rd | 197 --------------- tests/testthat/test_single_functions.R | 14 +- 12 files changed, 381 insertions(+), 450 deletions(-) delete mode 100644 man/test_differential_abundance.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 399ec1d4..641fb39c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -29,7 +29,7 @@ Imports: tidyr, glue, stringr, - tidyseurat, + tidyseurat (>= 0.8.0), purrr, readr, patchwork, diff --git a/NAMESPACE b/NAMESPACE index 5c1f53f2..6f68ac43 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -54,7 +54,6 @@ export(seurat_to_ligand_receptor_count) export(split_summarized_experiment) export(test_differential_abundance_hpc) export(vector_to_code) -exportMethods(test_differential_abundance) import(SeuratObject) import(broom) import(crew) diff --git a/R/data.R b/R/data.R index 9fa03dca..a4aae8ed 100644 --- a/R/data.R +++ b/R/data.R @@ -29,18 +29,18 @@ #' "dummy_hpc" - -#' A data frame of Ensembl genes retrieved from biomaRt package -#' -#' @format A data frame map of ensembl_gene_id, external_gene_name and chromosome_name -#' -#' @usage -#' data(biomart_ensembl_genes) -#' -#' @source biomaRt getBM #' -#' @keywords datasets -#' -#' @docType data -#' @noRd -"biomart_ensembl_genes" \ No newline at end of file +#' #' A data frame of Ensembl genes retrieved from biomaRt package +#' #' +#' #' @format A data frame map of ensembl_gene_id, external_gene_name and chromosome_name +#' #' +#' #' @usage +#' #' data(biomart_ensembl_genes) +#' #' +#' #' @source biomaRt getBM +#' #' +#' #' @keywords datasets +#' #' +#' #' @docType data +#' #' @noRd +#' "biomart_ensembl_genes" \ No newline at end of file diff --git a/R/functions.R b/R/functions.R index 39bd695a..bdaa3f8c 100644 --- a/R/functions.R +++ b/R/functions.R @@ -855,7 +855,7 @@ preprocessing_output <- function(input_read_RNA_assay, # Filter dead cells left_join( alive_identification_tbl |> - select(.cell, any_of(c("alive", "subsets_Mito_percent", "subsets_Ribo_percent", "high_mitochondrion", "high_ribosome"))), + select(.cell, any_of(c("alive", "subsets_Mito_percent", "subsets_Mito_sum", "subsets_Ribo_percent", "high_mitochondrion", "high_ribosome"))), by = ".cell" ) |> filter(alive) |> diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index d0a55768..e04bae70 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -73,7 +73,6 @@ initialise_hpc <- function(input_hpc, input_hpc |> as.list() |> saveRDS("input_file.rds") gene_nomenclature |> saveRDS("temp_gene_nomenclature.rds") data_container_type |> saveRDS("data_container_type.rds") - computing_resources |> saveRDS("temp_computing_resources.rds") tiers = tier |> get_positions() @@ -182,6 +181,19 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N args_list <- lapply(args_list, eval, envir = parent.frame()) args_list$factory = function(tiers){ + report_params <- + list( + x1 = empty_droplets_tbl, + # x3 = doublet_identification_tbl_1, + # x4 = annotation_label_transfer_tbl_1, + # x5 = sample_column, + # x6 = pseudobulk_group_by, + x7 = report_output_path + ) |> quote() + # + report_output_path <- glue("{input_hpc$initialisation$store}/empty_droplet_report.html") + # modified_report_params <- substitute(report_params, list(report_output_path = report_output_path)) + list( tar_target_raw("total_RNA_count_check", readRDS("total_RNA_count_check.rds") |> quote(), deployment = "main"), @@ -194,16 +206,21 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N quote(), tiers, arguments_to_tier = "read_file" - ) , + ), factory_collapse( "my_report", do.call(bind_rows, empty_droplets_tbl) |> quote(), "empty_droplets_tbl", tiers, packages = c("dplyr") - ) + ), + tar_render( + name = empty_droplet_report, + path = paste0(system.file(package = "HPCell"), "/rmd/Empty_droplet_Report_HPC.Rmd"), + params = eval(report_params), + output_file = report_output_path + ) ) - } # We don't want recursive when we call factory @@ -408,7 +425,23 @@ remove_doublets_scDblFinder.HPCell = function(input_hpc) { args_list <- lapply(args_list, eval, envir = parent.frame()) args_list$factory = function(tiers){ + + # report_params <- + # list( + # x1 = input_read, + # x3 = doublet_identification_tbl_1, + # x4 = annotation_label_transfer_tbl_1, + # x5 = sample_column, + # x6 = pseudobulk_group_by, + # x7 = report_output_path + # ) |> quote() + # + # report_output_path <- glue("{input_hpc$initialisation$store}/external") + # modified_report_params <- substitute(report_params, list(report_output_path = report_output_path)) + list( + # tar_target_raw("pseudobulk_group_by", pseudobulk_group_by, deployment = "main") , + factory_split( "doublet_identification_tbl", read_file |> read_data_container(container_type = data_container_type) |> @@ -419,18 +452,23 @@ remove_doublets_scDblFinder.HPCell = function(input_hpc) { ) |> quote(), tiers, arguments_to_tier = "read_file", other_arguments_to_tier = c("empty_droplets_tbl", "alive_identification_tbl", - "annotation_label_transfer_tbl"), - other_arguments_to_map = c("empty_droplets_tbl", "alive_identification_tbl", + "annotation_label_transfer_tbl"), + other_arguments_to_map = c("empty_droplets_tbl", "alive_identification_tbl", "annotation_label_transfer_tbl") ), factory_collapse( "my_report4", - bind_rows(doublet_identification_tbl) |> quote(), + bind_rows(doublet_identification_tbl) |> quote(), "doublet_identification_tbl", tiers, packages = c("dplyr") ) - ) + # tar_render( + # name = doublet_identification_report, + # path = paste0(system.file(package = "HPCell"), "/rmd/Doublet_identification_report.Rmd"), + # params = eval(modified_report_params), + # output_file = report_output_path + ) } @@ -646,7 +684,6 @@ calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL) { cell_cycle_score_tbl, annotation_label_transfer_tbl, doublet_identification_tbl, - x = pseudobulk_group_by, external_path = e ) |> @@ -702,110 +739,109 @@ calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL) { add_class("HPCell") } -#' Test Differential Abundance for HPCell -#' -#' This function tests differential abundance for HPCell objects. -#' -#' @name test_differential_abundance,HPCell-method -#' @rdname test_differential_abundance -#' @inherit tidybulk::test_differential_abundance -#' -#' @importFrom tidybulk test_differential_abundance -#' @exportMethod test_differential_abundance -#' @param .data An HPCell object. -#' @param .formula A formula used to model the design matrix. -#' @param .sample Sample parameter. -#' @param .transcript Transcript parameter. -#' @param .abundance Abundance parameter. -#' @param contrasts Contrasts parameter. -#' @param method Method parameter, default is "edgeR_quasi_likelihood". -#' @param test_above_log2_fold_change Test above log2 fold change. -#' @param scaling_method Scaling method, default is "TMM". -#' @param omit_contrast_in_colnames Omit contrast in column names. -#' @param prefix Prefix parameter. -#' @param action Action parameter, default is "add". -#' @param ... Additional parameters. -#' @param significance_threshold Significance threshold. -#' @param fill_missing_values Fill missing values. -#' @param .contrasts Contrasts parameter. -#' @return The result of the differential abundance test. -#' -setMethod( - "test_differential_abundance", - signature(.data = "HPCell"), - function(.data, .formula, .sample = NULL, .transcript = NULL, - .abundance = NULL, contrasts = NULL, method = "edgeR_quasi_likelihood", - test_above_log2_fold_change = NULL, scaling_method = "TMM", - omit_contrast_in_colnames = FALSE, prefix = "", action = "add", factor_of_interest = NULL, - ..., significance_threshold = NULL, fill_missing_values = NULL, - .contrasts = NULL) { - - # Capture all arguments including defaults - args_list <- as.list(environment())[-1] - - # Optionally, you can evaluate the arguments if they are expressions - args_list <- lapply(args_list, eval, envir = parent.frame()) - - args_list$factory = function(tiers, .formula, factor_of_interest = NULL, .abundance = NULL){ - - if(.formula |> deparse() |> str_detect("\\|")) - factory_de_random_effect( - se_list_input = "create_pseudobulk_sample", - output_se = "de", - formula=.formula, - #method="edger_robust_likelihood_ratio", - tiers = tiers, - factor_of_interest = factor_of_interest, - .abundance = .abundance - ) - - else - factory_de_fix_effect( - se_list_input = "create_pseudobulk_sample", - output_se = "de", - formula=.formula, - method="edger_robust_likelihood_ratio", - tiers = tiers, - factor_of_interest = factor_of_interest, - .abundance = .abundance - ) - - } - - # We don't want recursive when we call factory - if(.data |> length() > 0) { - - environment(.formula) <- new.env(parent = emptyenv()) - - tar_tier_append( - quote(dummy_hpc |> test_differential_abundance() %$% test_differential_abundance %$% factory), - tiers = .data$initialisation$tier |> get_positions() , - script = glue("{.data$initialisation$store}.R"), - .formula = .formula, - factor_of_interest = factor_of_interest, - .abundance = .abundance - ) - - } - - - .data |> - c(list(test_differential_abundance = args_list)) |> - add_class("HPCell") - - } -) - +#' #' Test Differential Abundance for HPCell +#' #' +#' #' This function tests differential abundance for HPCell objects. +#' #' +#' #' @name test_differential_abundance,HPCell-method +#' #' @rdname test_differential_abundance +#' #' @inherit tidybulk::test_differential_abundance +#' #' +#' #' @importFrom tidybulk test_differential_abundance +#' #' @exportMethod test_differential_abundance +#' #' @param .data An HPCell object. +#' #' @param .formula A formula used to model the design matrix. +#' #' @param .sample Sample parameter. +#' #' @param .transcript Transcript parameter. +#' #' @param .abundance Abundance parameter. +#' #' @param contrasts Contrasts parameter. +#' #' @param method Method parameter, default is "edgeR_quasi_likelihood". +#' #' @param test_above_log2_fold_change Test above log2 fold change. +#' #' @param scaling_method Scaling method, default is "TMM". +#' #' @param omit_contrast_in_colnames Omit contrast in column names. +#' #' @param prefix Prefix parameter. +#' #' @param action Action parameter, default is "add". +#' #' @param ... Additional parameters. +#' #' @param significance_threshold Significance threshold. +#' #' @param fill_missing_values Fill missing values. +#' #' @param .contrasts Contrasts parameter. +#' #' @return The result of the differential abundance test. +#' #' +#' setMethod( +#' "test_differential_abundance", +#' signature(.data = "HPCell"), +#' function(.data, .formula, .sample = NULL, .transcript = NULL, +#' .abundance = NULL, contrasts = NULL, method = "edgeR_quasi_likelihood", +#' test_above_log2_fold_change = NULL, scaling_method = "TMM", +#' omit_contrast_in_colnames = FALSE, prefix = "", action = "add", factor_of_interest = NULL, +#' ..., significance_threshold = NULL, fill_missing_values = NULL, +#' .contrasts = NULL) { +#' +#' # Capture all arguments including defaults +#' args_list <- as.list(environment())[-1] +#' +#' # Optionally, you can evaluate the arguments if they are expressions +#' args_list <- lapply(args_list, eval, envir = parent.frame()) +#' +#' args_list$factory = function(tiers, .formula, factor_of_interest = NULL, .abundance = NULL){ +#' +#' if(.formula |> deparse() |> str_detect("\\|")) +#' factory_de_random_effect( +#' se_list_input = "create_pseudobulk_sample", +#' output_se = "de", +#' formula=.formula, +#' #method="edger_robust_likelihood_ratio", +#' tiers = tiers, +#' factor_of_interest = factor_of_interest, +#' .abundance = .abundance +#' ) +#' +#' else +#' factory_de_fix_effect( +#' se_list_input = "create_pseudobulk_sample", +#' output_se = "de", +#' formula=.formula, +#' method="edger_robust_likelihood_ratio", +#' tiers = tiers, +#' factor_of_interest = factor_of_interest, +#' .abundance = .abundance +#' ) +#' +#' } +#' +#' # We don't want recursive when we call factory +#' if(.data |> length() > 0) { +#' +#' environment(.formula) <- new.env(parent = emptyenv()) +#' +#' tar_tier_append( +#' quote(dummy_hpc |> test_differential_abundance() %$% test_differential_abundance %$% factory), +#' tiers = .data$initialisation$tier |> get_positions() , +#' script = glue("{.data$initialisation$store}.R"), +#' .formula = .formula, +#' factor_of_interest = factor_of_interest, +#' .abundance = .abundance +#' ) +#' +#' } +#' +#' +#' .data |> +#' c(list(test_differential_abundance = args_list)) |> +#' add_class("HPCell") +#' +#' } +#' ) +#' #' @export preprocessing_output_factory = function(tiers){ - - + args_list <- as.list(environment())[-1] list( factory_split( "preprocessing_output_S", - read_file |> + command = {read_file |> read_data_container(container_type = data_container_type) |> preprocessing_output(empty_droplets_tbl, non_batch_variation_removal_S, @@ -813,7 +849,20 @@ preprocessing_output_factory = function(tiers){ cell_cycle_score_tbl, annotation_label_transfer_tbl, doublet_identification_tbl) |> - quote(), + # + # tar_render( + # name = empty_droplets_report, + # path = paste0(system.file(package = "HPCell"), "/rmd/Empty_droplet_report.Rmd"), + # params = list(x1 = empty_droplets_tbl + # # x2 = empty_droplets_tbl, + # # x3 = annotation_label_transfer_tbl + # # x4 = tar_read(unique_tissues, store = store), + # # x5 = sample_column |> quo_name() + # ), + # output_file = substitute(env = list(e = external_path)) + # ) + quote() + }, tiers, arguments_to_tier = "read_file", other_arguments_to_tier = c("empty_droplets_tbl", @@ -835,6 +884,61 @@ preprocessing_output_factory = function(tiers){ } + + # + # factory_collapse( + # "colapsed_preprocessing_output", + # bind_rows(preprocessing_output_S) , + # "preprocessing_output_S", + # tiers + # ), + # + # tar_render( + # name = preprocessing_report, + # path = paste0(system.file(package = "HPCell"), "/rmd/preprocessing_report.Rmd"), + # params = list( + # x1 = collapsed_preprocessing_output, + # x2 = group_by|> quo_name() + # ) + # ) + + +#' generate_report = function(tiers){ +#' +#' list( +#' factory_split( +#' "final_report", +#' command = {read_file |> +#' read_data_container(container_type = data_container_type) |> + # tar_render( + # name = empty_droplets_report, + # path = paste0(system.file(package = "HPCell"), "/rmd/Empty_droplet_report.Rmd"), + # params = list(x1 = empty_droplets_tbl, + # # x2 = empty_droplets_tbl, + # # x3 = annotation_label_transfer_tbl + # # x4 = tar_read(unique_tissues, store = store), + # # x5 = sample_column |> quo_name() + # )) |> +#' quote() +#' }, +#' tiers, +#' arguments_to_tier = "read_file", +#' other_arguments_to_tier = c("empty_droplets_tbl" +#' # "annotation_label_transfer_tbl", +#' # "doublet_identification_tbl"), +#' ), +#' other_arguments_to_map = c("empty_droplets_tbl" +#' # "annotation_label_transfer_tbl", +#' # "doublet_identification_tbl") +#' ) +#' ) +#' +#' ) +#' +#' } + + + # Define the generic function #' @export evaluate_hpc <- function(input_hpc) { @@ -901,6 +1005,15 @@ evaluate_hpc.HPCell = function(input_hpc) { glue("{input_hpc$initialisation$store}.R") ) + #-----------------------# + # Reports + #-----------------------# + # tar_tier_append( + # quote(generate_report), + # input_hpc$initialisation$tier |> get_positions() , + # glue("{input_hpc$initialisation$store}.R") + # ) + #-----------------------# # Close pipeline #-----------------------# diff --git a/README.rmd b/README.rmd index 5c41d298..59653096 100644 --- a/README.rmd +++ b/README.rmd @@ -39,7 +39,7 @@ library(SeuratData) options(Seurat.object.assay.version = "v5") input_seurat <- - LoadData("pbmc3k") |> + LoadPBMCData("pbmc3k") |> _[,1:500] file_path = tempfile() @@ -52,15 +52,18 @@ input_hpc = magrittr::set_names(c("pbmc3k1_1", "pbmc3k1_2")) ## Test with fibrosis samples -input_hpc = - c("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds", "~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds") |> - magrittr::set_names(c("GSM3489182", "THD0001")) +# input_hpc = +# c("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds", "~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds") |> +# magrittr::set_names(c("GSM3489182", "THD0001")) input_hpc = c("~/HPCell/fibrosis_data_modified/input1", "~/HPCell/fibrosis_data_modified/input2") |> magrittr::set_names(c("GSM3489182", "THD0001")) - +# PBMC dataset +input_hpc = + c("~/HPCell/pbmc_data/pbmc_data_500") |> + magrittr::set_names(c("pbmc3k")) ``` Local parallel computing @@ -88,8 +91,8 @@ input_hpc |> "subsets_Mito_percent", "subsets_Ribo_percent", "G2M.Score" - )) |> - calculate_pseudobulk(group_by = c("sampleName")) + )) +# calculate_pseudobulk(group_by = c("sampleName")) ``` SLURM HPC parallel computing diff --git a/inst/rmd/Empty_droplet_report.Rmd b/inst/rmd/Empty_droplet_report.Rmd index 20ca7956..b278813b 100644 --- a/inst/rmd/Empty_droplet_report.Rmd +++ b/inst/rmd/Empty_droplet_report.Rmd @@ -46,7 +46,7 @@ library(S4Vectors) # Subsetting tissues in input data # unique_tissues <- unique(input_seurat_abc@meta.data$Tissue) -assay = params$x1[[1]]@assays |> names() |> extract2(1) +# assay = params$x1[[1]]@assays |> names() |> extract2(1) # Subset 2 tissues (sample types) # heart <- subset(input_seurat, subset = Tissue == "Heart") # trachea <- subset(input_seurat, subset = Tissue == "Trachea") @@ -99,35 +99,42 @@ assay = params$x1[[1]]@assays |> names() |> extract2(1) # return(params$x1[[i]][[1]][[1]]) # }) # sample_names -process_input<- function(input_seurat) { - input<- input_seurat@meta.data |> - tibble::rownames_to_column(var = '.cell') - return(input) -} -processed_input_list <- map(params$x1, process_input) # Defining Tissue names # sample_names <- lapply(params$x1, function(seurat_obj) { # seurat_obj |> pull(params$x5) # }) -sample_names<- params$x4 +# sample_names<- params$x4 # sample_names<- unlist(sample_names) + +process_input<- function(input_metadata) { + input<- input_metadata |> + # input_seurat@meta.data |> + tibble::rownames_to_column(var = '.cell') + return(input) +} +processed_input_list <- map(input_meta_data_list, process_input) +unique_samples_list <- map(preprocessed_metadata_list, ~ .x |> magrittr::extract2(sample_column) |> unique()) +preprocessed_metadata_list +sample_column<- "sampleName" ``` ## Barcode rank plot ```{r echo=FALSE, message=FALSE, warning=FALSE} +# names(empty_droplets_tbl_list) <- unique_samples_list # Process empty droplets data -empty_df <- function(input_seurat, empty_droplets_tbl) { - input <- input_seurat@meta.data |> +empty_df <- function(input_metadata, empty_droplets_tbl) { + input <- input_metadata |> + # input_seurat@meta.data |> tibble::rownames_to_column(var = '.cell') joined_data <- empty_droplets_tbl |> - left_join(input |> dplyr::select(.cell, params$x5), by = '.cell') + left_join(input |> dplyr::select(.cell, !!sample_column), by = '.cell') # Create a data frame with plotting information plot_data <- data.frame( x = joined_data$rank, - y = joined_data$total, + y = joined_data$Total, rank = joined_data$rank, inflection = joined_data$inflection, knee = joined_data$knee, @@ -135,17 +142,18 @@ empty_df <- function(input_seurat, empty_droplets_tbl) { empty = joined_data$empty_droplet, FDR = joined_data$FDR, Total = joined_data$Total, - PValue = joined_data$PValue + PValue = joined_data$PValue, + sample_name = joined_data |> extract2({{sample_column}}) ) return(plot_data) } -process_empty_droplet_list <- purrr::map2(params$x1, params$x2, empty_df) +process_empty_droplet_list <- purrr::map2(input_meta_data_list, empty_droplets_tbl_list, empty_df) # Combined tibble with an identifier for each tissue/sample -combined_df <- bind_rows(process_empty_droplet_list, .id = "tissue_id") %>% - mutate(tissue_id = factor(tissue_id, labels = params$x4)) +combined_df <- bind_rows(process_empty_droplet_list) + # mutate(tissue_id = factor(!!sample_column, labels = unique_samples_list)) # Generate plot plot <- ggplot(combined_df, aes(x = x, y = y)) + @@ -158,10 +166,10 @@ plot <- ggplot(combined_df, aes(x = x, y = y)) + scale_linetype_manual(values = c("knee" = "dashed", "inflection" = "dashed"), guide = guide_legend(override.aes = list(color = c("forestgreen", "red"))) ) + - facet_wrap(~tissue_id, scales = "free") + + facet_wrap(~sample_name, scales = "free") + theme_minimal() + labs(x = "Barcodes", y = "Total UMI count", color = "Legend") + - theme(legend.position = "bottom") # Adjust legend position as needed + theme(legend.position = "bottom") print(plot) ``` @@ -172,7 +180,7 @@ print(plot) empty_count <- function(df) { # Count the TRUE and FALSE values in the empty_droplet column tibble <- df %>% - group_by(tissue_id) %>% + group_by(sample_name) %>% summarise( Empty_count = sum(empty == TRUE), Cell_count = sum(empty == FALSE) @@ -190,7 +198,7 @@ empty_count_results empty_table <- function(df) { # Count the TRUE and FALSE values in the empty_droplet column tibble <- df %>% - group_by(tissue_id) %>% + group_by(sample_name) %>% summarise( "Number: True cells (FDR<0.001)" = sum(FDR < 0.001, na.rm = TRUE), # Count of FDR values less than 0.001 "Proportion: True cells (FDR<0.001)" = mean(FDR < 0.001, na.rm = TRUE) # Proportion of FDR values less than 0.001 @@ -201,21 +209,21 @@ empty_count_results <- empty_table(combined_df) empty_count_results ``` - - - - - - - - - - - - - - - +## Count of cells vs empty droplets +```{r, warning=FALSE, message=FALSE, echo=FALSE} +count <- function(df) { + # is.cell <- df$FDR <= 0.001 + tibble<- df %>% + group_by(sample_name) %>% + summarise( + Cells = sum(FDR, na.rm = TRUE), # Count of TRUE values, NA values removed + Empty_droplets = sum(!FDR, na.rm = TRUE) # Count of FALSE values, NA values removed + ) + return(tibble) +} +count_results <- count(combined_df) +count_results +``` ## Histogram of p-values: (only if empty droplets have been identified) @@ -226,7 +234,7 @@ empty_count_results hist_p_val <- function(df) { if(df |> dplyr::filter(empty) |> nrow() != 0){ df_filtered <- df %>% - group_by(tissue_id) %>% + group_by(sample_name) %>% dplyr::filter(empty) %>% mutate(Total_quantile = quantile(Total[Total > 0], 0.1)) %>% dplyr::filter(Total <= Total_quantile & Total > 0) %>% @@ -234,7 +242,7 @@ hist_p_val <- function(df) { plot_hist <- ggplot(df_filtered, aes(x = PValue)) + geom_histogram(binwidth = 0.2, fill = "cornflowerblue", color = "grey") + - facet_wrap(~ tissue_id) + + facet_wrap(~ sample_name) + labs(x = "P-value", y = "Frequency") + ggtitle("Droplets with 0 < libsize <= 10th Percentile of Total per Tissue") + theme_minimal() @@ -250,83 +258,83 @@ plot_hist - The X-axis is on a logarithmic scale and represents the total count of RNA sequencing reads per cell, while the Y-axis shows the percentage of those reads that are mitochondrial. Each point on the plot represents a single cell. -```{r, warning=FALSE, message=FALSE, echo=FALSE} -plot_mito_data <- function(input_seurat, tissue_name, annotation_labels){ - #browser() - rna_counts <- GetAssayData(input_seurat, layer = "counts", assay=assay) - which_mito = rownames(input_seurat) |> str_which("^MT") - # Compute per-cell QC metrics - qc_metrics <- perCellQCMetrics(rna_counts, subsets=list(Mito=which_mito)) %>% - as_tibble(rownames = ".cell") %>% - dplyr::select(-sum, -detected) - - #Identify mitochondrial content - # mitochondrion <- qc_metrics %>% - # left_join(annotation_labels, by = ".cell") %>% - # nest(data = -blueprint_first.labels.fine) %>% - # mutate(data = map(data, ~ .x %>% - # mutate(high_mitochondrion = isOutlier(subsets_Mito_percent, type="higher"), - # high_mitochondrion = as.logical(high_mitochondrion)))) %>% - # unnest(cols = data) - mitochondrion <- qc_metrics %>% - left_join(annotation_labels, by = ".cell") %>% - mutate(high_mitochondrion = isOutlier(subsets_Mito_percent, type="higher")) %>% - mutate(high_mitochondrion = as.logical(high_mitochondrion), - tissue_name = tissue_name) %>% - group_by(tissue_name) %>% - mutate( - discard = isOutlier(subsets_Mito_percent, type = "higher"), - threshold = attr(discard, "threshold")["higher"] - ) %>% - ungroup() - - # discard <- isOutlier(mitochondrion$subsets_Mito_percent, type = "higher") - # threshold <- attr(discard, "threshold")["higher"] - plot_mito <- data.frame( - tissue_name = tissue_name, - # qc_metrics = qc_metrics, - # mitochondrion = mitochondrion, - discard = as.logical(mitochondrion$discard), - threshold = mitochondrion$threshold, - high_mitochondrion = mitochondrion$high_mitochondrion, - subsets_Mito_sum = mitochondrion$subsets_Mito_sum, - subsets_Mito_percent = mitochondrion$subsets_Mito_percent - ) - return(plot_mito) -} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -all_data <- lapply(seq_along(params$x1), function(i) { - plot_mito_data(params$x1[[i]], sample_names[[i]], params$x3[[i]]) -}) - -# Combine all data into a single tibble -combined_plot_mito_data <- bind_rows(all_data) - -plot_each_sample <- function(combined_plot_mito_data) { - # browser() - num_tissues <- length(unique(combined_plot_mito_data$tissue_name)) - plot <- ggplot(combined_plot_mito_data, aes(x = subsets_Mito_sum, y = subsets_Mito_percent)) + - facet_wrap(~ tissue_name) + - geom_point(aes(color = combined_plot_mito_data$high_mitochondrion), alpha = 0.5) + - scale_x_log10() + - geom_hline(yintercept = combined_plot_mito_data$threshold, color = "red", linetype = "dashed") + - labs(x = "Total count", y = "Mitochondrial %", - title = paste("Percentage library size vs library size with", num_tissues, "tissue types"), - color = "High mitochondrial percentage") + - theme_minimal() - - # unique_tissues <- unique(combined_plot_mito_data$tissue_name) - # for(tissue in unique_tissues) { - # tissue_data <- combined_plot_mito_data[combined_plot_mito_data$tissue_name == tissue,] - # threshold_value <- unique(tissue_data$threshold) # assuming there's one threshold per tissue - # plot <- plot + geom_hline(data = tissue_data, aes(yintercept = threshold_value), color = "red", linetype = "dashed") - # - # } - return(plot) -} -plot_each_sample(combined_plot_mito_data) + + + -``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/man/alive_identification.Rd b/man/alive_identification.Rd index c6f4a5f5..78af40ef 100644 --- a/man/alive_identification.Rd +++ b/man/alive_identification.Rd @@ -9,8 +9,7 @@ alive_identification( empty_droplets_tbl, annotation_label_transfer_tbl = NULL, annotation_column = NULL, - assay = NULL, - gene_nomenclature + assay = NULL ) } \arguments{ diff --git a/man/annotation_label_transfer.Rd b/man/annotation_label_transfer.Rd index 6331c2dc..912fcc9a 100644 --- a/man/annotation_label_transfer.Rd +++ b/man/annotation_label_transfer.Rd @@ -8,8 +8,7 @@ annotation_label_transfer( input_read_RNA_assay, empty_droplets_tbl, reference_azimuth = NULL, - assay = NULL, - gene_nomenclature + assay = NULL ) } \arguments{ diff --git a/man/doublet_identification.Rd b/man/doublet_identification.Rd index 36e326e5..879c3010 100644 --- a/man/doublet_identification.Rd +++ b/man/doublet_identification.Rd @@ -8,7 +8,6 @@ doublet_identification( input_read_RNA_assay, empty_droplets_tbl, alive_identification_tbl, - annotation_label_transfer_tbl, assay = NULL ) } @@ -19,10 +18,10 @@ doublet_identification( \item{alive_identification_tbl}{A tibble identifying alive cells.} -\item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} - \item{assay}{Name of the assay to use.} +\item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} + \item{reference_label_fine}{Optional reference label for fine-tuning.} } \value{ diff --git a/man/test_differential_abundance.Rd b/man/test_differential_abundance.Rd deleted file mode 100644 index 071ee447..00000000 --- a/man/test_differential_abundance.Rd +++ /dev/null @@ -1,197 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/modules_grammar_hpc.R -\name{test_differential_abundance,HPCell-method} -\alias{test_differential_abundance,HPCell-method} -\title{Test Differential Abundance for HPCell} -\usage{ -\S4method{test_differential_abundance}{HPCell}( - .data, - .formula, - .sample = NULL, - .transcript = NULL, - .abundance = NULL, - contrasts = NULL, - method = "edgeR_quasi_likelihood", - test_above_log2_fold_change = NULL, - scaling_method = "TMM", - omit_contrast_in_colnames = FALSE, - prefix = "", - action = "add", - factor_of_interest = NULL, - ..., - significance_threshold = NULL, - fill_missing_values = NULL, - .contrasts = NULL -) -} -\arguments{ -\item{.data}{An HPCell object.} - -\item{.formula}{A formula used to model the design matrix.} - -\item{.sample}{Sample parameter.} - -\item{.transcript}{Transcript parameter.} - -\item{.abundance}{Abundance parameter.} - -\item{contrasts}{Contrasts parameter.} - -\item{method}{Method parameter, default is "edgeR_quasi_likelihood".} - -\item{test_above_log2_fold_change}{Test above log2 fold change.} - -\item{scaling_method}{Scaling method, default is "TMM".} - -\item{omit_contrast_in_colnames}{Omit contrast in column names.} - -\item{prefix}{Prefix parameter.} - -\item{action}{Action parameter, default is "add".} - -\item{...}{Additional parameters.} - -\item{significance_threshold}{Significance threshold.} - -\item{fill_missing_values}{Fill missing values.} - -\item{.contrasts}{Contrasts parameter.} -} -\value{ -The result of the differential abundance test. -} -\description{ -This function tests differential abundance for HPCell objects. -} -\details{ -`r lifecycle::badge("maturing")` - -This function provides the option to use edgeR \url{https://doi.org/10.1093/bioinformatics/btp616}, limma-voom \url{https://doi.org/10.1186/gb-2014-15-2-r29}, limma_voom_sample_weights \url{https://doi.org/10.1093/nar/gkv412} or DESeq2 \url{https://doi.org/10.1186/s13059-014-0550-8} to perform the testing. -All methods use raw counts, irrespective of if scale_abundance or adjust_abundance have been calculated, therefore it is essential to add covariates such as batch effects (if applicable) in the formula. - -Underlying method for edgeR framework: - - .data |> - - # Filter -keep_abundant( - factor_of_interest = !!(as.symbol(parse_formula(.formula)[1])), - minimum_counts = minimum_counts, - minimum_proportion = minimum_proportion - ) |> - - # Format - select(!!.transcript,!!.sample,!!.abundance) |> - spread(!!.sample,!!.abundance) |> - as_matrix(rownames = !!.transcript) %>% - - # edgeR - edgeR::DGEList(counts = .) |> - edgeR::calcNormFactors(method = scaling_method) |> - edgeR::estimateDisp(design) |> - - # Fit - edgeR::glmQLFit(design) |> // or glmFit according to choice - edgeR::glmQLFTest(coef = 2, contrast = my_contrasts) // or glmLRT according to choice - - - -Underlying method for DESeq2 framework: - -keep_abundant( - factor_of_interest = !!as.symbol(parse_formula(.formula)[[1]]), - minimum_counts = minimum_counts, - minimum_proportion = minimum_proportion -) |> - -# DESeq2 -DESeq2::DESeqDataSet(design = .formula) |> -DESeq2::DESeq() |> -DESeq2::results() - - - -Underlying method for glmmSeq framework: - -counts = -.data %>% - assay(my_assay) - -# Create design matrix for dispersion, removing random effects -design = - model.matrix( - object = .formula |> lme4::nobars(), - data = metadata - ) - -dispersion = counts |> edgeR::estimateDisp(design = design) %$% tagwise.dispersion |> setNames(rownames(counts)) - - glmmSeq( .formula, - countdata = counts , - metadata = metadata |> as.data.frame(), - dispersion = dispersion, - progress = TRUE, - method = method |> str_remove("(?i)^glmmSeq_" ), - ) -} -\examples{ -# edgeR - - tidybulk::se_mini |> - identify_abundant() |> - test_differential_abundance( ~ condition ) - - # The function `test_differential_abundance` operates with contrasts too - - tidybulk::se_mini |> - identify_abundant(factor_of_interest = condition) |> - test_differential_abundance( - ~ 0 + condition, - contrasts = c( "conditionTRUE - conditionFALSE") - ) - - # DESeq2 - equivalent for limma-voom - -my_se_mini = tidybulk::se_mini -my_se_mini$condition = factor(my_se_mini$condition) - -# demontrating with `fitType` that you can access any arguments to DESeq() -my_se_mini |> - identify_abundant(factor_of_interest = condition) |> - test_differential_abundance( ~ condition, method="deseq2", fitType="local") - -# testing above a log2 threshold, passes along value to lfcThreshold of results() -res <- my_se_mini |> - identify_abundant(factor_of_interest = condition) |> - test_differential_abundance( ~ condition, method="deseq2", - fitType="local", - test_above_log2_fold_change=4 ) - -# Use random intercept and random effect models - - se_mini[1:50,] |> - identify_abundant(factor_of_interest = condition) |> - test_differential_abundance( - ~ condition + (1 + condition | time), - method = "glmmseq_lme4", cores = 1 - ) - -# confirm that lfcThreshold was used -\dontrun{ - res |> - mcols() |> - DESeq2::DESeqResults() |> - DESeq2::plotMA() -} - -# The function `test_differential_abundance` operates with contrasts too - - my_se_mini |> - identify_abundant() |> - test_differential_abundance( - ~ 0 + condition, - contrasts = list(c("condition", "TRUE", "FALSE")), - method="deseq2", - fitType="local" - ) -} diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 6fd26a68..c691363a 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -460,9 +460,9 @@ library(crew.cluster) # library(Seurat) # library(SeuratData) # options(Seurat.object.assay.version = "v5") -# input_seurat <- -# LoadData("pbmc3k") |> -# _[,1:500] +input_seurat <- + LoadData("pbmc3k") |> + _[,1:500] # # change_seurat_counts = function(data){ # @@ -572,5 +572,13 @@ c("dev/input_seurat_treated_1_SCE.rds", test_differential_abundance(~ age_days + (1|collection_id), .abundance="counts") #test_differential_abundance(~ age_days, .abundance="counts") +store <- "~/HPCell/_targets_1" +preprocessing_output_2<- c(tar_read(preprocessing_output_S_1_9d3f5f7bf0d99f4d, store = store), tar_read(preprocessing_output_S_1_b1e2c51e3268decc, store = store)) +preprocessed_metadata_list <- lapply(preprocessing_output_2, function(x) x@meta.data) +input_data <- c(readRDS("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds"), readRDS("~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds")) +input_meta_data_list <- list(input_data[[1]]@meta.data, input_data[[2]]@meta.data) +empty_droplets_tbl_list<- list(tar_read(empty_droplets_tbl_1_90db523aa8824c48, store = store), tar_read(empty_droplets_tbl_1_16cf021f56ae67e1, store = store)) +annotation_label_transfer_list <- list(tar_read("annotation_label_transfer_tbl_1_0bf95fdfad97d473", store = store), tar_read("annotation_label_transfer_tbl_1_61b90f7f73a315eb", store = store)) +store<- "/vast/scratch/users/si.j/store_HPC1" From 371384171f7de2051e8091ee5b5194ee139097c2 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Thu, 5 Sep 2024 11:04:03 +1000 Subject: [PATCH 036/145] transform assays --- R/tranform_assay.R | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 R/tranform_assay.R diff --git a/R/tranform_assay.R b/R/tranform_assay.R new file mode 100644 index 00000000..43982d0d --- /dev/null +++ b/R/tranform_assay.R @@ -0,0 +1,76 @@ +# Define the generic function +#' @export +tranform_assay <- function(input_hpc, fx = input_hpc$initialisation$input_hpc |> map(~identity), target_input = "data_object", target_output = "sce_transformed", ...) { + UseMethod("tranform_assay") +} + +#' @importFrom purrr map +#' +#' @export +tranform_assay.HPCell = function( + input_hpc, + + # This might be carrying the environment + fx = input_hpc$initialisation$input_hpc |> map(~identity), + target_input = "data_object", + target_output = "sce_transformed", + ... + ) { + + fx |> saveRDS("temp_fx.rds") + + input_hpc |> + + hpc_iterate( + target_output = "transform", + user_function = readRDS |> quote() , + file = "temp_fx.rds" + # , + # iteration = "list", + # deployment = "main" + ) |> + + hpc_iterate( + target_output = target_output, + user_function = transform_utility |> quote() , + input_read_RNA_assay = as.name(target_input), + transform_fx = transform |> quote() , + external_path = glue("{input_hpc$initialisation$store}/external") + ) + +} + +#' Apply a transformation to an assay and save as HDF5 +#' +#' This function applies a specified transformation to the assay of a +#' SummarizedExperiment object and saves the transformed object in HDF5 format. +#' +#' @param input_read_RNA_assay A SummarizedExperiment object to be transformed. +#' @param transform A function to apply to the assay of the SummarizedExperiment object. +#' @param external_path A character string specifying the directory path to save the transformed object. +#' +#' @return The function does not return an object. It saves the transformed SummarizedExperiment object to the specified path. +#' +#' @importFrom SummarizedExperiment assay assay<- +#' @importFrom glue glue +#' @importFrom tools digest +#' @importFrom HDF5Array saveHDF5SummarizedExperiment +#' +#' @export +transform_utility = function(input_read_RNA_assay, transform_fx, external_path) { + #input_read_RNA_assay = input_read_RNA_assay |> read_data_container(container_type = data_container_type) + + dir.create(external_path, showWarnings = FALSE, recursive = TRUE) + file_name = glue("{external_path}/{digest(input_read_RNA_assay)}") + + assay(input_read_RNA_assay) = assay(input_read_RNA_assay) |> transform_fx() + + input_read_RNA_assay |> + saveHDF5SummarizedExperiment( + dir = file_name, + replace=TRUE, + as.sparse=TRUE + ) + + file_name +} From 4b69ff18dfcf766b7ce2f82bf98fb068da31e004 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Thu, 5 Sep 2024 12:27:43 +1000 Subject: [PATCH 037/145] loadPBMC --- R/modules_grammar_hpc.R | 3 ++- README.rmd | 23 ++++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index a41a3c9a..9e90e1ee 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -615,7 +615,8 @@ evaluate_hpc.HPCell = function(input_hpc) { # Empty droplets #-----------------------# - if(! "empty_tbl" %in% names(input_hpc)) + if( + ! "empty_tbl" %in% names(input_hpc)) target_chunk_undefined_remove_empty_DropletUtils(input_hpc) #-----------------------# diff --git a/README.rmd b/README.rmd index 4c83a8c5..fdcc4574 100644 --- a/README.rmd +++ b/README.rmd @@ -58,7 +58,8 @@ library(SeuratData) options(Seurat.object.assay.version = "v5") input_seurat <- - LoadPBMCData("pbmc3k") |> + # LoadPBMCData("pbmc3k") |> + LoadData("pbmc3k") |> _[,1:500] file_path = "~/temp_seurat.rds" @@ -75,14 +76,14 @@ input_hpc = # c("~/HPCell/fibrosis_data/GSE122960___GSM3489182.rds", "~/HPCell/fibrosis_data/GSE135893_cHP___THD0001.rds") |> # magrittr::set_names(c("GSM3489182", "THD0001")) -input_hpc = - c("~/HPCell/fibrosis_data_modified/input1", "~/HPCell/fibrosis_data_modified/input2") |> - magrittr::set_names(c("GSM3489182", "THD0001")) +# input_hpc = +# c("~/HPCell/fibrosis_data_modified/input1", "~/HPCell/fibrosis_data_modified/input2") |> +# magrittr::set_names(c("GSM3489182", "THD0001")) # PBMC dataset -input_hpc = - c("~/HPCell/pbmc_data/pbmc_data_500") |> - magrittr::set_names(c("pbmc3k")) +# input_hpc = +# c("~/HPCell/pbmc_data/pbmc_data_500") |> +# magrittr::set_names(c("pbmc3k")) ``` Local parallel computing @@ -278,13 +279,13 @@ input_hpc |> hpc_report( "empty_report", # The name of the report output - rmd_path = paste0(system.file(package = "HPCell"), "/rmd/test.Rmd"), # The path to the Rmd. In this case it is stored within the package - empty_list = "empty_tbl" |> is_target(), # The results and targets needed for the report - sample_names = "sample_names" |> is_target() # The results and targets needed for the report + rmd_path = "~/HPCell/inst/rmd/Empty_droplet_Report_HPC.Rmd", + x1 = "empty_tbl" |> is_target(), # The results and targets needed for the report + x2 = "sample_names" |> is_target() # The results and targets needed for the report ) tar_read(empty_report) - +# paste0(system.file(package = "HPCell"), "/inst/rmd/Empty_droplet_Report_HPC.Rmd") ``` ## Details on prebuilt steps for several popular methods From 4eef896ad3fdb893f0302a6bebe57c7631c87b13 Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 5 Sep 2024 14:51:02 +1000 Subject: [PATCH 038/145] update testthat --- R/modules_grammar_hpc.R | 7 +- meta/meta | 37 ----- meta/process | 4 - meta/progress | 30 ---- tests/testthat/test-census-samples.R | 187 +++++++++++++------------ tests/testthat/test_single_functions.R | 8 +- 6 files changed, 102 insertions(+), 171 deletions(-) delete mode 100644 meta/meta delete mode 100644 meta/process delete mode 100644 meta/progress diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index b53c25fe..faa3e2ad 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -91,10 +91,10 @@ initialise_hpc <- function(input_hpc, garbage_collection = TRUE, storage = "worker", retrieval = "worker", - # error = "continue", + error = "continue", format = "qs", debug = d, # Set the target you want to debug. - # cue = tar_cue(mode = "never") # Force skip non-debugging outdated targets. + #cue = tar_cue(mode = "never"), # Force skip non-debugging outdated targets. controller = crew_controller_group ( readRDS("temp_computing_resources.rds") ), packages = c("HPCell", "tidySingleCellExperiment") ) @@ -699,6 +699,7 @@ evaluate_hpc.HPCell = function(input_hpc) { tar_make( callr_function = my_callr_function, + #reporter = "summary", reporter = "verbose_positives", script = glue("{input_hpc$initialisation$store}.R"), store = input_hpc$initialisation$store @@ -720,7 +721,7 @@ evaluate_hpc.HPCell = function(input_hpc) { "temp_gene_nomenclature.rds", "data_container_type.rds", "temp_fx.rds" - ) |> + ) |> remove_files_safely() # If get_single_cell is called then return the object diff --git a/meta/meta b/meta/meta deleted file mode 100644 index 625af115..00000000 --- a/meta/meta +++ /dev/null @@ -1,37 +0,0 @@ -name|type|data|command|depend|seed|path|time|size|bytes|format|repository|iteration|parent|children|seconds|warnings|error -alive_identification_tbl|pattern|6c2a81fce8511059|0c470b224392b9c8||-1204631748||||284783|qs|local|list||alive_identification_tbl_bfea2a3c|1.758|| -alive_identification_tbl_bfea2a3c|branch|657eb2649f040bbf|0c470b224392b9c8|cba3ac6da15725f9|116204086||t19697.8992807877s|06d6340ca23f910f|284783|qs|local|list|alive_identification_tbl||1.758|Unable to map 111 of 12021 requested IDs.| -annotation_label_transfer_tbl|pattern|a74f279069e42bda|b46c162789ce7f7e||1549267431||||279192|qs|local|list||annotation_label_transfer_tbl_ab819f51|200.999|| -annotation_label_transfer_tbl_ab819f51|branch|4c226faccd2e86b3|b46c162789ce7f7e|3850e3590ba7a4f0|799748093||t19697.9007444997s|45fcf08f579c2696|279192|qs|local|list|annotation_label_transfer_tbl||27.66|| -cell_cycle_score_tbl|pattern|5b9ca4174cd9e132|ea4bf8a601982fa2||-138952697||||6601|qs|local|list||cell_cycle_score_tbl_ab819f51|0.49|| -cell_cycle_score_tbl_ab819f51|branch|59cfcae64667f442|ea4bf8a601982fa2|9bc1be1596998016|-1808743825||t19697.8969280266s|f5e35ace23a2fdda|6601|qs|local|list|cell_cycle_score_tbl||0.49|The following features are not present in the object CDCA7, MLF1IP, RAD51, CDC45, EXO1, BRIP1, E2F8, not searching for symbol synonyms. The following features are not present in the object MKI67, FAM64A, CCNB2, CKAP2L, AURKB, BUB1, HJURP, TTK, KIF2C, DLGAP5, KIF23, ANLN, NEK2, GAS2L3, CENPA, not searching for symbol synonyms| -computing_resources|object|93294ef4833c2926||||||||||||||| -debug_step|object|da7e5646cbdfced7||||||||||||||| -doublet_identification_tbl|pattern|ba621e7c32b3306f|028ec7db45e45897||908803128||||7498|qs|local|list||doublet_identification_tbl_c49acd50|4.942|| -doublet_identification_tbl_c49acd50|branch|8f0a944514893e6e|028ec7db45e45897|b2f79717f6dd74dc|-734311874||t19697.8994625234s|a00d98f8f91cf9a7|7498|qs|local|list|doublet_identification_tbl||4.942|| -empty_droplets_tbl|pattern|b6dd08fb07a0e23e|3353d3f2aaaa393a||-205985081||||13188|qs|local|list||empty_droplets_tbl_2a87e9d4|16.659|| -empty_droplets_tbl_2a87e9d4|branch|7e4b3c5c1914c6ae|3353d3f2aaaa393a|49d048f9fea7c78e|-972596521||t19697.8969091841s|4a4de1274f781a77|13188|qs|local|list|empty_droplets_tbl||16.659|Unable to map 111 of 12021 requested IDs.| -file|stem|9f2bb0ae498de616|b86bb8ebf53f9beb|ef46db3751d8e999|-1301001980||t19697.8966235944s|9dfd31c781e2fd5b|66|rds|local|vector|||0.001|| -filter_empty_droplets|stem|e51d8d193be16a87|9801ac7a0759bef2|dac0abdc56420f5d|555608163||t19697.8967060595s|506f9f6b3747f807|42|qs|local|vector|||0|| -filtered_file|stem|e51d8d193be16a87|4242e213a9d0492f|ef46db3751d8e999|-1828649942||t19697.8966953651s|506f9f6b3747f807|42|qs|local|vector|||0.001|| -input_data|object|76e86bca832dbafc||||||||||||||| -input_read|pattern|d03b8077db2172f2|c4a42f616d359352||-1928478173||||1382219|qs|local|list||input_read_58a1fafa|0.051|| -input_read_58a1fafa|branch|c4d754d87a984643|c4a42f616d359352|ef46db3751d8e999|-1100213721||t19697.8966855271s|32fad64f913e5498|1382219|qs|local|list|input_read||0.051|| -input_reference|object|da7e5646cbdfced7||||||||||||||| -non_batch_variation_removal_S|pattern|3a96417f529e5d75|fe9c434b5c1f2e9f||-1502599574||||24484807|qs|local|list||non_batch_variation_removal_S_2405b948|8.659|| -non_batch_variation_removal_S_2405b948|branch|ce183af41f977b88|fe9c434b5c1f2e9f|6b13bc72d4a3dd8a|-1912965340||t19697.8993942365s|dfeb160f3f1e5bb8|24484807|qs|local|list|non_batch_variation_removal_S||8.659|| -preprocessing_output_S|pattern|5d27a4b100e4ee75|258639e4385855e6||46538738||||22870055|qs|local|list||preprocessing_output_S_269c823b|0.273|| -preprocessing_output_S_269c823b|branch|97b4d10365fad9bd|258639e4385855e6|1c6188711c5cbe71|-2034187342||t19697.8994787965s|ad6422af65e871c0|22870055|qs|local|list|preprocessing_output_S||0.273|| -pseudobulk_preprocessing_SE|stem|9351bf90de1319f4|5659bdc37ee17bd6|dd2d30e8ac595c99|647724283||t19697.899555706s|ca0fd45832ad8bd8|207105|qs|local|vector|||5.571|Key originalexp_ taken, using rna_ instead. Key originalexp_ taken, using rna_ instead| -read_file|stem|de6cc79c370c44ae|5a0bb3630c52f9fd|ef46db3751d8e999|-355275297||t19697.8966741961s|8a2d295a6f6be5b7|61|qs|local|vector||read_file_3b879ae1|0.001|| -reference_file|stem|6dd71d12008128c1|c3689936a5c436fe|ef46db3751d8e999|-505379189||t19697.8965949718s|de1c6d017cb4e8a8|38|qs|local|vector|||0.576|| -reference_label_coarse|stem|47d778ae3c351e14|356a370377b0dfc0|b27a9324d11b2897|1988768850||t19697.8966644045s|1d635f53cb385f1d|65|qs|local|vector|||0|| -reference_label_fine|stem|6b5e6dd280940374|0f0c7019782f3d6f|b27a9324d11b2897|2112238395||t19697.8966542772s|b2c2d69496a0fbf4|63|qs|local|vector|||0.001|| -reference_read|stem|6dd71d12008128c1|45de7fb6fe4d2958|50f371d3da9cf845|-804588208||t19697.8966136986s|de1c6d017cb4e8a8|38|qs|local|vector|||0.001|| -RNA_assay_name|object|12667ef66f726082||||||||||||||| -sample_column|stem|c78ab07039f21f00|da7093a0351eb8f8|6fe80592cf47985c|282716379||t19697.8995784375s|4956b68a23f9e1fc|122|qs|local|vector|||0|| -sample_column_file|stem|c78ab07039f21f00|61a2077b7feb362e|ef46db3751d8e999|1250955058||t19697.899567419s|4956b68a23f9e1fc|122|qs|local|vector|||0.002|| -store|object|aa663b47d2e83456||||||||||||||| -target_list|object|905b407a82e7432e||||||||||||||| -tissue|stem|5f7ae0a6397c0eae|0da269393e1dde90|e7b0d939ef60d865|-1069396715||t19697.8966441268s|44e327d1ee1978d7|43|qs|local|vector|||0.001|| -tissue_file|stem|5f7ae0a6397c0eae|a59d3287c8d51bf1|ef46db3751d8e999|-354459537||t19697.8966334208s|44e327d1ee1978d7|43|qs|local|vector|||0.001|| diff --git a/meta/process b/meta/process deleted file mode 100644 index 7bcfebf3..00000000 --- a/meta/process +++ /dev/null @@ -1,4 +0,0 @@ -name|value -pid|56293 -version_r|4.3.0 -version_targets|1.3.2 diff --git a/meta/progress b/meta/progress deleted file mode 100644 index 596201c6..00000000 --- a/meta/progress +++ /dev/null @@ -1,30 +0,0 @@ -name|type|parent|branches|progress -reference_file|stem|reference_file|0|skipped -tissue_file|stem|tissue_file|0|skipped -sample_column_file|stem|sample_column_file|0|skipped -sample_column|stem|sample_column|0|skipped -tissue|stem|tissue|0|skipped -reference_label_fine|stem|reference_label_fine|0|skipped -read_file|stem|read_file|0|skipped -input_read_58a1fafa|branch|input_read|0|skipped -input_read|pattern|input_read|1|skipped -file|stem|file|0|skipped -filtered_file|stem|filtered_file|0|skipped -filter_empty_droplets|stem|filter_empty_droplets|0|skipped -empty_droplets_tbl_2a87e9d4|branch|empty_droplets_tbl|0|skipped -empty_droplets_tbl|pattern|empty_droplets_tbl|1|skipped -cell_cycle_score_tbl_ab819f51|branch|cell_cycle_score_tbl|0|skipped -cell_cycle_score_tbl|pattern|cell_cycle_score_tbl|1|skipped -reference_read|stem|reference_read|0|skipped -annotation_label_transfer_tbl_ab819f51|branch|annotation_label_transfer_tbl|0|skipped -annotation_label_transfer_tbl|pattern|annotation_label_transfer_tbl|1|skipped -alive_identification_tbl_bfea2a3c|branch|alive_identification_tbl|0|skipped -alive_identification_tbl|pattern|alive_identification_tbl|1|skipped -doublet_identification_tbl_c49acd50|branch|doublet_identification_tbl|0|skipped -doublet_identification_tbl|pattern|doublet_identification_tbl|1|skipped -non_batch_variation_removal_S_2405b948|branch|non_batch_variation_removal_S|0|skipped -non_batch_variation_removal_S|pattern|non_batch_variation_removal_S|1|skipped -preprocessing_output_S_269c823b|branch|preprocessing_output_S|0|skipped -preprocessing_output_S|pattern|preprocessing_output_S|1|skipped -reference_label_coarse|stem|reference_label_coarse|0|skipped -pseudobulk_preprocessing_SE|stem|pseudobulk_preprocessing_SE|0|skipped diff --git a/tests/testthat/test-census-samples.R b/tests/testthat/test-census-samples.R index 9d9b2a5e..cea2c9cc 100644 --- a/tests/testthat/test-census-samples.R +++ b/tests/testthat/test-census-samples.R @@ -38,11 +38,15 @@ results <- tar_read(results, store = glue("{store}/sample_tiers_dataframe_target tiers_dataframe <- results |> mutate(file_name = file_name, file_size = round(file_size, 3), - tier = case_when(cell_number < 6000 ~ "tier_1", - cell_number > 6000 & cell_number <= 10000 ~ "tier_2", - cell_number > 10000 & cell_number < 20000 ~ "tier_3", - cell_number > 20000 & cell_number < 40000 ~ "tier_4", - cell_number > 40000 ~ "tier_5"), + tier = case_when(cell_number < 500 ~ "tier_1", + cell_number >= 500 & cell_number < 1000 ~ "tier_2", + cell_number >= 1000 & cell_number < 10000 ~ "tier_3", + cell_number >= 10000 ~ "tier_4"), + # tier = case_when(cell_number < 6000 ~ "tier_1", + # cell_number > 6000 & cell_number <= 10000 ~ "tier_2", + # cell_number > 10000 & cell_number < 20000 ~ "tier_3", + # cell_number > 20000 & cell_number < 40000 ~ "tier_4", + # cell_number > 40000 ~ "tier_5"), set_names = basename(file_name) |> stringr::str_remove("\\.h5ad$")) result_directory = "/vast/projects/cellxgene_curated/metadata_cellxgenedp_Apr_2024" @@ -130,96 +134,93 @@ files <- results |> mutate(sample_2 = basename(file_name) |> stringr::str_remove file_size = file_size.x) -file_list = files |> head(100) +file_list = files |> head(2600) -file_list |> pull(file_name) |> - initialise_hpc( - gene_nomenclature = "ensembl", - data_container_type = "anndata", - store = "~/scratch/Census/census_reanalysis/census-run-samples/50samples_pilot/", - #debug_step = "empty_tbl_69e0f0d88e44d787", - tier = file_list |> pull(tier), - computing_resources = list( +#batches <- split(file_list, ceiling(seq_along(file_list$file_name) / 200)) - crew_controller_slurm( - name = "tier_1", - slurm_memory_gigabytes_per_cpu = 20, - slurm_cpus_per_task = 1, - workers = 50, - tasks_max = 5, - verbose = T - ), - crew_controller_slurm( - name = "tier_2", - slurm_memory_gigabytes_per_cpu = 30, - slurm_cpus_per_task = 1, - workers = 50, - tasks_max = 5, - verbose = T - ), - crew_controller_slurm( - name = "tier_3", - slurm_memory_gigabytes_per_cpu = 50, - slurm_cpus_per_task = 1, - workers = 50, - tasks_max = 5, - verbose = T - ), - crew_controller_slurm( - name = "tier_4", - slurm_memory_gigabytes_per_cpu = 100, - slurm_cpus_per_task = 1, - workers = 50, - tasks_max = 5, - verbose = T - ), - crew_controller_slurm( - name = "tier_5", - slurm_memory_gigabytes_per_cpu = 200, - slurm_cpus_per_task = 1, - workers = 50, - tasks_max = 5, - verbose = T - ) +file_list |> pull(file_name) |> +# process_batch <- function(file_subset) { +# +# file_subset |> pull(file_name) |> + initialise_hpc( + gene_nomenclature = "ensembl", + data_container_type = "anndata", + store = "~/scratch/Census/census_reanalysis/census-run-samples/final_run/", + tier = file_list |> pull(tier), + computing_resources = list( + crew_controller_slurm( + name = "tier_1", + script_lines = "#SBATCH --mem 5G", + slurm_log_output=NULL, + slurm_log_error=NULL, + slurm_cpus_per_task = 1, + workers = 200, + tasks_max = 5, + verbose = T + ), + + crew_controller_slurm( + name = "tier_2", + script_lines = "#SBATCH --mem 20G", + slurm_log_output=NULL, + slurm_log_error=NULL, + slurm_cpus_per_task = 1, + workers = 50, + tasks_max = 5, + verbose = T + ), + crew_controller_slurm( + name = "tier_3", + script_lines = "#SBATCH --mem 40", + slurm_log_output=NULL, + slurm_log_error=NULL, + slurm_cpus_per_task = 1, + workers = 15, + tasks_max = 5, + verbose = T + ), + crew_controller_slurm( + name = "tier_4", + script_lines = "#SBATCH --mem 70", + slurm_log_output=NULL, + slurm_log_error=NULL, + slurm_cpus_per_task = 1, + workers = 10, + tasks_max = 5, + verbose = T + ) + ) + + ) |> + #tranform_assay(fx = purrr::map(1:20, ~identity), target_output = "sce_transformed") |> + tranform_assay(fx = file_list |> + pull(transformation_function), + target_output = "sce_transformed") |> + + # Remove empty outliers based on RNA count threshold per cell + remove_empty_threshold(target_input = "sce_transformed", RNA_feature_threshold = 200) |> + + # Remove empty outliers + #remove_empty_DropletUtils(target_input = "sce_transformed") |> + + # Remove dead cells + remove_dead_scuttle(target_input = "sce_transformed") |> + + # Score cell cycle + score_cell_cycle_seurat(target_input = "sce_transformed") |> + + # Remove doublets + remove_doublets_scDblFinder(target_input = "sce_transformed") |> + + # Annotation + annotate_cell_type(target_input = "sce_transformed", azimuth_reference = "pbmcref") |> + + normalise_abundance_seurat_SCT( + factors_to_regress = c("subsets_Mito_percent", "subsets_Ribo_percent", "G2M.Score"), + target_input = "sce_transformed" ) - - ) |> - #tranform_assay(fx = purrr::map(1:20, ~identity), target_output = "sce_transformed") |> - tranform_assay(fx = file_list |> - pull(transformation_function), - target_output = "sce_transformed") |> - - # Remove empty outliers based on RNA count threshold per cell - remove_empty_threshold(target_input = "sce_transformed", RNA_feature_threshold = 200 ) |> - - # Remove empty outliers - #remove_empty_DropletUtils(target_input = "sce_transformed") |> - - # Remove dead cells - remove_dead_scuttle(target_input = "sce_transformed") |> - - # Score cell cycle - score_cell_cycle_seurat(target_input = "sce_transformed") |> - - # Remove doublets - remove_doublets_scDblFinder(target_input = "sce_transformed") |> - - # Annotation - annotate_cell_type(target_input = "sce_transformed", azimuth_reference = "pbmcref") |> - - normalise_abundance_seurat_SCT(factors_to_regress = c( - "subsets_Mito_percent", - "subsets_Ribo_percent", - "G2M.Score" - ), target_input = "sce_transformed") - -# calculate_pseudobulk(group_by = "monaco_first.labels.fine", target_input = "sce_transformed") |> - # - # # test_differential_abundance(~ age_days + (1|collection_id), .abundance="counts") |> - # # #test_differential_abundance(~ age_days, .abundance="counts") - # # - # # # For the moment only available for single cell - # get_single_cell(target_input = "sce_transformed") +#} - +# Process each batch +#purrr::map(batches, process_batch, .progress = TRUE) diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 8e1f3e99..59e52f62 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -541,7 +541,7 @@ file_list = # purrr::map_chr(here::here) |> # magrittr::set_names(c("pbmc3k1_1", "pbmc3k1_2", "pbmc3k1_3", "pbmc3k1_4")) # - dir("dev/CAQ_sce/", full.names = T) |> head(3) + dir("dev/CAQ_sce/", full.names = T) |> head(2) # Initialise pipeline characteristics file_list |> @@ -549,9 +549,9 @@ file_list |> gene_nomenclature = "symbol", data_container_type = "sce_hdf5", store = "~/scratch/Census/temp5/", - tier = c("tier_1","tier_1","tier_1"), + tier = c("tier_1","tier_1"), computing_resources = computing_resources, - #debug_step ="sce_transformed_a4efa5bea68c8b98" + #debug_step ="empty_tbl_0cf8d597acd380df" # debug_step = "non_batch_variation_removal_S_1", # Default resourced @@ -576,7 +576,7 @@ file_list |> # ) |> # Remove empty outliers - remove_empty_DropletUtils( target_input = "data_object") |> + remove_empty_DropletUtils( target_input = "sce_transformed") |> # Annotation annotate_cell_type( From 3dae5ef95d3e54d12cbbd40682046c43e72a32cc Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 17 Sep 2024 13:05:39 +1000 Subject: [PATCH 039/145] fix fetching blueprint reference --- R/functions.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/functions.R b/R/functions.R index 7b687ac8..fc16dc90 100644 --- a/R/functions.R +++ b/R/functions.R @@ -84,8 +84,8 @@ annotation_label_transfer <- function(input_read_RNA_assay, } blueprint <- celldex::BlueprintEncodeData( - ensembl = gene_nomenclature == "ensembl", - legacy = TRUE + ensembl = gene_nomenclature == "ensembl" + #legacy = TRUE ) data_annotated = @@ -119,8 +119,8 @@ annotation_label_transfer <- function(input_read_RNA_assay, gc() MonacoImmuneData <- celldex::MonacoImmuneData( - ensembl = gene_nomenclature == "ensembl", - legacy = TRUE + ensembl = gene_nomenclature == "ensembl" + #legacy = TRUE ) data_annotated = From aa858e58eddf9ca13c3a2083c76dce2020c652d4 Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 24 Sep 2024 10:46:06 +1000 Subject: [PATCH 040/145] update testthat --- R/modules_grammar_hpc.R | 3 +- tests/testthat/test-census-samples.R | 387 +++++++++++++-------------- 2 files changed, 194 insertions(+), 196 deletions(-) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index faa3e2ad..70c56fe4 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -96,7 +96,8 @@ initialise_hpc <- function(input_hpc, debug = d, # Set the target you want to debug. #cue = tar_cue(mode = "never"), # Force skip non-debugging outdated targets. controller = crew_controller_group ( readRDS("temp_computing_resources.rds") ), - packages = c("HPCell", "tidySingleCellExperiment") + packages = c("HPCell", "tidySingleCellExperiment"), + trust_object_timestamps = TRUE ) target_list = list( ) diff --git a/tests/testthat/test-census-samples.R b/tests/testthat/test-census-samples.R index cea2c9cc..ba18a168 100644 --- a/tests/testthat/test-census-samples.R +++ b/tests/testthat/test-census-samples.R @@ -16,211 +16,208 @@ library(targets) library(stringr) directory = "~/cellxgene_curated/census_samples/anndata" store = "~/scratch/Census/census_reanalysis/census-run-samples" -files <- dir(glue("{directory}"), full.names = T) -# results <- purrr::map_dfr(files, function(file_path) { -# data <- zellkonverter::readH5AD(file_path, use_hdf5 = TRUE, reader = "R", verbose = TRUE) +# files <- dir(glue("{directory}"), full.names = T) +# # results <- purrr::map_dfr(files, function(file_path) { +# # data <- zellkonverter::readH5AD(file_path, use_hdf5 = TRUE, reader = "R", verbose = TRUE) +# # +# # cell_number <- length(colnames(data)) +# # +# # +# # file_size <- file.info(file_path)$size / 1024^3 +# # +# # # nFeature_threshold +# # +# # tibble(file_name = file_path, +# # cell_number = cell_number, +# # file_size = file_size) +# # }) # -# cell_number <- length(colnames(data)) +# #results <- readRDS(glue("{store}/sample_tiers.rds")) +# results <- tar_read(results, store = glue("{store}/sample_tiers_dataframe_targets")) # +# tiers_dataframe <- results |> +# mutate(file_name = file_name, +# file_size = round(file_size, 3), +# tier = case_when(cell_number < 500 ~ "tier_1", +# cell_number >= 500 & cell_number < 1000 ~ "tier_2", +# cell_number >= 1000 & cell_number < 10000 ~ "tier_3", +# cell_number >= 10000 ~ "tier_4"), +# # tier = case_when(cell_number < 6000 ~ "tier_1", +# # cell_number > 6000 & cell_number <= 10000 ~ "tier_2", +# # cell_number > 10000 & cell_number < 20000 ~ "tier_3", +# # cell_number > 20000 & cell_number < 40000 ~ "tier_4", +# # cell_number > 40000 ~ "tier_5"), +# set_names = basename(file_name) |> stringr::str_remove("\\.h5ad$")) # -# file_size <- file.info(file_path)$size / 1024^3 +# result_directory = "/vast/projects/cellxgene_curated/metadata_cellxgenedp_Apr_2024" +# samples <- read_parquet("~/cellxgene_curated/census_samples/census_samples_to_download_groups.parquet") +# sample_meta <- tar_read(metadata_dataset_id_common_sample_columns, store = glue("{result_directory}/_targets")) +# samples = samples |> left_join(get_metadata() |> select(dataset_id, contains("norm")) |> +# distinct() |> filter(!is.na(x_normalization)) |> +# as_tibble(), by = "dataset_id") # -# # nFeature_threshold # -# tibble(file_name = file_path, -# cell_number = cell_number, -# file_size = file_size) -# }) - -#results <- readRDS(glue("{store}/sample_tiers.rds")) -results <- tar_read(results, store = glue("{store}/sample_tiers_dataframe_targets")) - -tiers_dataframe <- results |> - mutate(file_name = file_name, - file_size = round(file_size, 3), - tier = case_when(cell_number < 500 ~ "tier_1", - cell_number >= 500 & cell_number < 1000 ~ "tier_2", - cell_number >= 1000 & cell_number < 10000 ~ "tier_3", - cell_number >= 10000 ~ "tier_4"), - # tier = case_when(cell_number < 6000 ~ "tier_1", - # cell_number > 6000 & cell_number <= 10000 ~ "tier_2", - # cell_number > 10000 & cell_number < 20000 ~ "tier_3", - # cell_number > 20000 & cell_number < 40000 ~ "tier_4", - # cell_number > 40000 ~ "tier_5"), - set_names = basename(file_name) |> stringr::str_remove("\\.h5ad$")) - -result_directory = "/vast/projects/cellxgene_curated/metadata_cellxgenedp_Apr_2024" -samples <- read_parquet("~/cellxgene_curated/census_samples/census_samples_to_download_groups.parquet") -sample_meta <- tar_read(metadata_dataset_id_common_sample_columns, store = glue("{result_directory}/_targets")) -samples = samples |> left_join(get_metadata() |> select(dataset_id, contains("norm")) |> - distinct() |> filter(!is.na(x_normalization)) |> - as_tibble(), by = "dataset_id") - - -df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_id, sample_2, x_normalization, x_approximate_distribution) |> - mutate(transform_method = case_when(str_like(x_normalization, "C%") ~ "log", - x_normalization == "none" ~ "log", - x_normalization == "normalized" ~ "log", - is.na(x_normalization) & is.na(x_approximate_distribution) ~ "log", - is.na(x_normalization) & x_approximate_distribution == "NORMAL" ~ "NORMAL", - is.na(x_normalization) & x_approximate_distribution == "COUNT" ~ "COUNT", - str_like(x_normalization, "%canpy%") ~ "log1p", - TRUE ~ x_normalization)) |> - - mutate(method_to_apply = case_when(transform_method %in% c("log","LogNormalization","LogNormalize","log-normalization") ~ "exp", - is.na(x_normalization) & is.na(x_approximate_distribution) ~ "exp", - str_like(transform_method, "Counts%") ~ "exp", - str_like(transform_method, "%log2%") ~ "exp", - transform_method %in% c("log1p", "log1p, base e", "Scanpy", - "scanpy.api.pp.normalize_per_cell method, scaling factor 10000") ~ "expm1", - transform_method == "log1p, base 2" ~ "expm1", - transform_method == "NORMAL" ~ "exp", - transform_method == "COUNT" ~ "identity" - ) ) |> - mutate(comment = case_when(str_like(x_normalization, "Counts%") ~ "a checkpoint for max value of Assay must <= 50", - is.na(x_normalization) & is.na(x_approximate_distribution) ~ "round negative value to 0", - x_normalization == "normalized" ~ "round negative value to 0" - )) |> - mutate(transformation_function = map( - method_to_apply, - ~ ( function(data) { - assay_name <- data@assays |> names() |> magrittr::extract2(1) - counts <- assay(data, assay_name) - density_est <- density(counts |> HPCell:::get_count_per_gene_df() |> pull(counts) ) - mode_value <- density_est$x[which.max(density_est$y)] - if (mode_value < 0 ) counts <- counts + abs(mode_value) - - # Scale max counts to 20 to avoid any downstream failure - if ((.x == "exp") && (max(counts) > 20)) { - scale_factor = 20 / max(counts) - counts <- counts * scale_factor} - - counts <- transform_method(counts) - # round counts to avoid potential substraction error due to different digits print out - counts <- counts |> round(5) - majority_gene_counts = names(which.max(table(as.vector(counts)))) |> as.numeric() - if (majority_gene_counts != 0) { - counts <- counts - majority_gene_counts - } - - # Avoid downstream failures negative counts - if((counts[,1:min(10000, ncol(counts))] |> min()) < 0) - counts[counts < 0] <- 0 - - col_sums <- colSums(counts) - # Drop all zero cells - data <- data[, col_sums > 0] - - # Avoid downstream binding error - rowData(data) = NULL - - # Assign counts back to data - assay(data, assay_name) <- counts - - data - - }) |> - # Meta programming, replacing the transformation programmatically - substitute( env = list(transform_method = as.name(.x))) |> - # Evaluate back to a working function - eval() - )) - - -files <- results |> mutate(sample_2 = basename(file_name) |> stringr::str_remove("\\.h5ad$")) |> - left_join(df, by = "sample_2") |> left_join(tiers_dataframe, by = c("sample_2"= "set_names")) |> - select(-file_name.y, -cell_number.y, -file_size.y) |> rename(file_name = file_name.x, - cell_number = cell_number.x, - file_size = file_size.x) +# df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_id, sample_2, x_normalization, x_approximate_distribution) |> +# mutate(transform_method = case_when(str_like(x_normalization, "C%") ~ "log", +# x_normalization == "none" ~ "log", +# x_normalization == "normalized" ~ "log", +# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "log", +# is.na(x_normalization) & x_approximate_distribution == "NORMAL" ~ "NORMAL", +# is.na(x_normalization) & x_approximate_distribution == "COUNT" ~ "COUNT", +# str_like(x_normalization, "%canpy%") ~ "log1p", +# TRUE ~ x_normalization)) |> +# +# mutate(method_to_apply = case_when(transform_method %in% c("log","LogNormalization","LogNormalize","log-normalization") ~ "exp", +# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "exp", +# str_like(transform_method, "Counts%") ~ "exp", +# str_like(transform_method, "%log2%") ~ "exp", +# transform_method %in% c("log1p", "log1p, base e", "Scanpy", +# "scanpy.api.pp.normalize_per_cell method, scaling factor 10000") ~ "expm1", +# transform_method == "log1p, base 2" ~ "expm1", +# transform_method == "NORMAL" ~ "exp", +# transform_method == "COUNT" ~ "identity" +# ) ) |> +# mutate(comment = case_when(str_like(x_normalization, "Counts%") ~ "a checkpoint for max value of Assay must <= 50", +# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "round negative value to 0", +# x_normalization == "normalized" ~ "round negative value to 0" +# )) |> +# mutate(transformation_function = map( +# method_to_apply, +# ~ ( function(data) { +# assay_name <- data@assays |> names() |> magrittr::extract2(1) +# counts <- assay(data, assay_name) +# density_est <- density(counts |> HPCell:::get_count_per_gene_df() |> pull(counts) ) +# mode_value <- density_est$x[which.max(density_est$y)] +# if (mode_value < 0 ) counts <- counts + abs(mode_value) +# +# # Scale max counts to 20 to avoid any downstream failure +# if ((.x == "exp") && (max(counts) > 20)) { +# scale_factor = 20 / max(counts) +# counts <- counts * scale_factor} +# +# counts <- transform_method(counts) +# # round counts to avoid potential substraction error due to different digits print out +# counts <- counts |> round(5) +# majority_gene_counts = names(which.max(table(as.vector(counts)))) |> as.numeric() +# if (majority_gene_counts != 0) { +# counts <- counts - majority_gene_counts +# } +# +# # Avoid downstream failures negative counts +# if((counts[,1:min(10000, ncol(counts))] |> min()) < 0) +# counts[counts < 0] <- 0 +# +# col_sums <- colSums(counts) +# # Drop all zero cells +# data <- data[, col_sums > 0] +# +# # Avoid downstream binding error +# rowData(data) = NULL +# +# # Assign counts back to data +# assay(data, assay_name) <- counts +# +# data +# +# }) |> +# # Meta programming, replacing the transformation programmatically +# substitute( env = list(transform_method = as.name(.x))) |> +# # Evaluate back to a working function +# eval() +# )) +# +# +# files <- results |> mutate(sample_2 = basename(file_name) |> stringr::str_remove("\\.h5ad$")) |> +# left_join(df, by = "sample_2") |> left_join(tiers_dataframe, by = c("sample_2"= "set_names")) |> +# select(-file_name.y, -cell_number.y, -file_size.y) |> rename(file_name = file_name.x, +# cell_number = cell_number.x, +# file_size = file_size.x) +#files |> saveRDS("~/scratch/Census/census_reanalysis/census-run-samples/final_run/files.rds") +files <- readRDS("~/scratch/Census/census_reanalysis/census-run-samples/final_run/files.rds") -file_list = files |> head(2600) +# Run 1000 samples per run. Save log and result in the corresponding store +setwd("~/scratch/Census/run13/") -#batches <- split(file_list, ceiling(seq_along(file_list$file_name) / 200)) +file_list = files |> slice(12001:13000) file_list |> pull(file_name) |> -# process_batch <- function(file_subset) { -# -# file_subset |> pull(file_name) |> - initialise_hpc( - gene_nomenclature = "ensembl", - data_container_type = "anndata", - store = "~/scratch/Census/census_reanalysis/census-run-samples/final_run/", - tier = file_list |> pull(tier), - computing_resources = list( - crew_controller_slurm( - name = "tier_1", - script_lines = "#SBATCH --mem 5G", - slurm_log_output=NULL, - slurm_log_error=NULL, - slurm_cpus_per_task = 1, - workers = 200, - tasks_max = 5, - verbose = T - ), - - crew_controller_slurm( - name = "tier_2", - script_lines = "#SBATCH --mem 20G", - slurm_log_output=NULL, - slurm_log_error=NULL, - slurm_cpus_per_task = 1, - workers = 50, - tasks_max = 5, - verbose = T - ), - crew_controller_slurm( - name = "tier_3", - script_lines = "#SBATCH --mem 40", - slurm_log_output=NULL, - slurm_log_error=NULL, - slurm_cpus_per_task = 1, - workers = 15, - tasks_max = 5, - verbose = T - ), - crew_controller_slurm( - name = "tier_4", - script_lines = "#SBATCH --mem 70", - slurm_log_output=NULL, - slurm_log_error=NULL, - slurm_cpus_per_task = 1, - workers = 10, - tasks_max = 5, - verbose = T - ) - ) - - ) |> - #tranform_assay(fx = purrr::map(1:20, ~identity), target_output = "sce_transformed") |> - tranform_assay(fx = file_list |> - pull(transformation_function), - target_output = "sce_transformed") |> - - # Remove empty outliers based on RNA count threshold per cell - remove_empty_threshold(target_input = "sce_transformed", RNA_feature_threshold = 200) |> - - # Remove empty outliers - #remove_empty_DropletUtils(target_input = "sce_transformed") |> - - # Remove dead cells - remove_dead_scuttle(target_input = "sce_transformed") |> - - # Score cell cycle - score_cell_cycle_seurat(target_input = "sce_transformed") |> - - # Remove doublets - remove_doublets_scDblFinder(target_input = "sce_transformed") |> - - # Annotation - annotate_cell_type(target_input = "sce_transformed", azimuth_reference = "pbmcref") |> + initialise_hpc( + gene_nomenclature = "ensembl", + data_container_type = "anndata", + store = "~/scratch/Census/run13/", + tier = file_list |> pull(tier), + computing_resources = list( + crew_controller_slurm( + name = "tier_1", + script_lines = "#SBATCH --mem 35G", + slurm_log_output=NULL, + slurm_log_error=NULL, + slurm_cpus_per_task = 1, + workers = 200, + tasks_max = 1, + verbose = T + ), - normalise_abundance_seurat_SCT( - factors_to_regress = c("subsets_Mito_percent", "subsets_Ribo_percent", "G2M.Score"), - target_input = "sce_transformed" + crew_controller_slurm( + name = "tier_2", + script_lines = "#SBATCH --mem 60G", + slurm_cpus_per_task = 1, + slurm_log_output=NULL, + slurm_log_error=NULL, + workers = 50, + tasks_max = 1, + verbose = T + ), + crew_controller_slurm( + name = "tier_3", + script_lines = "#SBATCH --mem 90G", + slurm_cpus_per_task = 1, + slurm_log_output=NULL, + slurm_log_error=NULL, + workers = 25, + tasks_max = 1, + verbose = T + ), + crew_controller_slurm( + name = "tier_4", + script_lines = "#SBATCH --mem 100G", + slurm_cpus_per_task = 1, + slurm_log_output=NULL, + slurm_log_error=NULL, + workers = 14, + tasks_max = 1, + verbose = T ) -#} - -# Process each batch -#purrr::map(batches, process_batch, .progress = TRUE) + ) + + ) |> + #tranform_assay(fx = purrr::map(1:20, ~identity), target_output = "sce_transformed") |> + tranform_assay(fx = file_list |> + pull(transformation_function), + target_output = "sce_transformed") |> + + # Remove empty outliers based on RNA count threshold per cell + remove_empty_threshold(target_input = "sce_transformed", RNA_feature_threshold = 200) |> + + # Remove empty outliers + #remove_empty_DropletUtils(target_input = "sce_transformed") |> + + # Remove dead cells + remove_dead_scuttle(target_input = "sce_transformed") |> + + # Score cell cycle + score_cell_cycle_seurat(target_input = "sce_transformed") |> + + # Remove doublets + remove_doublets_scDblFinder(target_input = "sce_transformed") |> + + # Annotation + annotate_cell_type(target_input = "sce_transformed", azimuth_reference = "pbmcref") |> + + normalise_abundance_seurat_SCT( + factors_to_regress = c("subsets_Mito_percent", "subsets_Ribo_percent", "G2M.Score"), + target_input = "sce_transformed" + ) + From 7d511a11b3f0481b50984482ff385afca3cb7e90 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Tue, 1 Oct 2024 10:22:57 +0200 Subject: [PATCH 041/145] update consensus function --- R/utilities.R | 467 ++++++++++++++++++++++++++++---------------------- 1 file changed, 265 insertions(+), 202 deletions(-) diff --git a/R/utilities.R b/R/utilities.R index 345f7f38..54647f57 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -906,143 +906,141 @@ is_strong_evidence = function(single_cell_data, cell_annotation_azimuth_l2, cell # @examples # cell_types <- c("CD4 T Cell, AlphaBeta", "NK cell, gammadelta", "Central Memory") # cleaned_cell_types <- clean_cell_types_deeper(cell_types) -clean_cell_types_deeper = function(x){ +clean_cell_types_deeper = function(x, azimuth_pbmc, monaco_fine, blueprint_fine){ + + azimuth_pbmc = enquo(azimuth_pbmc) + monaco_fine = enquo(monaco_fine) + blueprint_fine = enquo(blueprint_fine) monaco = tribble( ~Query, ~Reference, ~Database, - "Naive CD8 T cells", "cd8 naive", "monaco_first.labels.fine", - "Central memory CD8 T cells", "cd8 tcm", "monaco_first.labels.fine", - "Effector memory CD8 T cells", "cd8 tem", "monaco_first.labels.fine", - "Terminal effector CD8 T cells", "terminal effector cd4 t", "monaco_first.labels.fine", # Adjusting for the closest match - "MAIT cells", "mait", "monaco_first.labels.fine", - "Vd2 gd T cells", "tgd", "monaco_first.labels.fine", - "Non-Vd2 gd T cells", "tgd", "monaco_first.labels.fine", # No direct match, leaving as NA - "Follicular helper T cells", "cd4 fh", "monaco_first.labels.fine", - "T regulatory cells", "treg", "monaco_first.labels.fine", - "Th1 cells", "cd4 th1", "monaco_first.labels.fine", - "Th1/Th17 cells", "cd4 th1/th17", "monaco_first.labels.fine", - "Th17 cells", "cd4 th17", "monaco_first.labels.fine", - "Th2 cells", "cd4 th2", "monaco_first.labels.fine", - "Naive CD4 T cells", "cd4 naive", "monaco_first.labels.fine", - "Progenitor cells", "progenitor_cell", "monaco_first.labels.fine", - "Naive B cells", "b naive", "monaco_first.labels.fine", - "Naive B", "b naive", "monaco_first.labels.fine", - "Non-switched memory B cells", "b memory", "monaco_first.labels.fine", # No direct match, leaving as NA - "Nonswitched memory B", "b memory", "monaco_first.labels.fine", # No direct match, leaving as NA - "Exhausted B cells", "plasma_cell", "monaco_first.labels.fine", # No direct match, leaving as NA - "Switched memory B cells", "b memory", "monaco_first.labels.fine", - "Switched memory B", "b memory", "monaco_first.labels.fine", - "Plasmablasts", "plasma_cell", "monaco_first.labels.fine", - "Classical monocytes", "cd14 mono", "monaco_first.labels.fine", - "Intermediate monocytes", "cd14 mono", "monaco_first.labels.fine", # Mapping to a closely related term - "Non classical monocytes", "cd16 mono", "monaco_first.labels.fine", - "Natural killer cells", "nk", "monaco_first.labels.fine", - "Natural killer", "nk", "monaco_first.labels.fine", - "Plasmacytoid dendritic cells", "pdc", "monaco_first.labels.fine", - "Myeloid dendritic cells", "cdc", "monaco_first.labels.fine", - "Myeloid dendritic", "cdc", "monaco_first.labels.fine", - "Low-density neutrophils", "granulocyte", "monaco_first.labels.fine", - "Lowdensity neutrophils", "granulocyte", "monaco_first.labels.fine", - "Low-density basophils", "granulocyte", "monaco_first.labels.fine", # No direct match, leaving as NA - "Lowdensity basophils", "granulocyte", "monaco_first.labels.fine", # No direct match, leaving as NA - "Terminal effector CD4 T cells", "terminal effector cd4 t", "monaco_first.labels.fine", - "progenitor", "progenitor_cell", "monaco_first.labels.fine" + "Naive CD8 T cells", "cd8 naive", quo_name(monaco_fine), + "Central memory CD8 T cells", "cd8 tcm", quo_name(monaco_fine), + "Effector memory CD8 T cells", "cd8 tem", quo_name(monaco_fine), + "Terminal effector CD8 T cells", "terminal effector cd4 t", quo_name(monaco_fine), # Adjusting for the closest match + "MAIT cells", "mait", quo_name(monaco_fine), + "Vd2 gd T cells", "tgd", quo_name(monaco_fine), + "Non-Vd2 gd T cells", "tgd", quo_name(monaco_fine), # No direct match, leaving as NA + "Follicular helper T cells", "cd4 fh", quo_name(monaco_fine), + "T regulatory cells", "treg", quo_name(monaco_fine), + "Th1 cells", "cd4 th1", quo_name(monaco_fine), + "Th1/Th17 cells", "cd4 th1/th17", quo_name(monaco_fine), + "Th17 cells", "cd4 th17", quo_name(monaco_fine), + "Th2 cells", "cd4 th2", quo_name(monaco_fine), + "Naive CD4 T cells", "cd4 naive", quo_name(monaco_fine), + "Progenitor cells", "progenitor_cell", quo_name(monaco_fine), + "Naive B cells", "b naive", quo_name(monaco_fine), + "Naive B", "b naive", quo_name(monaco_fine), + "Non-switched memory B cells", "b memory", quo_name(monaco_fine), # No direct match, leaving as NA + "Nonswitched memory B", "b memory", quo_name(monaco_fine), # No direct match, leaving as NA + "Exhausted B cells", "plasma_cell", quo_name(monaco_fine), # No direct match, leaving as NA + "Switched memory B cells", "b memory", quo_name(monaco_fine), + "Switched memory B", "b memory", quo_name(monaco_fine), + "Plasmablasts", "plasma_cell", quo_name(monaco_fine), + "Classical monocytes", "cd14 mono", quo_name(monaco_fine), + "Intermediate monocytes", "cd14 mono", quo_name(monaco_fine), # Mapping to a closely related term + "Non classical monocytes", "cd16 mono", quo_name(monaco_fine), + "Natural killer cells", "nk", quo_name(monaco_fine), + "Natural killer", "nk", quo_name(monaco_fine), + "Plasmacytoid dendritic cells", "pdc", quo_name(monaco_fine), + "Myeloid dendritic cells", "cdc", quo_name(monaco_fine), + "Myeloid dendritic", "cdc", quo_name(monaco_fine), + "Low-density neutrophils", "granulocyte", quo_name(monaco_fine), + "Lowdensity neutrophils", "granulocyte", quo_name(monaco_fine), + "Low-density basophils", "granulocyte", quo_name(monaco_fine), # No direct match, leaving as NA + "Lowdensity basophils", "granulocyte", quo_name(monaco_fine), # No direct match, leaving as NA + "Terminal effector CD4 T cells", "terminal effector cd4 t", quo_name(monaco_fine), + "progenitor", "progenitor_cell", quo_name(monaco_fine) ) azimuth = tribble( ~Query, ~Reference, ~Database, - "NK", "nk", "Azimuth", - "CD8 TEM", "cd8 tem", "Azimuth", - "CD4 CTL", "cd4 helper", "Azimuth", # CD4 cytotoxic T lymphocytes often relate to Th1 cells - "dnT", "dnt", "Azimuth", - "CD8 Naive", "cd8 naive", "Azimuth", - "CD4 Naive", "cd4 naive", "Azimuth", - "CD4 TCM", "cd4 helper", "Azimuth", # Central memory cells often relate to Th1 or Th17 - "gdT", "tgd", "Azimuth", - "CD8 TCM", "cd8 tcm", "Azimuth", - "MAIT", "mait", "Azimuth", - "CD4 TEM", "terminal effector cd4 t", "Azimuth", # Effector memory cells can relate to terminal effector cells - "ILC", "ilc", "Azimuth", - "CD14 Mono", "cd14 mono", "Azimuth", - "cDC1", "cdc", "Azimuth", # Conventional dendritic cell 1 is commonly referred to as CDC - "pDC", "pdc", "Azimuth", - "cDC2", "cdc", "Azimuth", # No specific reference for cDC2, but using CDC as a general category - "B naive", "b naive", "Azimuth", - "B intermediate", "b naive", "Azimuth", # No direct match, leaving as NA - "B memory", "b memory", "Azimuth", - "Platelet", "platelet", "Azimuth", - "Eryth", "erythrocyte", "Azimuth", - "CD16 Mono", "cd16 mono", "Azimuth", - "HSPC", "hematopoietic_precursor_cell", "Azimuth", - "Treg", "treg", "Azimuth", - "NK_CD56bright", "nk", "Azimuth", # CD56bright NK cells are a subset of NK cells - "Plasmablast", "plasma_cell", "Azimuth", - "NK Proliferating", "NK", "Azimuth", # NK cells can be proliferative, linked to general proliferation - "ASDC", "cdc", "Azimuth", # No direct match, leaving as NA - "CD8 Proliferating", "proliferating_t_cell", "Azimuth", - "CD4 Proliferating", "proliferating_t_cell", "Azimuth", - "doublet", "non_immune", "Azimuth" + "NK", "nk", quo_name(azimuth_pbmc), + "CD8 TEM", "cd8 tem", quo_name(azimuth_pbmc), + "CD4 CTL", "cd4 helper", quo_name(azimuth_pbmc), # CD4 cytotoxic T lymphocytes often relate to Th1 cells + "dnT", "dnt", quo_name(azimuth_pbmc), + "CD8 Naive", "cd8 naive", quo_name(azimuth_pbmc), + "CD4 Naive", "cd4 naive", quo_name(azimuth_pbmc), + "CD4 TCM", "cd4 helper", quo_name(azimuth_pbmc), # Central memory cells often relate to Th1 or Th17 + "gdT", "tgd", quo_name(azimuth_pbmc), + "CD8 TCM", "cd8 tcm", quo_name(azimuth_pbmc), + "MAIT", "mait", quo_name(azimuth_pbmc), + "CD4 TEM", "terminal effector cd4 t", quo_name(azimuth_pbmc), # Effector memory cells can relate to terminal effector cells + "ILC", "ilc", quo_name(azimuth_pbmc), + "CD14 Mono", "cd14 mono", quo_name(azimuth_pbmc), + "cDC1", "cdc", quo_name(azimuth_pbmc), # Conventional dendritic cell 1 is commonly referred to as CDC + "pDC", "pdc", quo_name(azimuth_pbmc), + "cDC2", "cdc", quo_name(azimuth_pbmc), # No specific reference for cDC2, but using CDC as a general category + "B naive", "b naive", quo_name(azimuth_pbmc), + "B intermediate", "b naive", quo_name(azimuth_pbmc), # No direct match, leaving as NA + "B memory", "b memory", quo_name(azimuth_pbmc), + "Platelet", "platelet", quo_name(azimuth_pbmc), + "Eryth", "erythrocyte", quo_name(azimuth_pbmc), + "CD16 Mono", "cd16 mono", quo_name(azimuth_pbmc), + "HSPC", "hematopoietic_precursor_cell", quo_name(azimuth_pbmc), + "Treg", "treg", quo_name(azimuth_pbmc), + "NK_CD56bright", "nk", quo_name(azimuth_pbmc), # CD56bright NK cells are a subset of NK cells + "Plasmablast", "plasma_cell", quo_name(azimuth_pbmc), + "NK Proliferating", "NK", quo_name(azimuth_pbmc), # NK cells can be proliferative, linked to general proliferation + "ASDC", "cdc", quo_name(azimuth_pbmc), # No direct match, leaving as NA + "CD8 Proliferating", "proliferating_t_cell", quo_name(azimuth_pbmc), + "CD4 Proliferating", "proliferating_t_cell", quo_name(azimuth_pbmc), + "doublet", "non_immune", quo_name(azimuth_pbmc) ) blueprint = tribble( ~Query, ~Reference, ~Database, - "Neutrophils", "granulocyte", "blueprint_first.labels.fine", - "Monocytes", "monocyte", "blueprint_first.labels.fine", - "MEP", "hematopoietic_cell", "blueprint_first.labels.fine", # MEP typically refers to megakaryocyte-erythroid progenitor - "CD4+ T-cells", "cd4 th1", "blueprint_first.labels.fine", - "Tregs", "treg", "blueprint_first.labels.fine", - "CD4+ Tcm", "cd4 th1/th17", "blueprint_first.labels.fine", - "CD4+ Tem", "terminal effector cd4 t", "blueprint_first.labels.fine", - "CD8+ Tcm", "cd8 tcm", "blueprint_first.labels.fine", - "CD8+ Tem", "cd8 tem", "blueprint_first.labels.fine", - "NK cells", "nk", "blueprint_first.labels.fine", - "naive B-cells", "b naive", "blueprint_first.labels.fine", - "Memory B-cells", "b memory", "blueprint_first.labels.fine", - "Class-switched memory B-cells", "b memory", "blueprint_first.labels.fine", # No direct match, leaving as NA - "HSC", "hematopoietic_cell", "blueprint_first.labels.fine", - "MPP", "hematopoietic_cell", "blueprint_first.labels.fine", # MPP typically refers to multipotent progenitor - "CLP", "hematopoietic_cell", "blueprint_first.labels.fine", # CLP typically refers to common lymphoid progenitor - "GMP", "hematopoietic_cell", "blueprint_first.labels.fine", # GMP typically refers to granulocyte-macrophage progenitor - "Macrophages", "macrophage", "blueprint_first.labels.fine", - "CD8+ T-cells", "cd8", "blueprint_first.labels.fine", - "CD8 T", "cd8", "blueprint_first.labels.fine", - "Erythrocytes", "erythrocyte", "blueprint_first.labels.fine", - "Megakaryocytes", "megakaryocytes", "blueprint_first.labels.fine", - "CMP", "hematopoietic_cell", "blueprint_first.labels.fine", # CMP typically refers to common myeloid progenitor - "Macrophages M1", "macrophage", "blueprint_first.labels.fine", # Specific polarization states (M1, M2) not explicitly listed - "Macrophages M2", "macrophage", "blueprint_first.labels.fine", - "Endothelial cells", "endothelial_cell", "blueprint_first.labels.fine", - "DC", "cdc", "blueprint_first.labels.fine", # Assuming DC refers to dendritic cells - "Eosinophils", "granulocyte", "blueprint_first.labels.fine", # No direct match, leaving as NA - "Plasma cells", "plasma_cell", "blueprint_first.labels.fine", - "Chondrocytes", "chondrocyte", "blueprint_first.labels.fine", - "Fibroblasts", "fibroblast", "blueprint_first.labels.fine", - "Smooth muscle", "smooth_muscle_cell", "blueprint_first.labels.fine", - "Epithelial cells", "epithelial_cell", "blueprint_first.labels.fine", - "Melanocytes", "melanocyte", "blueprint_first.labels.fine", - "Skeletal muscle", "muscle_cell", "blueprint_first.labels.fine", - "Keratinocytes", "keratinocyte", "blueprint_first.labels.fine", - "mv Endothelial cells", "endothelial_cell", "blueprint_first.labels.fine", - "Myocytes", "myocyte", "blueprint_first.labels.fine", - "Adipocytes", "fat_cell", "blueprint_first.labels.fine", - "Neurons", "neuron", "blueprint_first.labels.fine", - "Pericytes", "pericyte_cell", "blueprint_first.labels.fine", - "Preadipocytes", "adipocyte", "blueprint_first.labels.fine", # No direct match, leaving as NA - "Astrocytes", "astrocyte", "blueprint_first.labels.fine", - "Mesangial cells", "mesangial_cell", "blueprint_first.labels.fine" + "Neutrophils", "granulocyte", quo_name(blueprint_fine), + "Monocytes", "monocyte", quo_name(blueprint_fine), + "MEP", "hematopoietic_cell", quo_name(blueprint_fine), # MEP typically refers to megakaryocyte-erythroid progenitor + "CD4+ T-cells", "cd4 th1", quo_name(blueprint_fine), + "Tregs", "treg", quo_name(blueprint_fine), + "CD4+ Tcm", "cd4 th1/th17", quo_name(blueprint_fine), + "CD4+ Tem", "terminal effector cd4 t", quo_name(blueprint_fine), + "CD8+ Tcm", "cd8 tcm", quo_name(blueprint_fine), + "CD8+ Tem", "cd8 tem", quo_name(blueprint_fine), + "NK cells", "nk", quo_name(blueprint_fine), + "naive B-cells", "b naive", quo_name(blueprint_fine), + "Memory B-cells", "b memory", quo_name(blueprint_fine), + "Class-switched memory B-cells", "b memory", quo_name(blueprint_fine), # No direct match, leaving as NA + "HSC", "hematopoietic_cell", quo_name(blueprint_fine), + "MPP", "hematopoietic_cell", quo_name(blueprint_fine), # MPP typically refers to multipotent progenitor + "CLP", "hematopoietic_cell", quo_name(blueprint_fine), # CLP typically refers to common lymphoid progenitor + "GMP", "hematopoietic_cell", quo_name(blueprint_fine), # GMP typically refers to granulocyte-macrophage progenitor + "Macrophages", "macrophage", quo_name(blueprint_fine), + "CD8+ T-cells", "cd8", quo_name(blueprint_fine), + "CD8 T", "cd8", quo_name(blueprint_fine), + "Erythrocytes", "erythrocyte", quo_name(blueprint_fine), + "Megakaryocytes", "megakaryocytes", quo_name(blueprint_fine), + "CMP", "hematopoietic_cell", quo_name(blueprint_fine), # CMP typically refers to common myeloid progenitor + "Macrophages M1", "macrophage", quo_name(blueprint_fine), # Specific polarization states (M1, M2) not explicitly listed + "Macrophages M2", "macrophage", quo_name(blueprint_fine), + "Endothelial cells", "endothelial_cell", quo_name(blueprint_fine), + "DC", "cdc", quo_name(blueprint_fine), # Assuming DC refers to dendritic cells + "Eosinophils", "granulocyte", quo_name(blueprint_fine), # No direct match, leaving as NA + "Plasma cells", "plasma_cell", quo_name(blueprint_fine), + "Chondrocytes", "chondrocyte", quo_name(blueprint_fine), + "Fibroblasts", "fibroblast", quo_name(blueprint_fine), + "Smooth muscle", "smooth_muscle_cell", quo_name(blueprint_fine), + "Epithelial cells", "epithelial_cell", quo_name(blueprint_fine), + "Melanocytes", "melanocyte", quo_name(blueprint_fine), + "Skeletal muscle", "muscle_cell", quo_name(blueprint_fine), + "Keratinocytes", "keratinocyte", quo_name(blueprint_fine), + "mv Endothelial cells", "endothelial_cell", quo_name(blueprint_fine), + "Myocytes", "myocyte", quo_name(blueprint_fine), + "Adipocytes", "fat_cell", quo_name(blueprint_fine), + "Neurons", "neuron", quo_name(blueprint_fine), + "Pericytes", "pericyte_cell", quo_name(blueprint_fine), + "Preadipocytes", "adipocyte", quo_name(blueprint_fine), # No direct match, leaving as NA + "Astrocytes", "astrocyte", quo_name(blueprint_fine), + "Mesangial cells", "mesangial_cell", quo_name(blueprint_fine) ) conversion_table = bind_rows(monaco, blueprint, azimuth) - - all_combinations = - expand_grid( - blueprint_first.labels.fine = blueprint |> pull(Reference) |> unique(), - monaco_first.labels.fine = monaco |> pull(Reference) |> unique(), - Azimuth = azimuth |> pull(Reference) |> unique() - ) + t_cells <- c( "cd8 naive", @@ -1087,40 +1085,105 @@ clean_cell_types_deeper = function(x){ "nk" ) - all_combinations |> + all_combinations = + expand_grid( + !!blueprint_fine := blueprint |> pull(Reference) |> unique(), + !!monaco_fine := monaco |> pull(Reference) |> unique(), + !!azimuth_pbmc := azimuth |> pull(Reference) |> unique() + ) |> + + # Find consensus manually mutate(consensus = - case_when( - # Full consensus - blueprint_first.labels.fine == monaco_first.labels.fine & - blueprint_first.labels.fine == Azimuth ~ blueprint_first.labels.fine, - - # Partial consensus - blueprint_first.labels.fine == monaco_first.labels.fine ~ blueprint_first.labels.fine, - blueprint_first.labels.fine == Azimuth ~ blueprint_first.labels.fine, - monaco_first.labels.fine == Azimuth ~ monaco_first.labels.fine, - - # T cells - blueprint_first.labels.fine |> str_detect("cd8") & monaco_first.labels.fine |> str_detect("cd8") & Azimuth |> str_detect("cd8") ~ "t cd8", - blueprint_first.labels.fine |> str_detect("cd4|th|fh|treg") & monaco_first.labels.fine |> str_detect("cd4|th|fh|treg") & Azimuth |> str_detect("cd4|th|fh|treg") ~ "t cd4", - blueprint_first.labels.fine %in% t_cells & monaco_first.labels.fine %in% t_cells & Azimuth %in% t_cells ~ "t", - - # B cells - blueprint_first.labels.fine %in% b_cells & monaco_first.labels.fine %in% b_cells & Azimuth %in% b_cells ~ "b", - - # monocytic - blueprint_first.labels.fine %in% myeloid_cells & monaco_first.labels.fine %in% myeloid_cells & Azimuth %in% myeloid_cells ~ "monocytic", - - # ILCs - blueprint_first.labels.fine %in% ilcs & monaco_first.labels.fine %in% ilcs & Azimuth %in% ilcs ~ "ilc", - - - TRUE ~ NA_character_ - )) |> filter(consensus |> is.na()) + case_when( + # Full consensus + {{ blueprint_fine }} == {{ monaco_fine }} & + {{ blueprint_fine }} == {{ azimuth_pbmc }} ~ {{ blueprint_fine }}, + + # Partial consensus + {{ blueprint_fine }} == {{ monaco_fine }} ~ {{ blueprint_fine }}, + {{ blueprint_fine }} == {{ azimuth_pbmc }} ~ {{ blueprint_fine }}, + {{ monaco_fine }} == {{ azimuth_pbmc }} ~ {{ monaco_fine }}, + + # T cells + str_detect({{ blueprint_fine }}, "cd8") & str_detect({{ monaco_fine }}, "cd8") & str_detect({{ azimuth_pbmc }}, "cd8") ~ "t cd8", + str_detect({{ blueprint_fine }}, "cd4|th|fh|treg") & str_detect({{ monaco_fine }}, "cd4|th|fh|treg") & str_detect({{ azimuth_pbmc }}, "cd4|th|fh|treg") ~ "t cd4", + {{ blueprint_fine }} %in% t_cells & {{ monaco_fine }} %in% t_cells & {{ azimuth_pbmc }} %in% t_cells ~ "t", + + # B cells + {{ blueprint_fine }} %in% b_cells & {{ monaco_fine }} %in% b_cells & {{ azimuth_pbmc }} %in% b_cells ~ "b", + + # Monocytic cells + {{ blueprint_fine }} %in% myeloid_cells & {{ monaco_fine }} %in% myeloid_cells & {{ azimuth_pbmc }} %in% myeloid_cells ~ "monocytic", + + # ILCs + {{ blueprint_fine }} %in% ilcs & {{ monaco_fine }} %in% ilcs & {{ azimuth_pbmc }} %in% ilcs ~ "ilc", + + # Citotoxic + ( {{ blueprint_fine }} %in% ilcs | str_detect({{ blueprint_fine }}, "cd8") ) & + ( {{ monaco_fine }} %in% ilcs | str_detect({{ monaco_fine }}, "cd8") ) & + ( {{ azimuth_pbmc }} %in% ilcs | str_detect({{ azimuth_pbmc }}, "cd8") ) ~ "citotoxic", + + ################## + # Partial consensus broad cell types + ################## + + # T cells + str_detect({{ blueprint_fine }}, "cd8") & str_detect({{ monaco_fine }}, "cd8") ~ "t cd8", + str_detect({{ blueprint_fine }}, "cd8") & str_detect({{ azimuth_pbmc }}, "cd8") ~ "t cd8", + str_detect({{ monaco_fine }}, "cd8") & str_detect({{ azimuth_pbmc }}, "cd8") ~ "t cd8", + + str_detect({{ blueprint_fine }}, "cd4|th|fh|treg") & str_detect({{ monaco_fine }}, "cd4|th|fh|treg") ~ "t cd4", + str_detect({{ blueprint_fine }}, "cd4|th|fh|treg") & str_detect({{ azimuth_pbmc }}, "cd4|th|fh|treg") ~ "t cd4", + str_detect({{ monaco_fine }}, "cd4|th|fh|treg") & str_detect({{ azimuth_pbmc }}, "cd4|th|fh|treg") ~ "t cd4", + + {{ blueprint_fine }} %in% t_cells & {{ monaco_fine }} %in% t_cells ~ "t", + {{ blueprint_fine }} %in% t_cells & {{ azimuth_pbmc }} %in% t_cells ~ "t", + {{ monaco_fine }} %in% t_cells & {{ azimuth_pbmc }} %in% t_cells ~ "t", + + # B cells + {{ blueprint_fine }} %in% b_cells & {{ monaco_fine }} %in% b_cells ~ "b", + {{ blueprint_fine }} %in% b_cells & {{ azimuth_pbmc }} %in% b_cells ~ "b", + {{ monaco_fine }} %in% b_cells & {{ azimuth_pbmc }} %in% b_cells ~ "b", + + # Monocytic cells + {{ blueprint_fine }} %in% myeloid_cells & {{ monaco_fine }} %in% myeloid_cells ~ "monocytic", + {{ blueprint_fine }} %in% myeloid_cells & {{ azimuth_pbmc }} %in% myeloid_cells ~ "monocytic", + {{ monaco_fine }} %in% myeloid_cells & {{ azimuth_pbmc }} %in% myeloid_cells ~ "monocytic", + + # ILCs + {{ blueprint_fine }} %in% ilcs & {{ monaco_fine }} %in% ilcs ~ "ilc", + {{ blueprint_fine }} %in% ilcs & {{ azimuth_pbmc }} %in% ilcs ~ "ilc", + {{ monaco_fine }} %in% ilcs & {{ azimuth_pbmc }} %in% ilcs ~ "ilc", + + # Citotoxic + ( {{ blueprint_fine }} %in% ilcs | str_detect({{ blueprint_fine }}, "cd8") ) & + ( {{ monaco_fine }} %in% ilcs | str_detect({{ monaco_fine }}, "cd8") ) ~ "citotoxic", + + ( {{ blueprint_fine }} %in% ilcs | str_detect({{ blueprint_fine }}, "cd8") ) & + ( {{ azimuth_pbmc }} %in% ilcs | str_detect({{ azimuth_pbmc }}, "cd8") ) ~ "citotoxic", + + ( {{ monaco_fine }} %in% ilcs | str_detect({{ monaco_fine }}, "cd8") ) & + ( {{ azimuth_pbmc }} %in% ilcs | str_detect({{ azimuth_pbmc }}, "cd8") ) ~ "citotoxic", + + + TRUE ~ NA_character_ + )) + + all_combinations |> + rowid_to_column("combination_id") |> + pivot_longer(-combination_id, names_to = "Database", values_to = "Reference") |> + left_join(conversion_table, relationship = "many-to-many") |> + select(-Reference) |> + pivot_wider(names_from = Database, values_from = Query, values_fn = function(x) paste(unique(x), collapse = ",")) + x |> - select(.cell, blueprint_first.labels.fine, monaco_first.labels.fine) |> + mutate( + !!blueprint_fine := blueprint |> select(-Database) |> deframe() |> _[!!blueprint_fine] + ) |> + select(.cell, !!blueprint_fine, !!monaco_fine, !!azimuth_pbmc) |> pivot_longer(-.cell, names_to = "Database", values_to = "Query") |> mutate(Query = Query |> tolower()) |> left_join(conversion_table |> mutate(Query = Query |> tolower()), copy = TRUE) |> @@ -1128,59 +1191,59 @@ clean_cell_types_deeper = function(x){ pivot_wider(names_from = Database, values_from = Reference) - - - - #Fix GChecks - cell_type_clean = NULL - - x |> - # Annotate - mutate(cell_type_clean = cell_type_clean |> tolower()) |> - mutate(cell_type_clean = cell_type_clean |> str_remove_all(",")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("alphabeta")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove_all("positive")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace("cd4 t", "cd4")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace("regulatory t", "treg")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("thymusderived")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("human")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("igg ")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("igm ")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("iga ")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("group [0-9]")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("common")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("cd45ro")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("type i")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("germinal center")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("iggnegative")) |> - mutate(cell_type_clean = cell_type_clean |> str_remove("terminally differentiated")) |> - - mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("macrophage"), "macrophage", cell_type_clean) ) |> - mutate(cell_type_clean = if_else(cell_type_clean == "mononuclear phagocyte", "macrophage", cell_type_clean) ) |> - - mutate(cell_type_clean = if_else(cell_type_clean |> str_detect(" treg"), "treg", cell_type_clean) ) |> - mutate(cell_type_clean = if_else(cell_type_clean |> str_detect(" dendritic"), "dendritic", cell_type_clean) ) |> - mutate(cell_type_clean = if_else(cell_type_clean |> str_detect(" thelper"), "thelper", cell_type_clean) ) |> - mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("thelper "), "thelper", cell_type_clean) ) |> - mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("gammadelta"), "tgd", cell_type_clean) ) |> - mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("natural killer"), "nk", cell_type_clean) ) |> - - - mutate(cell_type_clean = cell_type_clean |> str_replace_all(" ", " ")) |> - - - mutate(cell_type_clean = cell_type_clean |> str_replace("myeloid leukocyte", "myeloid")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace("effector memory", "tem")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace("effector", "tem")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace_all("cd8 t", "cd8")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace("central memory", "tcm")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace("gammadelta t", "gdt")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace("nonclassical monocyte", "cd16 monocyte")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace("classical monocyte", "cd14 monocyte")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace("follicular b", "b")) |> - mutate(cell_type_clean = cell_type_clean |> str_replace("unswitched memory", "memory")) |> - - mutate(cell_type_clean = cell_type_clean |> str_trim()) + # + # + # + # #Fix GChecks + # cell_type_clean = NULL + # + # x |> + # # Annotate + # mutate(cell_type_clean = cell_type_clean |> tolower()) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove_all(",")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("alphabeta")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove_all("positive")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace("cd4 t", "cd4")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace("regulatory t", "treg")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("thymusderived")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("human")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("igg ")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("igm ")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("iga ")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("group [0-9]")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("common")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("cd45ro")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("type i")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("germinal center")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("iggnegative")) |> + # mutate(cell_type_clean = cell_type_clean |> str_remove("terminally differentiated")) |> + # + # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("macrophage"), "macrophage", cell_type_clean) ) |> + # mutate(cell_type_clean = if_else(cell_type_clean == "mononuclear phagocyte", "macrophage", cell_type_clean) ) |> + # + # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect(" treg"), "treg", cell_type_clean) ) |> + # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect(" dendritic"), "dendritic", cell_type_clean) ) |> + # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect(" thelper"), "thelper", cell_type_clean) ) |> + # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("thelper "), "thelper", cell_type_clean) ) |> + # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("gammadelta"), "tgd", cell_type_clean) ) |> + # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("natural killer"), "nk", cell_type_clean) ) |> + # + # + # mutate(cell_type_clean = cell_type_clean |> str_replace_all(" ", " ")) |> + # + # + # mutate(cell_type_clean = cell_type_clean |> str_replace("myeloid leukocyte", "myeloid")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace("effector memory", "tem")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace("effector", "tem")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace_all("cd8 t", "cd8")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace("central memory", "tcm")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace("gammadelta t", "gdt")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace("nonclassical monocyte", "cd16 monocyte")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace("classical monocyte", "cd14 monocyte")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace("follicular b", "b")) |> + # mutate(cell_type_clean = cell_type_clean |> str_replace("unswitched memory", "memory")) |> + # + # mutate(cell_type_clean = cell_type_clean |> str_trim()) } #' Clean and Standardize Cell Types From b23f304218dee1f6102982943bef06a7216717e3 Mon Sep 17 00:00:00 2001 From: stemangiola Date: Wed, 2 Oct 2024 05:42:08 +1000 Subject: [PATCH 042/145] complete the consensus function --- R/utilities.R | 357 +++++++++++++++++++++++++------------------------- 1 file changed, 179 insertions(+), 178 deletions(-) diff --git a/R/utilities.R b/R/utilities.R index 54647f57..3b1baa4f 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -884,7 +884,7 @@ is_strong_evidence = function(single_cell_data, cell_annotation_azimuth_l2, cell )) } -#' Clean and Standardize Cell Types (Deeper) +#' reference_annotation_to_consensus #' #' This function takes a vector of cell types and applies a series of transformations #' to clean and standardize them for better consistency. @@ -906,136 +906,136 @@ is_strong_evidence = function(single_cell_data, cell_annotation_azimuth_l2, cell # @examples # cell_types <- c("CD4 T Cell, AlphaBeta", "NK cell, gammadelta", "Central Memory") # cleaned_cell_types <- clean_cell_types_deeper(cell_types) -clean_cell_types_deeper = function(x, azimuth_pbmc, monaco_fine, blueprint_fine){ +reference_annotation_to_consensus = function(azimuth_input, monaco_input, blueprint_input){ - azimuth_pbmc = enquo(azimuth_pbmc) - monaco_fine = enquo(monaco_fine) - blueprint_fine = enquo(blueprint_fine) + # azimuth_pbmc = enquo(azimuth_pbmc) + # monaco_fine = enquo(monaco_fine) + # blueprint_fine = enquo(blueprint_fine) monaco = tribble( ~Query, ~Reference, ~Database, - "Naive CD8 T cells", "cd8 naive", quo_name(monaco_fine), - "Central memory CD8 T cells", "cd8 tcm", quo_name(monaco_fine), - "Effector memory CD8 T cells", "cd8 tem", quo_name(monaco_fine), - "Terminal effector CD8 T cells", "terminal effector cd4 t", quo_name(monaco_fine), # Adjusting for the closest match - "MAIT cells", "mait", quo_name(monaco_fine), - "Vd2 gd T cells", "tgd", quo_name(monaco_fine), - "Non-Vd2 gd T cells", "tgd", quo_name(monaco_fine), # No direct match, leaving as NA - "Follicular helper T cells", "cd4 fh", quo_name(monaco_fine), - "T regulatory cells", "treg", quo_name(monaco_fine), - "Th1 cells", "cd4 th1", quo_name(monaco_fine), - "Th1/Th17 cells", "cd4 th1/th17", quo_name(monaco_fine), - "Th17 cells", "cd4 th17", quo_name(monaco_fine), - "Th2 cells", "cd4 th2", quo_name(monaco_fine), - "Naive CD4 T cells", "cd4 naive", quo_name(monaco_fine), - "Progenitor cells", "progenitor_cell", quo_name(monaco_fine), - "Naive B cells", "b naive", quo_name(monaco_fine), - "Naive B", "b naive", quo_name(monaco_fine), - "Non-switched memory B cells", "b memory", quo_name(monaco_fine), # No direct match, leaving as NA - "Nonswitched memory B", "b memory", quo_name(monaco_fine), # No direct match, leaving as NA - "Exhausted B cells", "plasma_cell", quo_name(monaco_fine), # No direct match, leaving as NA - "Switched memory B cells", "b memory", quo_name(monaco_fine), - "Switched memory B", "b memory", quo_name(monaco_fine), - "Plasmablasts", "plasma_cell", quo_name(monaco_fine), - "Classical monocytes", "cd14 mono", quo_name(monaco_fine), - "Intermediate monocytes", "cd14 mono", quo_name(monaco_fine), # Mapping to a closely related term - "Non classical monocytes", "cd16 mono", quo_name(monaco_fine), - "Natural killer cells", "nk", quo_name(monaco_fine), - "Natural killer", "nk", quo_name(monaco_fine), - "Plasmacytoid dendritic cells", "pdc", quo_name(monaco_fine), - "Myeloid dendritic cells", "cdc", quo_name(monaco_fine), - "Myeloid dendritic", "cdc", quo_name(monaco_fine), - "Low-density neutrophils", "granulocyte", quo_name(monaco_fine), - "Lowdensity neutrophils", "granulocyte", quo_name(monaco_fine), - "Low-density basophils", "granulocyte", quo_name(monaco_fine), # No direct match, leaving as NA - "Lowdensity basophils", "granulocyte", quo_name(monaco_fine), # No direct match, leaving as NA - "Terminal effector CD4 T cells", "terminal effector cd4 t", quo_name(monaco_fine), - "progenitor", "progenitor_cell", quo_name(monaco_fine) + "Naive CD8 T cells", "cd8 naive", "monaco_fine", + "Central memory CD8 T cells", "cd8 tcm", "monaco_fine", + "Effector memory CD8 T cells", "cd8 tem", "monaco_fine", + "Terminal effector CD8 T cells", "terminal effector cd4 t", "monaco_fine", # Adjusting for the closest match + "MAIT cells", "mait", "monaco_fine", + "Vd2 gd T cells", "tgd", "monaco_fine", + "Non-Vd2 gd T cells", "tgd", "monaco_fine", # No direct match, leaving as NA + "Follicular helper T cells", "cd4 fh", "monaco_fine", + "T regulatory cells", "treg", "monaco_fine", + "Th1 cells", "cd4 th1", "monaco_fine", + "Th1/Th17 cells", "cd4 th1/th17", "monaco_fine", + "Th17 cells", "cd4 th17", "monaco_fine", + "Th2 cells", "cd4 th2", "monaco_fine", + "Naive CD4 T cells", "cd4 naive", "monaco_fine", + "Progenitor cells", "progenitor_cell", "monaco_fine", + "Naive B cells", "b naive", "monaco_fine", + "Naive B", "b naive", "monaco_fine", + "Non-switched memory B cells", "b memory", "monaco_fine", # No direct match, leaving as NA + "Nonswitched memory B", "b memory", "monaco_fine", # No direct match, leaving as NA + "Exhausted B cells", "plasma_cell", "monaco_fine", # No direct match, leaving as NA + "Switched memory B cells", "b memory", "monaco_fine", + "Switched memory B", "b memory", "monaco_fine", + "Plasmablasts", "plasma_cell", "monaco_fine", + "Classical monocytes", "cd14 mono", "monaco_fine", + "Intermediate monocytes", "cd14 mono", "monaco_fine", # Mapping to a closely related term + "Non classical monocytes", "cd16 mono", "monaco_fine", + "Natural killer cells", "nk", "monaco_fine", + "Natural killer", "nk", "monaco_fine", + "Plasmacytoid dendritic cells", "pdc", "monaco_fine", + "Myeloid dendritic cells", "cdc", "monaco_fine", + "Myeloid dendritic", "cdc", "monaco_fine", + "Low-density neutrophils", "granulocyte", "monaco_fine", + "Lowdensity neutrophils", "granulocyte", "monaco_fine", + "Low-density basophils", "granulocyte", "monaco_fine", # No direct match, leaving as NA + "Lowdensity basophils", "granulocyte", "monaco_fine", # No direct match, leaving as NA + "Terminal effector CD4 T cells", "terminal effector cd4 t", "monaco_fine", + "progenitor", "progenitor_cell", "monaco_fine" ) azimuth = tribble( ~Query, ~Reference, ~Database, - "NK", "nk", quo_name(azimuth_pbmc), - "CD8 TEM", "cd8 tem", quo_name(azimuth_pbmc), - "CD4 CTL", "cd4 helper", quo_name(azimuth_pbmc), # CD4 cytotoxic T lymphocytes often relate to Th1 cells - "dnT", "dnt", quo_name(azimuth_pbmc), - "CD8 Naive", "cd8 naive", quo_name(azimuth_pbmc), - "CD4 Naive", "cd4 naive", quo_name(azimuth_pbmc), - "CD4 TCM", "cd4 helper", quo_name(azimuth_pbmc), # Central memory cells often relate to Th1 or Th17 - "gdT", "tgd", quo_name(azimuth_pbmc), - "CD8 TCM", "cd8 tcm", quo_name(azimuth_pbmc), - "MAIT", "mait", quo_name(azimuth_pbmc), - "CD4 TEM", "terminal effector cd4 t", quo_name(azimuth_pbmc), # Effector memory cells can relate to terminal effector cells - "ILC", "ilc", quo_name(azimuth_pbmc), - "CD14 Mono", "cd14 mono", quo_name(azimuth_pbmc), - "cDC1", "cdc", quo_name(azimuth_pbmc), # Conventional dendritic cell 1 is commonly referred to as CDC - "pDC", "pdc", quo_name(azimuth_pbmc), - "cDC2", "cdc", quo_name(azimuth_pbmc), # No specific reference for cDC2, but using CDC as a general category - "B naive", "b naive", quo_name(azimuth_pbmc), - "B intermediate", "b naive", quo_name(azimuth_pbmc), # No direct match, leaving as NA - "B memory", "b memory", quo_name(azimuth_pbmc), - "Platelet", "platelet", quo_name(azimuth_pbmc), - "Eryth", "erythrocyte", quo_name(azimuth_pbmc), - "CD16 Mono", "cd16 mono", quo_name(azimuth_pbmc), - "HSPC", "hematopoietic_precursor_cell", quo_name(azimuth_pbmc), - "Treg", "treg", quo_name(azimuth_pbmc), - "NK_CD56bright", "nk", quo_name(azimuth_pbmc), # CD56bright NK cells are a subset of NK cells - "Plasmablast", "plasma_cell", quo_name(azimuth_pbmc), - "NK Proliferating", "NK", quo_name(azimuth_pbmc), # NK cells can be proliferative, linked to general proliferation - "ASDC", "cdc", quo_name(azimuth_pbmc), # No direct match, leaving as NA - "CD8 Proliferating", "proliferating_t_cell", quo_name(azimuth_pbmc), - "CD4 Proliferating", "proliferating_t_cell", quo_name(azimuth_pbmc), - "doublet", "non_immune", quo_name(azimuth_pbmc) + "NK", "nk", "azimuth_pbmc", + "CD8 TEM", "cd8 tem", "azimuth_pbmc", + "CD4 CTL", "cd4 helper", "azimuth_pbmc", # CD4 cytotoxic T lymphocytes often relate to Th1 cells + "dnT", "dnt", "azimuth_pbmc", + "CD8 Naive", "cd8 naive", "azimuth_pbmc", + "CD4 Naive", "cd4 naive", "azimuth_pbmc", + "CD4 TCM", "cd4 helper", "azimuth_pbmc", # Central memory cells often relate to Th1 or Th17 + "gdT", "tgd", "azimuth_pbmc", + "CD8 TCM", "cd8 tcm", "azimuth_pbmc", + "MAIT", "mait", "azimuth_pbmc", + "CD4 TEM", "terminal effector cd4 t", "azimuth_pbmc", # Effector memory cells can relate to terminal effector cells + "ILC", "ilc", "azimuth_pbmc", + "CD14 Mono", "cd14 mono", "azimuth_pbmc", + "cDC1", "cdc", "azimuth_pbmc", # Conventional dendritic cell 1 is commonly referred to as CDC + "pDC", "pdc", "azimuth_pbmc", + "cDC2", "cdc", "azimuth_pbmc", # No specific reference for cDC2, but using CDC as a general category + "B naive", "b naive", "azimuth_pbmc", + "B intermediate", "b naive", "azimuth_pbmc", # No direct match, leaving as NA + "B memory", "b memory", "azimuth_pbmc", + "Platelet", "platelet", "azimuth_pbmc", + "Eryth", "erythrocyte", "azimuth_pbmc", + "CD16 Mono", "cd16 mono", "azimuth_pbmc", + "HSPC", "hematopoietic_precursor_cell", "azimuth_pbmc", + "Treg", "treg", "azimuth_pbmc", + "NK_CD56bright", "nk", "azimuth_pbmc", # CD56bright NK cells are a subset of NK cells + "Plasmablast", "plasma_cell", "azimuth_pbmc", + "NK Proliferating", "NK", "azimuth_pbmc", # NK cells can be proliferative, linked to general proliferation + "ASDC", "cdc", "azimuth_pbmc", # No direct match, leaving as NA + "CD8 Proliferating", "proliferating_t_cell", "azimuth_pbmc", + "CD4 Proliferating", "proliferating_t_cell", "azimuth_pbmc", + "doublet", "non_immune", "azimuth_pbmc" ) blueprint = tribble( ~Query, ~Reference, ~Database, - "Neutrophils", "granulocyte", quo_name(blueprint_fine), - "Monocytes", "monocyte", quo_name(blueprint_fine), - "MEP", "hematopoietic_cell", quo_name(blueprint_fine), # MEP typically refers to megakaryocyte-erythroid progenitor - "CD4+ T-cells", "cd4 th1", quo_name(blueprint_fine), - "Tregs", "treg", quo_name(blueprint_fine), - "CD4+ Tcm", "cd4 th1/th17", quo_name(blueprint_fine), - "CD4+ Tem", "terminal effector cd4 t", quo_name(blueprint_fine), - "CD8+ Tcm", "cd8 tcm", quo_name(blueprint_fine), - "CD8+ Tem", "cd8 tem", quo_name(blueprint_fine), - "NK cells", "nk", quo_name(blueprint_fine), - "naive B-cells", "b naive", quo_name(blueprint_fine), - "Memory B-cells", "b memory", quo_name(blueprint_fine), - "Class-switched memory B-cells", "b memory", quo_name(blueprint_fine), # No direct match, leaving as NA - "HSC", "hematopoietic_cell", quo_name(blueprint_fine), - "MPP", "hematopoietic_cell", quo_name(blueprint_fine), # MPP typically refers to multipotent progenitor - "CLP", "hematopoietic_cell", quo_name(blueprint_fine), # CLP typically refers to common lymphoid progenitor - "GMP", "hematopoietic_cell", quo_name(blueprint_fine), # GMP typically refers to granulocyte-macrophage progenitor - "Macrophages", "macrophage", quo_name(blueprint_fine), - "CD8+ T-cells", "cd8", quo_name(blueprint_fine), - "CD8 T", "cd8", quo_name(blueprint_fine), - "Erythrocytes", "erythrocyte", quo_name(blueprint_fine), - "Megakaryocytes", "megakaryocytes", quo_name(blueprint_fine), - "CMP", "hematopoietic_cell", quo_name(blueprint_fine), # CMP typically refers to common myeloid progenitor - "Macrophages M1", "macrophage", quo_name(blueprint_fine), # Specific polarization states (M1, M2) not explicitly listed - "Macrophages M2", "macrophage", quo_name(blueprint_fine), - "Endothelial cells", "endothelial_cell", quo_name(blueprint_fine), - "DC", "cdc", quo_name(blueprint_fine), # Assuming DC refers to dendritic cells - "Eosinophils", "granulocyte", quo_name(blueprint_fine), # No direct match, leaving as NA - "Plasma cells", "plasma_cell", quo_name(blueprint_fine), - "Chondrocytes", "chondrocyte", quo_name(blueprint_fine), - "Fibroblasts", "fibroblast", quo_name(blueprint_fine), - "Smooth muscle", "smooth_muscle_cell", quo_name(blueprint_fine), - "Epithelial cells", "epithelial_cell", quo_name(blueprint_fine), - "Melanocytes", "melanocyte", quo_name(blueprint_fine), - "Skeletal muscle", "muscle_cell", quo_name(blueprint_fine), - "Keratinocytes", "keratinocyte", quo_name(blueprint_fine), - "mv Endothelial cells", "endothelial_cell", quo_name(blueprint_fine), - "Myocytes", "myocyte", quo_name(blueprint_fine), - "Adipocytes", "fat_cell", quo_name(blueprint_fine), - "Neurons", "neuron", quo_name(blueprint_fine), - "Pericytes", "pericyte_cell", quo_name(blueprint_fine), - "Preadipocytes", "adipocyte", quo_name(blueprint_fine), # No direct match, leaving as NA - "Astrocytes", "astrocyte", quo_name(blueprint_fine), - "Mesangial cells", "mesangial_cell", quo_name(blueprint_fine) + "Neutrophils", "granulocyte", "blueprint_fine", + "Monocytes", "monocyte", "blueprint_fine", + "MEP", "hematopoietic_cell", "blueprint_fine", # MEP typically refers to megakaryocyte-erythroid progenitor + "CD4+ T-cells", "cd4 th1", "blueprint_fine", + "Tregs", "treg", "blueprint_fine", + "CD4+ Tcm", "cd4 th1/th17", "blueprint_fine", + "CD4+ Tem", "terminal effector cd4 t", "blueprint_fine", + "CD8+ Tcm", "cd8 tcm", "blueprint_fine", + "CD8+ Tem", "cd8 tem", "blueprint_fine", + "NK cells", "nk", "blueprint_fine", + "naive B-cells", "b naive", "blueprint_fine", + "Memory B-cells", "b memory", "blueprint_fine", + "Class-switched memory B-cells", "b memory", "blueprint_fine", # No direct match, leaving as NA + "HSC", "hematopoietic_cell", "blueprint_fine", + "MPP", "hematopoietic_cell", "blueprint_fine", # MPP typically refers to multipotent progenitor + "CLP", "hematopoietic_cell", "blueprint_fine", # CLP typically refers to common lymphoid progenitor + "GMP", "hematopoietic_cell", "blueprint_fine", # GMP typically refers to granulocyte-macrophage progenitor + "Macrophages", "macrophage", "blueprint_fine", + "CD8+ T-cells", "cd8", "blueprint_fine", + "CD8 T", "cd8", "blueprint_fine", + "Erythrocytes", "erythrocyte", "blueprint_fine", + "Megakaryocytes", "megakaryocytes", "blueprint_fine", + "CMP", "hematopoietic_cell", "blueprint_fine", # CMP typically refers to common myeloid progenitor + "Macrophages M1", "macrophage", "blueprint_fine", # Specific polarization states (M1, M2) not explicitly listed + "Macrophages M2", "macrophage", "blueprint_fine", + "Endothelial cells", "endothelial_cell", "blueprint_fine", + "DC", "cdc", "blueprint_fine", # Assuming DC refers to dendritic cells + "Eosinophils", "granulocyte", "blueprint_fine", # No direct match, leaving as NA + "Plasma cells", "plasma_cell", "blueprint_fine", + "Chondrocytes", "chondrocyte", "blueprint_fine", + "Fibroblasts", "fibroblast", "blueprint_fine", + "Smooth muscle", "smooth_muscle_cell", "blueprint_fine", + "Epithelial cells", "epithelial_cell", "blueprint_fine", + "Melanocytes", "melanocyte", "blueprint_fine", + "Skeletal muscle", "muscle_cell", "blueprint_fine", + "Keratinocytes", "keratinocyte", "blueprint_fine", + "mv Endothelial cells", "endothelial_cell", "blueprint_fine", + "Myocytes", "myocyte", "blueprint_fine", + "Adipocytes", "fat_cell", "blueprint_fine", + "Neurons", "neuron", "blueprint_fine", + "Pericytes", "pericyte_cell", "blueprint_fine", + "Preadipocytes", "adipocyte", "blueprint_fine", # No direct match, leaving as NA + "Astrocytes", "astrocyte", "blueprint_fine", + "Mesangial cells", "mesangial_cell", "blueprint_fine" ) conversion_table = @@ -1087,108 +1087,109 @@ clean_cell_types_deeper = function(x, azimuth_pbmc, monaco_fine, blueprint_fine) all_combinations = expand_grid( - !!blueprint_fine := blueprint |> pull(Reference) |> unique(), - !!monaco_fine := monaco |> pull(Reference) |> unique(), - !!azimuth_pbmc := azimuth |> pull(Reference) |> unique() + blueprint_fine = blueprint |> pull(Reference) |> unique(), + monaco_fine = monaco |> pull(Reference) |> unique(), + azimuth_pbmc = azimuth |> pull(Reference) |> unique() ) |> # Find consensus manually mutate(consensus = case_when( # Full consensus - {{ blueprint_fine }} == {{ monaco_fine }} & - {{ blueprint_fine }} == {{ azimuth_pbmc }} ~ {{ blueprint_fine }}, + blueprint_fine == monaco_fine & + blueprint_fine == azimuth_pbmc ~ blueprint_fine , # Partial consensus - {{ blueprint_fine }} == {{ monaco_fine }} ~ {{ blueprint_fine }}, - {{ blueprint_fine }} == {{ azimuth_pbmc }} ~ {{ blueprint_fine }}, - {{ monaco_fine }} == {{ azimuth_pbmc }} ~ {{ monaco_fine }}, + blueprint_fine == monaco_fine ~ blueprint_fine , + blueprint_fine == azimuth_pbmc ~ blueprint_fine , + monaco_fine == azimuth_pbmc ~ monaco_fine , # T cells - str_detect({{ blueprint_fine }}, "cd8") & str_detect({{ monaco_fine }}, "cd8") & str_detect({{ azimuth_pbmc }}, "cd8") ~ "t cd8", - str_detect({{ blueprint_fine }}, "cd4|th|fh|treg") & str_detect({{ monaco_fine }}, "cd4|th|fh|treg") & str_detect({{ azimuth_pbmc }}, "cd4|th|fh|treg") ~ "t cd4", - {{ blueprint_fine }} %in% t_cells & {{ monaco_fine }} %in% t_cells & {{ azimuth_pbmc }} %in% t_cells ~ "t", + str_detect( blueprint_fine , "cd8") & str_detect( monaco_fine , "cd8") & str_detect( azimuth_pbmc , "cd8") ~ "t cd8", + str_detect( blueprint_fine , "cd4|th|fh|treg") & str_detect( monaco_fine , "cd4|th|fh|treg") & str_detect( azimuth_pbmc , "cd4|th|fh|treg") ~ "t cd4", + blueprint_fine %in% t_cells & monaco_fine %in% t_cells & azimuth_pbmc %in% t_cells ~ "t", # B cells - {{ blueprint_fine }} %in% b_cells & {{ monaco_fine }} %in% b_cells & {{ azimuth_pbmc }} %in% b_cells ~ "b", + blueprint_fine %in% b_cells & monaco_fine %in% b_cells & azimuth_pbmc %in% b_cells ~ "b", # Monocytic cells - {{ blueprint_fine }} %in% myeloid_cells & {{ monaco_fine }} %in% myeloid_cells & {{ azimuth_pbmc }} %in% myeloid_cells ~ "monocytic", + blueprint_fine %in% myeloid_cells & monaco_fine %in% myeloid_cells & azimuth_pbmc %in% myeloid_cells ~ "monocytic", # ILCs - {{ blueprint_fine }} %in% ilcs & {{ monaco_fine }} %in% ilcs & {{ azimuth_pbmc }} %in% ilcs ~ "ilc", + blueprint_fine %in% ilcs & monaco_fine %in% ilcs & azimuth_pbmc %in% ilcs ~ "ilc", # Citotoxic - ( {{ blueprint_fine }} %in% ilcs | str_detect({{ blueprint_fine }}, "cd8") ) & - ( {{ monaco_fine }} %in% ilcs | str_detect({{ monaco_fine }}, "cd8") ) & - ( {{ azimuth_pbmc }} %in% ilcs | str_detect({{ azimuth_pbmc }}, "cd8") ) ~ "citotoxic", + ( blueprint_fine %in% ilcs | str_detect( blueprint_fine , "cd8") ) & + ( monaco_fine %in% ilcs | str_detect( monaco_fine , "cd8") ) & + ( azimuth_pbmc %in% ilcs | str_detect( azimuth_pbmc , "cd8") ) ~ "citotoxic", ################## # Partial consensus broad cell types ################## # T cells - str_detect({{ blueprint_fine }}, "cd8") & str_detect({{ monaco_fine }}, "cd8") ~ "t cd8", - str_detect({{ blueprint_fine }}, "cd8") & str_detect({{ azimuth_pbmc }}, "cd8") ~ "t cd8", - str_detect({{ monaco_fine }}, "cd8") & str_detect({{ azimuth_pbmc }}, "cd8") ~ "t cd8", + str_detect( blueprint_fine , "cd8") & str_detect( monaco_fine , "cd8") ~ "t cd8", + str_detect( blueprint_fine , "cd8") & str_detect( azimuth_pbmc , "cd8") ~ "t cd8", + str_detect( monaco_fine , "cd8") & str_detect( azimuth_pbmc , "cd8") ~ "t cd8", - str_detect({{ blueprint_fine }}, "cd4|th|fh|treg") & str_detect({{ monaco_fine }}, "cd4|th|fh|treg") ~ "t cd4", - str_detect({{ blueprint_fine }}, "cd4|th|fh|treg") & str_detect({{ azimuth_pbmc }}, "cd4|th|fh|treg") ~ "t cd4", - str_detect({{ monaco_fine }}, "cd4|th|fh|treg") & str_detect({{ azimuth_pbmc }}, "cd4|th|fh|treg") ~ "t cd4", + str_detect( blueprint_fine , "cd4|th|fh|treg") & str_detect( monaco_fine , "cd4|th|fh|treg") ~ "t cd4", + str_detect( blueprint_fine , "cd4|th|fh|treg") & str_detect( azimuth_pbmc , "cd4|th|fh|treg") ~ "t cd4", + str_detect( monaco_fine , "cd4|th|fh|treg") & str_detect( azimuth_pbmc , "cd4|th|fh|treg") ~ "t cd4", - {{ blueprint_fine }} %in% t_cells & {{ monaco_fine }} %in% t_cells ~ "t", - {{ blueprint_fine }} %in% t_cells & {{ azimuth_pbmc }} %in% t_cells ~ "t", - {{ monaco_fine }} %in% t_cells & {{ azimuth_pbmc }} %in% t_cells ~ "t", + blueprint_fine %in% t_cells & monaco_fine %in% t_cells ~ "t", + blueprint_fine %in% t_cells & azimuth_pbmc %in% t_cells ~ "t", + monaco_fine %in% t_cells & azimuth_pbmc %in% t_cells ~ "t", # B cells - {{ blueprint_fine }} %in% b_cells & {{ monaco_fine }} %in% b_cells ~ "b", - {{ blueprint_fine }} %in% b_cells & {{ azimuth_pbmc }} %in% b_cells ~ "b", - {{ monaco_fine }} %in% b_cells & {{ azimuth_pbmc }} %in% b_cells ~ "b", + blueprint_fine %in% b_cells & monaco_fine %in% b_cells ~ "b", + blueprint_fine %in% b_cells & azimuth_pbmc %in% b_cells ~ "b", + monaco_fine %in% b_cells & azimuth_pbmc %in% b_cells ~ "b", # Monocytic cells - {{ blueprint_fine }} %in% myeloid_cells & {{ monaco_fine }} %in% myeloid_cells ~ "monocytic", - {{ blueprint_fine }} %in% myeloid_cells & {{ azimuth_pbmc }} %in% myeloid_cells ~ "monocytic", - {{ monaco_fine }} %in% myeloid_cells & {{ azimuth_pbmc }} %in% myeloid_cells ~ "monocytic", + blueprint_fine %in% myeloid_cells & monaco_fine %in% myeloid_cells ~ "monocytic", + blueprint_fine %in% myeloid_cells & azimuth_pbmc %in% myeloid_cells ~ "monocytic", + monaco_fine %in% myeloid_cells & azimuth_pbmc %in% myeloid_cells ~ "monocytic", # ILCs - {{ blueprint_fine }} %in% ilcs & {{ monaco_fine }} %in% ilcs ~ "ilc", - {{ blueprint_fine }} %in% ilcs & {{ azimuth_pbmc }} %in% ilcs ~ "ilc", - {{ monaco_fine }} %in% ilcs & {{ azimuth_pbmc }} %in% ilcs ~ "ilc", + blueprint_fine %in% ilcs & monaco_fine %in% ilcs ~ "ilc", + blueprint_fine %in% ilcs & azimuth_pbmc %in% ilcs ~ "ilc", + monaco_fine %in% ilcs & azimuth_pbmc %in% ilcs ~ "ilc", # Citotoxic - ( {{ blueprint_fine }} %in% ilcs | str_detect({{ blueprint_fine }}, "cd8") ) & - ( {{ monaco_fine }} %in% ilcs | str_detect({{ monaco_fine }}, "cd8") ) ~ "citotoxic", + ( blueprint_fine %in% ilcs | str_detect( blueprint_fine , "cd8") ) & + ( monaco_fine %in% ilcs | str_detect( monaco_fine , "cd8") ) ~ "citotoxic", - ( {{ blueprint_fine }} %in% ilcs | str_detect({{ blueprint_fine }}, "cd8") ) & - ( {{ azimuth_pbmc }} %in% ilcs | str_detect({{ azimuth_pbmc }}, "cd8") ) ~ "citotoxic", + ( blueprint_fine %in% ilcs | str_detect( blueprint_fine , "cd8") ) & + ( azimuth_pbmc %in% ilcs | str_detect( azimuth_pbmc , "cd8") ) ~ "citotoxic", - ( {{ monaco_fine }} %in% ilcs | str_detect({{ monaco_fine }}, "cd8") ) & - ( {{ azimuth_pbmc }} %in% ilcs | str_detect({{ azimuth_pbmc }}, "cd8") ) ~ "citotoxic", + ( monaco_fine %in% ilcs | str_detect( monaco_fine , "cd8") ) & + ( azimuth_pbmc %in% ilcs | str_detect( azimuth_pbmc , "cd8") ) ~ "citotoxic", TRUE ~ NA_character_ )) - - - all_combinations |> - rowid_to_column("combination_id") |> - pivot_longer(-combination_id, names_to = "Database", values_to = "Reference") |> - left_join(conversion_table, relationship = "many-to-many") |> - select(-Reference) |> - pivot_wider(names_from = Database, values_from = Query, values_fn = function(x) paste(unique(x), collapse = ",")) - - - - x |> - mutate( - !!blueprint_fine := blueprint |> select(-Database) |> deframe() |> _[!!blueprint_fine] + # |> + # rowid_to_column("combination_id") |> + # pivot_longer(-combination_id, names_to = "Database", values_to = "Reference") |> + # left_join(conversion_table, relationship = "many-to-many") |> + # select(-Reference) |> + # pivot_wider(names_from = Database, values_from = Query, values_fn = function(x) paste(unique(x), collapse = ",")) + + # parse names + tibble( + blueprint_fine = blueprint |> select(-Database) |> deframe() |> _[!!blueprint_input], + monaco_fine = monaco |> select(-Database) |> deframe() |> _[!!monaco_input], + azimuth_pbmc = azimuth |> select(-Database) |> deframe() |> _[!!azimuth_input], + ) |> + left_join( + all_combinations, + by = join_by( + blueprint_fine == blueprint_fine, + monaco_fine == monaco_fine, + azimuth_pbmc == azimuth_pbmc + ) ) |> - select(.cell, !!blueprint_fine, !!monaco_fine, !!azimuth_pbmc) |> - pivot_longer(-.cell, names_to = "Database", values_to = "Query") |> - mutate(Query = Query |> tolower()) |> - left_join(conversion_table |> mutate(Query = Query |> tolower()), copy = TRUE) |> - select(-Query) |> - pivot_wider(names_from = Database, values_from = Reference) + pull(consensus) # From 792e2ca06f02987770d9e71cbced6208f578ea04 Mon Sep 17 00:00:00 2001 From: stemangiola Date: Wed, 2 Oct 2024 06:11:07 +1000 Subject: [PATCH 043/145] improve the consensus function --- R/utilities.R | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/R/utilities.R b/R/utilities.R index 3b1baa4f..eac81fa8 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -886,26 +886,37 @@ is_strong_evidence = function(single_cell_data, cell_annotation_azimuth_l2, cell #' reference_annotation_to_consensus #' -#' This function takes a vector of cell types and applies a series of transformations -#' to clean and standardize them for better consistency. +#' This function takes cell type annotations from multiple datasets (Azimuth, Monaco, Blueprint) and harmonizes them into a consensus annotation. The function utilizes predefined mappings between cell type labels in these datasets to generate standardized cell types across references. #' #' @importFrom dplyr %>% #' @importFrom dplyr mutate -#' -#' @importFrom stringr str_remove_all -#' @importFrom stringr str_remove -#' @importFrom stringr str_replace +#' @importFrom dplyr case_when +#' @importFrom dplyr left_join +#' @importFrom dplyr tribble +#' @importFrom tidyr expand_grid #' @importFrom stringr str_detect -#' @importFrom stringr str_replace_all -#' @importFrom stringr str_trim +#' +#' @param azimuth_input A vector of cell type annotations from the Azimuth dataset. +#' @param monaco_input A vector of cell type annotations from the Monaco dataset. +#' @param blueprint_input A vector of cell type annotations from the Blueprint dataset. #' -#' @param x A vector of cell types. +#' @return A vector of consensus cell type annotations, merging inputs from the three datasets. #' -#' @return A cleaned and standardized vector of cell types. +#' @examples +#' # Example usage: +#' tibble( +#' azimuth_predicted.celltype.l2 = c("CD8 TEM", "NK", "CD4 Naive"), +#' monaco_first.labels.fine = c("Effector memory CD8 T cells", "Natural killer cells", "Naive CD4 T cells"), +#' blueprint_first.labels.fine = c("CD8+ Tem", "NK cells", "Naive B-cells") +#' ) %>% +#' mutate(consensus = reference_annotation_to_consensus( +#' azimuth_predicted.celltype.l2, monaco_first.labels.fine, blueprint_first.labels.fine)) +#' +#' @note This function is designed to harmonize specific cell types, especially T cells, B cells, monocytic cells, and innate lymphoid cells (ILCs), across reference datasets. #' -# @examples -# cell_types <- c("CD4 T Cell, AlphaBeta", "NK cell, gammadelta", "Central Memory") -# cleaned_cell_types <- clean_cell_types_deeper(cell_types) +#' @seealso \code{\link[dplyr]{mutate}}, \code{\link[stringr]{str_detect}}, \code{\link[tidyr]{expand_grid}} +#' +#' @export reference_annotation_to_consensus = function(azimuth_input, monaco_input, blueprint_input){ # azimuth_pbmc = enquo(azimuth_pbmc) From c26a7ecc06e490d0222cdefa97004b68f550cd4c Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Fri, 4 Oct 2024 06:18:13 +0300 Subject: [PATCH 044/145] move cellChat to dev because it is using the version v1 rather than v2, we need to update --- R/CellChat.R | 1115 -------------------------------------------------- 1 file changed, 1115 deletions(-) delete mode 100644 R/CellChat.R diff --git a/R/CellChat.R b/R/CellChat.R deleted file mode 100644 index e230ba60..00000000 --- a/R/CellChat.R +++ /dev/null @@ -1,1115 +0,0 @@ -# More robust implementation that does not fail if no results - -#' @importFrom CellChat searchPair -cellchat_matrix_for_circle = function (object, signaling, signaling.name = NULL, color.use = NULL, - vertex.receiver = NULL, sources.use = NULL, targets.use = NULL, - top = 1, remove.isolate = FALSE, vertex.weight = NULL, vertex.weight.max = NULL, - vertex.size.max = 15, weight.scale = TRUE, edge.weight.max = NULL, - edge.width.max = 8, layout = c("hierarchy", "circle", "chord"), - thresh = 0.05, from = NULL, to = NULL, bidirection = NULL, - vertex.size = NULL, pt.title = 12, title.space = 6, vertex.label.cex = 0.8, - group = NULL, cell.order = NULL, small.gap = 1, big.gap = 10, - scale = FALSE, reduce = -1, show.legend = FALSE, legend.pos.x = 20, - legend.pos.y = 20, ...) { - - # Fix GCHECK - pathway_name = NULL - - if(object@LR$LRsig %>% filter(pathway_name == signaling) %>% nrow %>% magrittr::equals(0)) return(NULL) - - layout <- match.arg(layout) - if (!is.null(vertex.size)) { - warning("'vertex.size' is deprecated. Use `vertex.weight`") - } - if (is.null(vertex.weight)) { - vertex.weight <- as.numeric(table(object@idents)) - } - pairLR <- searchPair(signaling = signaling, pairLR.use = object@LR$LRsig, - key = "pathway_name", matching.exact = T, pair.only = T) - if (is.null(signaling.name)) { - signaling.name <- signaling - } - net <- object@net - pairLR.use.name <- dimnames(net$prob)[[3]] - pairLR.name <- intersect(rownames(pairLR), pairLR.use.name) - pairLR <- pairLR[pairLR.name, ] - prob <- net$prob - pval <- net$pval - prob[pval > thresh] <- 0 - if (length(pairLR.name) > 1) { - pairLR.name.use <- pairLR.name[apply(prob[, , pairLR.name], - 3, sum) != 0] - } - else { - pairLR.name.use <- pairLR.name[sum(prob[, , pairLR.name]) != - 0] - } - if (length(pairLR.name.use) == 0) { - return(NULL) - #stop(paste0("There is no significant communication of ", signaling.name)) - } - else { - pairLR <- pairLR[pairLR.name.use, ] - } - nRow <- length(pairLR.name.use) - prob <- prob[, , pairLR.name.use] - pval <- pval[, , pairLR.name.use] - if (length(dim(prob)) == 2) { - prob <- replicate(1, prob, simplify = "array") - pval <- replicate(1, pval, simplify = "array") - } - prob.sum <- apply(prob, c(1, 2), sum) - - prob.sum -} - -#' @importFrom tidyr gather -#' @importFrom dplyr if_else -cellchat_process_sample_signal = function (object, signaling = NULL, pattern = c("outgoing", - "incoming", "all"), slot.name = "netP", color.use = NULL, - color.heatmap = "BuGn", title = NULL, width = 10, height = 8, - font.size = 8, font.size.title = 10, cluster.rows = FALSE, - cluster.cols = FALSE) -{ - # Fix GCHECK - cell_type = NULL - value = NULL - gene = NULL - - pattern <- match.arg(pattern) - if (length(slot(object, slot.name)$centr) == 0) { - stop("Please run `netAnalysis_computeCentrality` to compute the network centrality scores! ") - } - centr <- slot(object, slot.name)$centr - outgoing <- matrix(0, nrow = nlevels(object@idents), ncol = length(centr)) - incoming <- matrix(0, nrow = nlevels(object@idents), ncol = length(centr)) - dimnames(outgoing) <- list(levels(object@idents), names(centr)) - dimnames(incoming) <- dimnames(outgoing) - for (i in 1:length(centr)) { - outgoing[, i] <- centr[[i]]$outdeg - incoming[, i] <- centr[[i]]$indeg - } - if (pattern == "outgoing") { - mat <- t(outgoing) - legend.name <- "Outgoing" - } - else if (pattern == "incoming") { - mat <- t(incoming) - legend.name <- "Incoming" - } - else if (pattern == "all") { - mat <- t(outgoing + incoming) - legend.name <- "Overall" - } - if (is.null(title)) { - title <- paste0(legend.name, " signaling patterns") - } - else { - title <- paste0(paste0(legend.name, " signaling patterns"), - " - ", title) - } - if (!is.null(signaling)) { - mat1 <- mat[rownames(mat) %in% signaling, , drop = FALSE] - mat <- matrix(0, nrow = length(signaling), ncol = ncol(mat)) - idx <- match(rownames(mat1), signaling) - mat[idx[!is.na(idx)], ] <- mat1 - dimnames(mat) <- list(signaling, colnames(mat1)) - } - mat.ori <- mat - mat <- sweep(mat, 1L, apply(mat, 1, max), "/", check.margin = FALSE) - mat[mat == 0] <- NA - - mat %>% - as_tibble(rownames = "gene") %>% - gather(cell_type, value, -gene) %>% - mutate(value = if_else(value %in% c(NaN, NA), 0, value)) -} - -computeCommunProbPathway= function (object = NULL, net = NULL, pairLR.use = NULL, thresh = 0.05) -{ - if (is.null(net)) { - net <- object@net - } - if (is.null(pairLR.use)) { - pairLR.use <- object@LR$LRsig - } - prob <- net$prob - prob[net$pval > thresh] <- 0 - pathways <- unique(pairLR.use$pathway_name) - group <- factor(pairLR.use$pathway_name, levels = pathways) - - # STEFANO FIX - if(length(levels(group))==1){ - xx = apply(prob, c(1, 2), by, group, sum) - prob.pathways = xx |> array(dim = c(nrow(xx), ncol(xx), 1), dimnames = list(rownames(xx), colnames(xx), levels(group))) - } - else - prob.pathways <- aperm(apply(prob, c(1, 2), by, group, sum), - c(2, 3, 1)) - - - - pathways.sig <- pathways[apply(prob.pathways, 3, sum) != 0] - prob.pathways.sig <- prob.pathways[, , pathways.sig, drop=FALSE] - idx <- sort(apply(prob.pathways.sig, 3, sum), decreasing = TRUE, - index.return = TRUE)$ix - pathways.sig <- pathways.sig[idx] - prob.pathways.sig <- prob.pathways.sig[, , idx, drop=FALSE] - if (is.null(object)) { - netP = list(pathways = pathways.sig, prob = prob.pathways.sig) - return(netP) - } - else { - object@netP$pathways <- pathways.sig - object@netP$prob <- prob.pathways.sig - return(object) - } -} - -#' @importFrom CellChat triMean computeExpr_LR computeExpr_coreceptor computeRegionDistance computeExpr_agonist -computeCommunProb = function (object, type = c("triMean", "truncatedMean", "thresholdedMean", - "median"), trim = 0.1, LR.use = NULL, raw.use = TRUE, population.size = FALSE, - distance.use = TRUE, interaction.length = 200, scale.distance = 0.01, - k.min = 10, nboot = 100, seed.use = 1L, Kh = 0.5, n = 1) -{ - - - type <- match.arg(type) - cat(type, "is used for calculating the average gene expression per cell group.", - "\n") - FunMean <- switch(type, triMean = triMean, truncatedMean = function(x) mean(x, - trim = trim, na.rm = TRUE), median = function(x) median(x, - na.rm = TRUE)) - if (raw.use) { - data <- as.matrix(object@data.signaling) - } - else { - data <- object@data.project - } - if (is.null(LR.use)) { - pairLR.use <- object@LR$LRsig - } - else { - pairLR.use <- LR.use - } - complex_input <- object@DB$complex - cofactor_input <- object@DB$cofactor - my.sapply <- sapply - ptm = Sys.time() - pairLRsig <- pairLR.use - group <- object@idents - geneL <- as.character(pairLRsig$ligand) - geneR <- as.character(pairLRsig$receptor) - nLR <- nrow(pairLRsig) - numCluster <- nlevels(group) - if (numCluster != length(unique(group))) { - stop("Please check `unique(object@idents)` and ensure that the factor levels are correct!\n You may need to drop unused levels using 'droplevels' function. e.g.,\n `meta$labels = droplevels(meta$labels, exclude = setdiff(levels(meta$labels),unique(meta$labels)))`") - } - data.use <- data/max(data) - nC <- ncol(data.use) - data.use.avg <- aggregate(t(data.use), list(group), FUN = FunMean) - data.use.avg <- t(data.use.avg[, -1]) - colnames(data.use.avg) <- levels(group) - dataLavg <- computeExpr_LR(geneL, data.use.avg, complex_input) - dataRavg <- computeExpr_LR(geneR, data.use.avg, complex_input) - - # STEFANO ADDED THIS - dataRavg[dataRavg=="NaN"]=0 - dataLavg[dataLavg=="NaN"]=0 - - dataRavg.co.A.receptor <- computeExpr_coreceptor(cofactor_input, - data.use.avg, pairLRsig, type = "A") - dataRavg.co.I.receptor <- computeExpr_coreceptor(cofactor_input, - data.use.avg, pairLRsig, type = "I") - dataRavg <- dataRavg * dataRavg.co.A.receptor/dataRavg.co.I.receptor - dataLavg2 <- t(replicate(nrow(dataLavg), as.numeric(table(group))/nC)) - dataRavg2 <- dataLavg2 - index.agonist <- which(!is.na(pairLRsig$agonist) & pairLRsig$agonist != - "") - index.antagonist <- which(!is.na(pairLRsig$antagonist) & - pairLRsig$antagonist != "") - if (object@options$datatype != "RNA") { - data.spatial <- object@images$coordinates - spot.size.fullres <- object@images$scale.factors$spot - spot.size <- object@images$scale.factors$spot.diameter - d.spatial <- computeRegionDistance(coordinates = data.spatial, - group = group, trim = trim, interaction.length = interaction.length, - spot.size = spot.size, spot.size.fullres = spot.size.fullres, - k.min = k.min) - if (distance.use) { - print(paste0(">>> Run CellChat on spatial imaging data using distances as constraints <<< [", - Sys.time(), "]")) - d.spatial <- d.spatial * scale.distance - diag(d.spatial) <- NaN - cat("The suggested minimum value of scaled distances is in [1,2], and the calculated value here is ", - min(d.spatial, na.rm = TRUE), "\n") - if (min(d.spatial, na.rm = TRUE) < 1) { - stop("Please increase the value of `scale.distance` and check the suggested values in the parameter description (e.g., 1, 0.1, 0.01, 0.001, 0.11, 0.011)") - } - P.spatial <- 1/d.spatial - P.spatial[is.na(d.spatial)] <- 0 - diag(P.spatial) <- max(P.spatial) - d.spatial <- d.spatial/scale.distance - } - else { - print(paste0(">>> Run CellChat on spatial imaging data without distances as constraints <<< [", - Sys.time(), "]")) - P.spatial <- matrix(1, nrow = numCluster, ncol = numCluster) - P.spatial[is.na(d.spatial)] <- 0 - } - } - else { - print(paste0(">>> Run CellChat on sc/snRNA-seq data <<< [", - Sys.time(), "]")) - d.spatial <- matrix(NaN, nrow = numCluster, ncol = numCluster) - P.spatial <- matrix(1, nrow = numCluster, ncol = numCluster) - distance.use = NULL - interaction.length = NULL - spot.size = NULL - spot.size.fullres = NULL - k.min = NULL - } - Prob <- array(0, dim = c(numCluster, numCluster, nLR)) - Pval <- array(0, dim = c(numCluster, numCluster, nLR)) - set.seed(seed.use) - permutation <- replicate(nboot, sample.int(nC, size = nC)) - data.use.avg.boot <- my.sapply(X = 1:nboot, FUN = function(nE) { - groupboot <- group[permutation[, nE]] - data.use.avgB <- aggregate(t(data.use), list(groupboot), - FUN = FunMean) - data.use.avgB <- t(data.use.avgB[, -1]) - return(data.use.avgB) - }, simplify = FALSE) - pb <- txtProgressBar(min = 0, max = nLR, style = 3, file = stderr()) - for (i in 1:nLR) { - dataLR <- Matrix::crossprod(matrix(dataLavg[i, ], nrow = 1), - matrix(dataRavg[i, ], nrow = 1)) - P1 <- dataLR^n/(Kh^n + dataLR^n) - P1_Pspatial <- P1 * P.spatial - if (sum(P1_Pspatial) == 0) { - Pnull = P1_Pspatial - Prob[, , i] <- Pnull - p = 1 - Pval[, , i] <- matrix(p, nrow = numCluster, ncol = numCluster, - byrow = FALSE) - } - else { - if (is.element(i, index.agonist)) { - data.agonist <- computeExpr_agonist(data.use = data.use.avg, - pairLRsig, cofactor_input, index.agonist = i, - Kh = Kh, n = n) - P2 <- Matrix::crossprod(matrix(data.agonist, - nrow = 1)) - } - else { - P2 <- matrix(1, nrow = numCluster, ncol = numCluster) - } - if (is.element(i, index.antagonist)) { - data.antagonist <- CellChat::computeExpr_antagonist(data.use = data.use.avg, - pairLRsig, cofactor_input, index.antagonist = i, - Kh = Kh, n = n) - P3 <- Matrix::crossprod(matrix(data.antagonist, - nrow = 1)) - } - else { - P3 <- matrix(1, nrow = numCluster, ncol = numCluster) - } - if (population.size) { - P4 <- Matrix::crossprod(matrix(dataLavg2[i, - ], nrow = 1), matrix(dataRavg2[i, ], nrow = 1)) - } - else { - P4 <- matrix(1, nrow = numCluster, ncol = numCluster) - } - Pnull = P1 * P2 * P3 * P4 * P.spatial - Prob[, , i] <- Pnull - Pnull <- as.vector(Pnull) - Pboot <- sapply(X = 1:nboot, FUN = function(nE) { - data.use.avgB <- data.use.avg.boot[[nE]] - dataLavgB <- computeExpr_LR(geneL[i], data.use.avgB, - complex_input) - dataRavgB <- computeExpr_LR(geneR[i], data.use.avgB, - complex_input) - dataRavgB.co.A.receptor <- computeExpr_coreceptor(cofactor_input, - data.use.avgB, pairLRsig[i, , drop = FALSE], - type = "A") - dataRavgB.co.I.receptor <- computeExpr_coreceptor(cofactor_input, - data.use.avgB, pairLRsig[i, , drop = FALSE], - type = "I") - dataRavgB <- dataRavgB * dataRavgB.co.A.receptor/dataRavgB.co.I.receptor - dataLRB = Matrix::crossprod(dataLavgB, dataRavgB) - P1.boot <- dataLRB^n/(Kh^n + dataLRB^n) - if (is.element(i, index.agonist)) { - data.agonist <- computeExpr_agonist(data.use = data.use.avgB, - pairLRsig, cofactor_input, index.agonist = i, - Kh = Kh, n = n) - P2.boot <- Matrix::crossprod(matrix(data.agonist, - nrow = 1)) - } - else { - P2.boot <- matrix(1, nrow = numCluster, ncol = numCluster) - } - if (is.element(i, index.antagonist)) { - data.antagonist <- CellChat::computeExpr_antagonist(data.use = data.use.avgB, - pairLRsig, cofactor_input, index.antagonist = i, - Kh = Kh, n = n) - P3.boot <- Matrix::crossprod(matrix(data.antagonist, - nrow = 1)) - } - else { - P3.boot <- matrix(1, nrow = numCluster, ncol = numCluster) - } - if (population.size) { - groupboot <- group[permutation[, nE]] - dataLavg2B <- as.numeric(table(groupboot))/nC - dataLavg2B <- matrix(dataLavg2B, nrow = 1) - dataRavg2B <- dataLavg2B - P4.boot = Matrix::crossprod(dataLavg2B, dataRavg2B) - } - else { - P4.boot = matrix(1, nrow = numCluster, ncol = numCluster) - } - Pboot = P1.boot * P2.boot * P3.boot * P4.boot * - P.spatial - return(as.vector(Pboot)) - }) - Pboot <- matrix(unlist(Pboot), nrow = length(Pnull), - ncol = nboot, byrow = FALSE) - nReject <- rowSums(Pboot - Pnull > 0) - p = nReject/nboot - Pval[, , i] <- matrix(p, nrow = numCluster, ncol = numCluster, - byrow = FALSE) - } - setTxtProgressBar(pb = pb, value = i) - } - close(con = pb) - Pval[Prob == 0] <- 1 - dimnames(Prob) <- list(levels(group), levels(group), rownames(pairLRsig)) - dimnames(Pval) <- dimnames(Prob) - net <- list(prob = Prob, pval = Pval) - execution.time = Sys.time() - ptm - object@options$run.time <- as.numeric(execution.time, units = "secs") - object@options$parameter <- list(type.mean = type, trim = trim, - raw.use = raw.use, population.size = population.size, - nboot = nboot, seed.use = seed.use, Kh = Kh, n = n, - distance.use = distance.use, interaction.length = interaction.length, - spot.size = spot.size, spot.size.fullres = spot.size.fullres, - k.min = k.min) - if (object@options$datatype != "RNA") { - object@images$distance <- d.spatial - } - object@net <- net - print(paste0(">>> CellChat inference is done. Parameter values are stored in `object@options$parameter` <<< [", - Sys.time(), "]")) - return(object) -} - -#' @importFrom future nbrOfWorkers -#' @importFrom methods slot -#' @importFrom pbapply pbsapply -#' @import future.apply -netAnalysis_computeCentrality = function (object = NULL, slot.name = "netP", net = NULL, net.name = NULL, - thresh = 0.05) -{ - if (is.null(net)) { - prob <- methods::slot(object, slot.name)$prob - pval <- methods::slot(object, slot.name)$pval - pval[prob == 0] <- 1 - prob[pval >= thresh] <- 0 - net = prob - } - if (is.null(net.name)) { - net.name <- dimnames(net)[[3]] - } - if (length(dim(net)) == 3) { - nrun <- dim(net)[3] - my.sapply <- ifelse(test = future::nbrOfWorkers() == - 1, yes = pbapply::pbsapply, no = future.apply::future_sapply) - centr.all = my.sapply(X = 1:nrun, FUN = function(x) { - net0 <- net[, , x] - - # ADDED BY STEFANO - net0[net0<0] = 0 - - return(computeCentralityLocal(net0)) - }, simplify = FALSE) - } - else { - centr.all <- as.list(computeCentralityLocal(net)) - } - names(centr.all) <- net.name - if (is.null(object)) { - return(centr.all) - } - else { - slot(object, slot.name)$centr <- centr.all - return(object) - } -} - -cellchat_circle_plot = function(pathway, x, y, DB, joint){ - - cellchat_diff_for_circle(pathway, x, y) %>% - draw_cellchat_circle_plot( - vertex.weight = as.numeric((table(x@idents) + table(y@idents))/2), - title.name = paste(pathway, DB, "\n", select_genes_for_circle_plot(joint, pathway)), - edge.width.max = 4 - ) -} - -#' @importFrom purrr when -cellchat_diff_for_circle = function(pathway, x, y){ - - # Fix GCHECK - . = NULL - - zero_matrix = - pathway %>% - when( - (.) %in% x@netP$pathways ~ cellchat_matrix_for_circle(x, layout = "circle", signaling = .), - (.) %in% y@netP$pathways ~ cellchat_matrix_for_circle(y, layout = "circle", signaling = .) - ) %>% - `-` (.,.) - - m1 = pathway %>% - when( - (.) %in% x@netP$pathways ~ cellchat_matrix_for_circle(x, layout = "circle", signaling = .), - ~ zero_matrix - ) - - m2 = pathway %>% - when( - (.) %in% y@netP$pathways ~ cellchat_matrix_for_circle(y, layout = "circle", signaling = .), - ~ zero_matrix - ) - - m2 - m1 -} - -#' @importFrom igraph graph_from_adjacency_matrix layout_ -#' @importFrom CellChat scPalette -#' @importFrom reshape2 melt -#' @importFrom patchwork wrap_elements -#' @importFrom cowplot as_grob -#' @importFrom circlize colorRamp2 -#' @importFrom RColorBrewer brewer.pal -#' @importFrom scales rescale -#' @importFrom igraph in_circle -draw_cellchat_circle_plot = function (net, color.use = NULL, title.name = NULL, sources.use = NULL, - targets.use = NULL, remove.isolate = FALSE, top = 1, top_absolute = NULL, weight.scale = T, - vertex.weight = 20, vertex.weight.max = NULL, vertex.size.max = 15, - vertex.label.cex = 0.8, vertex.label.color = "black", edge.weight.max = NULL, - edge.width.max = 8, alpha.edge = 0.6, label.edge = FALSE, - edge.label.color = "black", edge.label.cex = 0.8, edge.curved = 0.2, - shape = "circle", layout = in_circle(), margin = 0.2, vertex.size = NULL, - arrow.width = 1, arrow.size = 0.2) -{ - # Pass GCHECKS - target = NULL - - if (!is.null(vertex.size)) { - warning("'vertex.size' is deprecated. Use `vertex.weight`") - } - options(warn = -1) - - if(!is.null(top_absolute)) { - thresh = top_absolute - net[abs(net) < thresh] <- 0 - } - - thresh <- stats::quantile(as.numeric(net) %>% abs %>% .[.>0], probs = 1 - top) - - net[abs(net) < thresh] <- 0 - - if(sum(net)==0) return(NULL) - - if ((!is.null(sources.use)) | (!is.null(targets.use))) { - if (is.null(rownames(net))) { - stop("The input weighted matrix should have rownames!") - } - cells.level <- rownames(net) - df.net <- reshape2::melt(net, value.name = "value") - colnames(df.net)[1:2] <- c("source", "target") - if (!is.null(sources.use)) { - if (is.numeric(sources.use)) { - sources.use <- cells.level[sources.use] - } - df.net <- subset(df.net, source %in% sources.use) - } - if (!is.null(targets.use)) { - if (is.numeric(targets.use)) { - targets.use <- cells.level[targets.use] - } - df.net <- subset(df.net, target %in% targets.use) - } - df.net$source <- factor(df.net$source, levels = cells.level) - df.net$target <- factor(df.net$target, levels = cells.level) - df.net$value[is.na(df.net$value)] <- 0 - net <- tapply(df.net[["value"]], list(df.net[["source"]], - df.net[["target"]]), sum) - } - net[is.na(net)] <- 0 - if (remove.isolate) { - idx1 <- which(Matrix::rowSums(net) == 0) - idx2 <- which(Matrix::colSums(net) == 0) - idx <- intersect(idx1, idx2) - if(length(idx)>0){ - net <- net[-idx, ,drop=FALSE] - net <- net[, -idx, drop=FALSE] - } - } - g <- igraph::graph_from_adjacency_matrix(net, mode = "directed", - weighted = T) - edge.start <- igraph::ends(g, es = igraph::E(g), names = FALSE) - coords <- igraph::layout_(g, layout) - if (nrow(coords) != 1) { - coords_scale = scale(coords) - } - else { - coords_scale <- coords - } - if (is.null(color.use)) { - color.use = CellChat::scPalette(length(igraph::V(g))) - } - if (is.null(vertex.weight.max)) { - vertex.weight.max <- max(vertex.weight) - } - vertex.weight <- vertex.weight/vertex.weight.max * vertex.size.max + - 5 - loop.angle <- ifelse(coords_scale[igraph::V(g), 1] > 0, -atan(coords_scale[igraph::V(g), - 2]/coords_scale[igraph::V(g), 1]), pi - atan(coords_scale[igraph::V(g), - 2]/coords_scale[igraph::V(g), 1])) - igraph::V(g)$size <- vertex.weight - igraph::V(g)$color <- color.use[igraph::V(g)] - igraph::V(g)$frame.color <- color.use[igraph::V(g)] - igraph::V(g)$label.color <- vertex.label.color - igraph::V(g)$label.cex <- vertex.label.cex - if (label.edge) { - igraph::E(g)$label <- igraph::E(g)$weight - igraph::E(g)$label <- round(igraph::E(g)$label, digits = 1) - } - if (is.null(edge.weight.max)) { - edge.weight.max <- max(abs(igraph::E(g)$weight)) - } - if (weight.scale == TRUE) { - igraph::E(g)$width <- 0.3 + abs(igraph::E(g)$weight)/edge.weight.max * - edge.width.max - } - else { - igraph::E(g)$width <- 0.3 + edge.width.max * abs(igraph::E(g)$weight) - } - igraph::E(g)$arrow.width <- arrow.width - igraph::E(g)$arrow.size <- arrow.size - igraph::E(g)$label.color <- edge.label.color - igraph::E(g)$label.cex <- edge.label.cex - - igraph::E(g)$color = - circlize::colorRamp2(seq(max(abs(igraph::E(g)$weight)), -max(abs(igraph::E(g)$weight)), length.out =11), RColorBrewer::brewer.pal(11, "RdBu"))(igraph::E(g)$weight) %>% - grDevices::adjustcolor(alpha.edge) - - - if (sum(edge.start[, 2] == edge.start[, 1]) != 0) { - igraph::E(g)$loop.angle[which(edge.start[, 2] == edge.start[, - 1])] <- loop.angle[edge.start[which(edge.start[, - 2] == edge.start[, 1]), 1]] - } - radian.rescale <- function(x, start = 0, direction = 1) { - c.rotate <- function(x) (x + start)%%(2 * pi) * direction - c.rotate(scales::rescale(x, c(0, 2 * pi), range(x))) - } - label.locs <- radian.rescale(x = 1:length(igraph::V(g)), - direction = -1, start = 0) - label.dist <- vertex.weight/max(vertex.weight) + 2 - plot(g, edge.curved = edge.curved, vertex.shape = shape, - layout = coords_scale, margin = margin, vertex.label.dist = label.dist, - vertex.label.degree = label.locs, vertex.label.family = "Helvetica", - edge.label.family = "Helvetica") - if (!is.null(title.name)) { - text(0, 1.5, title.name, cex = 0.8) - } - - grab_grob() |> cowplot::as_grob() |> patchwork::wrap_elements() - -} - -#' @importFrom dplyr distinct -#' -select_genes_for_circle_plot = function(x, pathway){ - # Fix GChecks - CellChatDB.human <- NULL - pathway_name <- NULL - ligand <- NULL - . <- NULL - receptor <- NULL - - - paste( - c( - x@data.signaling[rownames(x@data.signaling) %in% (CellChatDB.human$interaction %>% filter(pathway_name == pathway) %>% distinct(ligand) %>% pull(1)),, drop=F] %>% rowSums() %>% .[(.)>100] %>% names(), - x@data.signaling[rownames(x@data.signaling) %in% (CellChatDB.human$interaction %>% filter(pathway_name == pathway) %>% distinct(receptor) %>% pull(1)),, drop=F] %>% rowSums() %>% .[(.)>100] %>% names() - ) %>% unique(), - collapse = "," - ) - -} - -#' @importFrom CellChat subsetCommunication -#' @importFrom RColorBrewer brewer.pal -#' @importFrom scales viridis_pal -#' -get_table_for_cell_vs_axis_bubble_plot = function (object, sources.use = NULL, targets.use = NULL, signaling = NULL, - pairLR.use = NULL, color.heatmap = c("Spectral", "viridis"), - n.colors = 10, direction = -1, thresh = 0.05, comparison = NULL, - group = NULL, remove.isolate = FALSE, max.dataset = NULL, - min.dataset = NULL, min.quantile = 0, max.quantile = 1, - line.on = TRUE, line.size = 0.2, color.text.use = TRUE, - color.text = NULL, title.name = NULL, font.size = 10, font.size.title = 10, - show.legend = TRUE, grid.on = TRUE, color.grid = "grey90", - angle.x = 90, vjust.x = NULL, hjust.x = NULL, return.data = FALSE) -{ - - # Fix GChecks - prob.original = NULL - - # cells.level <- levels(object@idents) - # source.use.numerical = which(cells.level == source.use) - # - color.heatmap <- match.arg(color.heatmap) - if (is.list(object@net[[1]])) { - message("Comparing communications on a merged object \n") - } - else { - message("Comparing communications on a single object \n") - } - if (is.null(vjust.x) | is.null(hjust.x)) { - angle = c(0, 45, 90) - hjust = c(0, 1, 1) - vjust = c(0, 1, 0.5) - vjust.x = vjust[angle == angle.x] - hjust.x = hjust[angle == angle.x] - } - if (length(color.heatmap) == 1) { - color.use <- tryCatch({ - RColorBrewer::brewer.pal(n = n.colors, name = color.heatmap) - }, error = function(e) { - (scales::viridis_pal(option = color.heatmap, direction = -1))(n.colors) - }) - } - else { - color.use <- color.heatmap - } - if (direction == -1) { - color.use <- rev(color.use) - } - if (is.null(comparison)) { - cells.level <- levels(object@idents) - if (is.numeric(sources.use)) { - sources.use <- cells.level[sources.use] - } - if (is.numeric(targets.use)) { - targets.use <- cells.level[targets.use] - } - - # TRY CATCH - df.net <- tryCatch( - expr = { - CellChat::subsetCommunication(object, slot.name = "net", - sources.use = sources.use, targets.use = targets.use, - signaling = signaling, pairLR.use = pairLR.use, - thresh = thresh) - }, - error = function(e){ - return(NULL) - } - ) - - if(is.null(df.net)) return(NULL) - - df.net$source.target <- paste(df.net$source, df.net$target, - sep = " -> ") - source.target <- paste(rep(sources.use, each = length(targets.use)), - targets.use, sep = " -> ") - source.target.isolate <- setdiff(source.target, unique(df.net$source.target)) - if (length(source.target.isolate) > 0) { - df.net.isolate <- BiocGenerics::as.data.frame(matrix(NA, nrow = length(source.target.isolate), - ncol = ncol(df.net))) - colnames(df.net.isolate) <- colnames(df.net) - df.net.isolate$source.target <- source.target.isolate - df.net.isolate$interaction_name_2 <- df.net$interaction_name_2[1] - df.net.isolate$pval <- 1 - a <- stringr::str_split(df.net.isolate$source.target, - " -> ", simplify = T) - df.net.isolate$source <- as.character(a[, 1]) - df.net.isolate$target <- as.character(a[, 2]) - df.net <- rbind(df.net, df.net.isolate) - } - df.net$pval[df.net$pval > 0.05] = 1 - df.net$pval[df.net$pval > 0.01 & df.net$pval <= 0.05] = 2 - df.net$pval[df.net$pval <= 0.01] = 3 - df.net$prob[df.net$prob == 0] <- NA - df.net$prob.original <- df.net$prob - df.net$prob <- -1/log(df.net$prob) - idx1 <- which(is.infinite(df.net$prob) | df.net$prob < - 0) - if (sum(idx1) > 0) { - values.assign <- seq(max(df.net$prob, na.rm = T) * - 1.1, max(df.net$prob, na.rm = T) * 1.5, length.out = length(idx1)) - position <- sort(prob.original[idx1], index.return = TRUE)$ix - df.net$prob[idx1] <- values.assign[match(1:length(idx1), - position)] - } - df.net$source <- factor(df.net$source, levels = cells.level[cells.level %in% - unique(df.net$source)]) - df.net$target <- factor(df.net$target, levels = cells.level[cells.level %in% - unique(df.net$target)]) - group.names <- paste(rep(levels(df.net$source), each = length(levels(df.net$target))), - levels(df.net$target), sep = " -> ") - df.net$interaction_name_2 <- as.character(df.net$interaction_name_2) - df.net <- with(df.net, df.net[order(interaction_name_2), - ]) - df.net$interaction_name_2 <- factor(df.net$interaction_name_2, - levels = unique(df.net$interaction_name_2)) - cells.order <- group.names - df.net$source.target <- factor(df.net$source.target, - levels = cells.order) - df <- df.net - } - else { - dataset.name <- names(object@net) - df.net.all <- CellChat::subsetCommunication(object, slot.name = "net", - sources.use = sources.use, targets.use = targets.use, - signaling = signaling, pairLR.use = pairLR.use, - thresh = thresh) - df.all <- data.frame() - for (ii in 1:length(comparison)) { - cells.level <- levels(object@idents[[comparison[ii]]]) - if (is.numeric(sources.use)) { - sources.use <- cells.level[sources.use] - } - if (is.numeric(targets.use)) { - targets.use <- cells.level[targets.use] - } - df.net <- df.net.all[[comparison[ii]]] - df.net$interaction_name_2 <- as.character(df.net$interaction_name_2) - df.net$source.target <- paste(df.net$source, df.net$target, - sep = " -> ") - source.target <- paste(rep(sources.use, each = length(targets.use)), - targets.use, sep = " -> ") - source.target.isolate <- setdiff(source.target, - unique(df.net$source.target)) - if (length(source.target.isolate) > 0) { - df.net.isolate <- BiocGenerics::as.data.frame(matrix(NA, nrow = length(source.target.isolate), - ncol = ncol(df.net))) - colnames(df.net.isolate) <- colnames(df.net) - df.net.isolate$source.target <- source.target.isolate - df.net.isolate$interaction_name_2 <- df.net$interaction_name_2[1] - df.net.isolate$pval <- 1 - a <- stringr::str_split(df.net.isolate$source.target, - " -> ", simplify = T) - df.net.isolate$source <- as.character(a[, 1]) - df.net.isolate$target <- as.character(a[, 2]) - df.net <- rbind(df.net, df.net.isolate) - } - df.net$source <- factor(df.net$source, levels = cells.level[cells.level %in% - unique(df.net$source)]) - df.net$target <- factor(df.net$target, levels = cells.level[cells.level %in% - unique(df.net$target)]) - group.names <- paste(rep(levels(df.net$source), - each = length(levels(df.net$target))), levels(df.net$target), - sep = " -> ") - group.names0 <- group.names - group.names <- paste0(group.names0, " (", dataset.name[comparison[ii]], - ")") - if (nrow(df.net) > 0) { - df.net$pval[df.net$pval > 0.05] = 1 - df.net$pval[df.net$pval > 0.01 & df.net$pval <= - 0.05] = 2 - df.net$pval[df.net$pval <= 0.01] = 3 - df.net$prob[df.net$prob == 0] <- NA - df.net$prob.original <- df.net$prob - df.net$prob <- -1/log(df.net$prob) - } - else { - df.net <- BiocGenerics::as.data.frame(matrix(NA, nrow = length(group.names), - ncol = 5)) - colnames(df.net) <- c("interaction_name_2", - "source.target", "prob", "pval", "prob.original") - df.net$source.target <- group.names0 - } - df.net$group.names <- as.character(df.net$source.target) - df.net$source.target <- paste0(df.net$source.target, - " (", dataset.name[comparison[ii]], ")") - df.net$dataset <- dataset.name[comparison[ii]] - df.all <- rbind(df.all, df.net) - } - if (nrow(df.all) == 0) { - return(NULL) - #stop("No interactions are detected. Please consider changing the cell groups for analysis. ") - } - idx1 <- which(is.infinite(df.all$prob) | df.all$prob < - 0) - if (sum(idx1) > 0) { - values.assign <- seq(max(df.all$prob, na.rm = T) * - 1.1, max(df.all$prob, na.rm = T) * 1.5, length.out = length(idx1)) - position <- sort(df.all$prob.original[idx1], index.return = TRUE)$ix - df.all$prob[idx1] <- values.assign[match(1:length(idx1), - position)] - } - df.all$interaction_name_2[is.na(df.all$interaction_name_2)] <- df.all$interaction_name_2[!is.na(df.all$interaction_name_2)][1] - df <- df.all - df <- with(df, df[order(interaction_name_2), ]) - df$interaction_name_2 <- factor(df$interaction_name_2, - levels = unique(df$interaction_name_2)) - cells.order <- c() - dataset.name.order <- c() - for (i in 1:length(group.names0)) { - for (j in 1:length(comparison)) { - cells.order <- c(cells.order, paste0(group.names0[i], - " (", dataset.name[comparison[j]], ")")) - dataset.name.order <- c(dataset.name.order, - dataset.name[comparison[j]]) - } - } - df$source.target <- factor(df$source.target, levels = cells.order) - } - min.cutoff <- quantile(df$prob, min.quantile, na.rm = T) - max.cutoff <- quantile(df$prob, max.quantile, na.rm = T) - df$prob[df$prob < min.cutoff] <- min.cutoff - df$prob[df$prob > max.cutoff] <- max.cutoff - if (remove.isolate) { - df <- df[!is.na(df$prob), ] - line.on <- FALSE - } - if (!is.null(max.dataset)) { - signaling <- as.character(unique(df$interaction_name_2)) - for (i in signaling) { - df.i <- df[df$interaction_name_2 == i, , drop = FALSE] - cell <- as.character(unique(df.i$group.names)) - for (j in cell) { - df.i.j <- df.i[df.i$group.names == j, , drop = FALSE] - values <- df.i.j$prob - idx.max <- which(values == max(values, na.rm = T)) - idx.min <- which(values == min(values, na.rm = T)) - dataset.na <- c(df.i.j$dataset[is.na(values)], - setdiff(dataset.name[comparison], df.i.j$dataset)) - if (length(idx.max) > 0) { - if (!(df.i.j$dataset[idx.max] %in% dataset.name[max.dataset])) { - df.i.j$prob <- NA - } - else if ((idx.max != idx.min) & !is.null(min.dataset)) { - if (!(df.i.j$dataset[idx.min] %in% dataset.name[min.dataset])) { - df.i.j$prob <- NA - } - else if (length(dataset.na) > 0 & sum(!(dataset.name[min.dataset] %in% - dataset.na)) > 0) { - df.i.j$prob <- NA - } - } - } - df.i[df.i$group.names == j, "prob"] <- df.i.j$prob - } - df[df$interaction_name_2 == i, "prob"] <- df.i$prob - } - } - if (remove.isolate) { - df <- df[!is.na(df$prob), ] - line.on <- FALSE - } - if (nrow(df) == 0) { - return(NULL) - #stop("No interactions are detected. Please consider changing the cell groups for analysis. ") - } - df$interaction_name_2 <- factor(df$interaction_name_2, levels = unique(df$interaction_name_2)) - df$source.target = droplevels(df$source.target, exclude = setdiff(levels(df$source.target), - unique(df$source.target))) - df -} - -#' @importFrom gridGraphics grid.echo -#' @importFrom grid grid.grab -#' -grab_grob <- function(){ - grid.echo() - grid.grab() -} - - -#' Ligand-Receptor Count from Seurat Data -#' -#' @description -#' Calculates ligand-receptor interactions for each cell type in a Seurat object using CellChat. -#' -#' @param counts Seurat object. -#' @param .cell_group Cell group variable. -#' @param assay Name of the assay to use. -#' @param sample_for_plotting Sample name for plotting. -#' -#' @return A list of communication results including interactions and signaling pathways. -#' -#' @importFrom CellChat createCellChat -#' @importFrom CellChat setIdent -#' @importFrom CellChat subsetDB -#' @importFrom CellChat subsetData -#' @importFrom CellChat identifyOverExpressedGenes -#' @importFrom CellChat identifyOverExpressedInteractions -#' @importFrom CellChat projectData -#' @importFrom CellChat filterCommunication -#' @importFrom CellChat aggregateNet -#' @importFrom rlang quo_name -#' @importFrom rlang enquo -#' @importFrom tibble tibble -#' @importFrom purrr map2 -#' @importFrom purrr map -#' @importFrom purrr map2_dbl -#' @importFrom dplyr distinct add_count -#' @export -seurat_to_ligand_receptor_count = function(counts, .cell_group, assay, sample_for_plotting = ""){ - - #Fix GChecks - cell_type_harmonised <- NULL - n_cells <- NULL - DB <- NULL - cell_vs_all_cells_per_pathway <- NULL - gene <- NULL - - # Your code for seurat_to_ligand_receptor_count function here - - - .cell_group = enquo(.cell_group) - - # If only one cell, return empty - if((counts |> distinct(!!.cell_group) |> nrow()) < 2) return(tibble) - - counts_cellchat = - counts |> - - # Filter - filter(!is.na(!!.cell_group)) |> - - # Filter cell types with > 10 cells - add_count(cell_type_harmonised, name = "n_cells") |> - filter(n_cells>=10) |> - - - # Convert from seurat MUST BE LOG-NORMALISED - createCellChat(group.by = quo_name(.cell_group), assay = assay) |> - setIdent( ident.use = quo_name(.cell_group)) - - - communication_results = - tibble(DB = c("Secreted Signaling", "ECM-Receptor" , "Cell-Cell Contact" )) |> - mutate(data = list(counts_cellchat)) |> - mutate(data = map2( - data, DB, - ~ { - print(.y) - .x@DB <- subsetDB(CellChat::CellChatDB.human, search = .y) - - x = .x |> - subsetData() |> - identifyOverExpressedGenes() |> - identifyOverExpressedInteractions() |> - projectData(CellChat::PPI.human) - - if(nrow(x@LR$LRsig)==0) return(NA) - - x |> - computeCommunProb() |> - filterCommunication() |> - computeCommunProbPathway() |> - aggregateNet() - - } - )) |> - - # Record sample - mutate(sample = sample_for_plotting) |> - - # Add histogram - mutate(tot_interactions = map2_dbl( - data, DB, - ~ .x |> when( - !is.na(.) ~ sum(.x@net$count), - ~ 0 - ) - )) |> - - # Add histogram - mutate(cell_cell_count = map2_dbl( - data, DB, - ~ { - my_data = .x - - # Return empty if no results - if(is.na(my_data)) return(tibble(cell_from = character(), cell_to = character(), weight = numeric())) - - my_data@net$count |> - as_tibble(rownames = "cell_from") |> - pivot_longer(-cell_from, names_to = "cell_to", values_to = "count") - - - } - )) |> - - # values_df_for_heatmap - # Scores for each cell types across all others. How communicative is each cell type - mutate(cell_vs_all_cells_per_pathway = map2( - data , sample, - ~ when( - .x, - !is.na(.x) && length(.x@netP$pathways) > 0 ~ - netAnalysis_computeCentrality(., slot.name = "netP") |> - cellchat_process_sample_signal( - pattern = "all", signaling = .x@netP$pathways, - title = .y, width = 5, height = 6, color.heatmap = "OrRd" - ), - ~ tibble(gene = character(), cell_type = character(), value = double()) - ) - )) - - genes = communication_results |> select(cell_vs_all_cells_per_pathway) |> unnest(cell_vs_all_cells_per_pathway) |> distinct(gene) |> pull(gene) - - # Hugh resolution - communication_results |> - mutate(cell_vs_cell_per_pathway = map( - data, - ~ { - my_data = .x - - # Return empty if no results - if(is.na(my_data)) return(tibble(gene = character(), result = list())) - - tibble(gene = genes) |> - mutate(result = map(gene, ~ { - - unparsed_result = cellchat_matrix_for_circle(my_data, layout = "circle", signaling = .x) - - if(!is.null(unparsed_result)) - unparsed_result |> - as_tibble(rownames = "cell_type_from") |> - pivot_longer(-cell_type_from, names_to = "cell_type_to", values_to = "score") - - unparsed_result - - })) - } - )) |> - - mutate(cell_cell_weight = map( - data, - ~ { - my_data = .x - - # Return empty if no results - if(is.na(my_data)) return(tibble(cell_from = character(), cell_to = character(), weight = numeric())) - - my_data@net$weight |> - as_tibble(rownames = "cell_from") |> - pivot_longer(-cell_from, names_to = "cell_to", values_to = "weight") - - - } - )) - - -} From a43a6cb0077cce8fc5e52879434fb6973dff6662 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Fri, 4 Oct 2024 06:35:39 +0300 Subject: [PATCH 045/145] drop cellchat dependencies --- NAMESPACE | 45 +++----------------------- man/seurat_to_ligand_receptor_count.Rd | 28 ---------------- 2 files changed, 4 insertions(+), 69 deletions(-) delete mode 100644 man/seurat_to_ligand_receptor_count.Rd diff --git a/NAMESPACE b/NAMESPACE index e5b894bd..495f456f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -52,6 +52,7 @@ export(normalise_abundance_seurat_SCT) export(preprocessing_output) export(pseudobulk_merge) export(read_data_container) +export(reference_annotation_to_consensus) export(reference_label_coarse_id) export(reference_label_fine_id) export(remove_dead_scuttle) @@ -60,7 +61,6 @@ export(remove_empty_DropletUtils) export(run_targets_pipeline) export(score_cell_cycle_seurat) export(se_add_dispersion) -export(seurat_to_ligand_receptor_count) export(split_summarized_experiment) export(target_append) export(test_differential_abundance_hpc) @@ -73,7 +73,6 @@ import(broom) import(crew) import(crew.cluster) import(dplyr) -import(future.apply) import(ggplot2) import(ggupset) import(here) @@ -85,23 +84,6 @@ import(tidySingleCellExperiment) import(tidySummarizedExperiment) import(tidyseurat) importFrom(AnnotationDbi,mapIds) -importFrom(CellChat,aggregateNet) -importFrom(CellChat,computeExpr_LR) -importFrom(CellChat,computeExpr_agonist) -importFrom(CellChat,computeExpr_coreceptor) -importFrom(CellChat,computeRegionDistance) -importFrom(CellChat,createCellChat) -importFrom(CellChat,filterCommunication) -importFrom(CellChat,identifyOverExpressedGenes) -importFrom(CellChat,identifyOverExpressedInteractions) -importFrom(CellChat,projectData) -importFrom(CellChat,scPalette) -importFrom(CellChat,searchPair) -importFrom(CellChat,setIdent) -importFrom(CellChat,subsetCommunication) -importFrom(CellChat,subsetDB) -importFrom(CellChat,subsetData) -importFrom(CellChat,triMean) importFrom(DropletUtils,barcodeRanks) importFrom(DropletUtils,emptyDrops) importFrom(EnsDb.Hsapiens.v86,EnsDb.Hsapiens.v86) @@ -109,7 +91,6 @@ importFrom(HDF5Array,loadHDF5SummarizedExperiment) importFrom(HDF5Array,saveHDF5SummarizedExperiment) importFrom(Matrix,Matrix) importFrom(Matrix,colSums) -importFrom(RColorBrewer,brewer.pal) importFrom(S4Vectors,cbind) importFrom(S4Vectors,metadata) importFrom(S4Vectors,split) @@ -147,14 +128,11 @@ importFrom(SummarizedExperiment,rowData) importFrom(callr,r) importFrom(celldex,BlueprintEncodeData) importFrom(celldex,MonacoImmuneData) -importFrom(circlize,colorRamp2) -importFrom(cowplot,as_grob) importFrom(crew,crew_controller_local) importFrom(data.table,":=") importFrom(digest,digest) importFrom(dplyr,"%>%") importFrom(dplyr,across) -importFrom(dplyr,add_count) importFrom(dplyr,as_tibble) importFrom(dplyr,bind_rows) importFrom(dplyr,case_when) @@ -162,7 +140,6 @@ importFrom(dplyr,count) importFrom(dplyr,distinct) importFrom(dplyr,filter) importFrom(dplyr,group_by) -importFrom(dplyr,if_else) importFrom(dplyr,join_by) importFrom(dplyr,left_join) importFrom(dplyr,mutate) @@ -173,18 +150,13 @@ importFrom(dplyr,rename) importFrom(dplyr,select) importFrom(dplyr,summarise) importFrom(dplyr,tibble) +importFrom(dplyr,tribble) importFrom(dplyr,with_groups) importFrom(edgeR,estimateDisp) -importFrom(future,nbrOfWorkers) importFrom(future,tweak) importFrom(glue,glue) -importFrom(grid,grid.grab) -importFrom(gridGraphics,grid.echo) importFrom(here,here) importFrom(ids,random_id) -importFrom(igraph,graph_from_adjacency_matrix) -importFrom(igraph,in_circle) -importFrom(igraph,layout_) importFrom(lme4,findbars) importFrom(magrittr,"%$%") importFrom(magrittr,"%>%") @@ -193,31 +165,22 @@ importFrom(magrittr,extract2) importFrom(magrittr,not) importFrom(magrittr,set_names) importFrom(methods,show) -importFrom(methods,slot) -importFrom(patchwork,wrap_elements) -importFrom(pbapply,pbsapply) importFrom(purrr,compact) importFrom(purrr,imap) importFrom(purrr,map) importFrom(purrr,map2) -importFrom(purrr,map2_dbl) importFrom(purrr,map_chr) importFrom(purrr,map_int) importFrom(purrr,rep_along) importFrom(purrr,safely) importFrom(purrr,set_names) -importFrom(purrr,when) importFrom(readr,read_csv) importFrom(readr,write_lines) -importFrom(reshape2,melt) importFrom(rlang,enquo) importFrom(rlang,is_symbolic) importFrom(rlang,parse_expr) importFrom(rlang,quo_is_symbolic) -importFrom(rlang,quo_name) importFrom(rlang,sym) -importFrom(scales,rescale) -importFrom(scales,viridis_pal) importFrom(scater,isOutlier) importFrom(scuttle,logNormCounts) importFrom(scuttle,perCellQCMetrics) @@ -229,7 +192,6 @@ importFrom(stringr,str_c) importFrom(stringr,str_detect) importFrom(stringr,str_remove) importFrom(stringr,str_remove_all) -importFrom(stringr,str_replace) importFrom(stringr,str_replace_all) importFrom(stringr,str_subset) importFrom(stringr,str_trim) @@ -238,13 +200,14 @@ importFrom(targets,tar_config_get) importFrom(targets,tar_option_set) importFrom(targets,tar_script) importFrom(tibble,as_tibble) +importFrom(tibble,deframe) importFrom(tibble,enframe) importFrom(tibble,rowid_to_column) importFrom(tibble,tibble) importFrom(tidybulk,as_SummarizedExperiment) importFrom(tidybulk,pivot_transcript) importFrom(tidybulk,test_differential_abundance) -importFrom(tidyr,gather) +importFrom(tidyr,expand_grid) importFrom(tidyr,nest) importFrom(tidyr,pivot_longer) importFrom(tidyr,replace_na) diff --git a/man/seurat_to_ligand_receptor_count.Rd b/man/seurat_to_ligand_receptor_count.Rd deleted file mode 100644 index 91d7a160..00000000 --- a/man/seurat_to_ligand_receptor_count.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/CellChat.R -\name{seurat_to_ligand_receptor_count} -\alias{seurat_to_ligand_receptor_count} -\title{Ligand-Receptor Count from Seurat Data} -\usage{ -seurat_to_ligand_receptor_count( - counts, - .cell_group, - assay, - sample_for_plotting = "" -) -} -\arguments{ -\item{counts}{Seurat object.} - -\item{.cell_group}{Cell group variable.} - -\item{assay}{Name of the assay to use.} - -\item{sample_for_plotting}{Sample name for plotting.} -} -\value{ -A list of communication results including interactions and signaling pathways. -} -\description{ -Calculates ligand-receptor interactions for each cell type in a Seurat object using CellChat. -} From 2a00719950bd01b58222ff0cb31d01d57ef48151 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Mon, 7 Oct 2024 14:44:23 +1030 Subject: [PATCH 046/145] fix consensus function --- NAMESPACE | 2 + R/differential_expression.R | 4 +- R/utilities.R | 1533 ++++++++++++++++++----------------- 3 files changed, 810 insertions(+), 729 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 495f456f..85122e8f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -18,6 +18,7 @@ export(annotation_consensus) export(annotation_label_transfer) export(calculate_pseudobulk) export(cell_cycle_scoring) +export(clean_cellxgene_cell_types) export(convert_gene_names) export(create_pseudobulk) export(delete_lines_with_word) @@ -192,6 +193,7 @@ importFrom(stringr,str_c) importFrom(stringr,str_detect) importFrom(stringr,str_remove) importFrom(stringr,str_remove_all) +importFrom(stringr,str_replace) importFrom(stringr,str_replace_all) importFrom(stringr,str_subset) importFrom(stringr,str_trim) diff --git a/R/differential_expression.R b/R/differential_expression.R index faa678cd..a6ec451d 100644 --- a/R/differential_expression.R +++ b/R/differential_expression.R @@ -282,10 +282,10 @@ factory_de_fix_effect = function(se_list_input, output_se, formula, method, tier #' @importFrom rlang sym #' @importFrom dplyr left_join -#' @importFrom dplyr nest +#' @importFrom tidyr nest #' @importFrom dplyr group_by #' @importFrom dplyr mutate -#' @importFrom dplyr unnest +#' @importFrom tidyr unnest #' @importFrom purrr map #' @importFrom S4Vectors split #' @importFrom purrr compact diff --git a/R/utilities.R b/R/utilities.R index eac81fa8..469ed476 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -895,6 +895,7 @@ is_strong_evidence = function(single_cell_data, cell_annotation_azimuth_l2, cell #' @importFrom dplyr tribble #' @importFrom tidyr expand_grid #' @importFrom stringr str_detect +#' @importFrom tibble deframe #' #' @param azimuth_input A vector of cell type annotations from the Azimuth dataset. #' @param monaco_input A vector of cell type annotations from the Monaco dataset. @@ -929,7 +930,7 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr "Naive CD8 T cells", "cd8 naive", "monaco_fine", "Central memory CD8 T cells", "cd8 tcm", "monaco_fine", "Effector memory CD8 T cells", "cd8 tem", "monaco_fine", - "Terminal effector CD8 T cells", "terminal effector cd4 t", "monaco_fine", # Adjusting for the closest match + "Terminal effector CD8 T cells", "cd8 tem", "monaco_fine", # Adjusting for the closest match "MAIT cells", "mait", "monaco_fine", "Vd2 gd T cells", "tgd", "monaco_fine", "Non-Vd2 gd T cells", "tgd", "monaco_fine", # No direct match, leaving as NA @@ -963,7 +964,7 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr "Lowdensity basophils", "granulocyte", "monaco_fine", # No direct match, leaving as NA "Terminal effector CD4 T cells", "terminal effector cd4 t", "monaco_fine", "progenitor", "progenitor_cell", "monaco_fine" - ) + ) azimuth = tribble( @@ -974,18 +975,18 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr "dnT", "dnt", "azimuth_pbmc", "CD8 Naive", "cd8 naive", "azimuth_pbmc", "CD4 Naive", "cd4 naive", "azimuth_pbmc", - "CD4 TCM", "cd4 helper", "azimuth_pbmc", # Central memory cells often relate to Th1 or Th17 + "CD4 TCM", "cd4 tcm", "azimuth_pbmc", # Central memory cells often relate to Th1 or Th17 "gdT", "tgd", "azimuth_pbmc", "CD8 TCM", "cd8 tcm", "azimuth_pbmc", "MAIT", "mait", "azimuth_pbmc", - "CD4 TEM", "terminal effector cd4 t", "azimuth_pbmc", # Effector memory cells can relate to terminal effector cells + "CD4 TEM", "cd4 tem", "azimuth_pbmc", # Effector memory cells can relate to terminal effector cells "ILC", "ilc", "azimuth_pbmc", "CD14 Mono", "cd14 mono", "azimuth_pbmc", "cDC1", "cdc", "azimuth_pbmc", # Conventional dendritic cell 1 is commonly referred to as CDC "pDC", "pdc", "azimuth_pbmc", "cDC2", "cdc", "azimuth_pbmc", # No specific reference for cDC2, but using CDC as a general category "B naive", "b naive", "azimuth_pbmc", - "B intermediate", "b naive", "azimuth_pbmc", # No direct match, leaving as NA + "B intermediate", "b memory", "azimuth_pbmc", # No direct match, leaving as NA "B memory", "b memory", "azimuth_pbmc", "Platelet", "platelet", "azimuth_pbmc", "Eryth", "erythrocyte", "azimuth_pbmc", @@ -996,9 +997,11 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr "Plasmablast", "plasma_cell", "azimuth_pbmc", "NK Proliferating", "NK", "azimuth_pbmc", # NK cells can be proliferative, linked to general proliferation "ASDC", "cdc", "azimuth_pbmc", # No direct match, leaving as NA - "CD8 Proliferating", "proliferating_t_cell", "azimuth_pbmc", - "CD4 Proliferating", "proliferating_t_cell", "azimuth_pbmc", - "doublet", "non_immune", "azimuth_pbmc" + "CD8 Proliferating", "cd8_proliferating_t_cell", "azimuth_pbmc", + "CD4 Proliferating", "cd4_proliferating_t_cell", "azimuth_pbmc", + "doublet", + "non_immune", + "azimuth_pbmc" ) blueprint = tribble( @@ -1006,10 +1009,10 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr "Neutrophils", "granulocyte", "blueprint_fine", "Monocytes", "monocyte", "blueprint_fine", "MEP", "hematopoietic_cell", "blueprint_fine", # MEP typically refers to megakaryocyte-erythroid progenitor - "CD4+ T-cells", "cd4 th1", "blueprint_fine", + "CD4+ T-cells", "cd4 t", "blueprint_fine", "Tregs", "treg", "blueprint_fine", - "CD4+ Tcm", "cd4 th1/th17", "blueprint_fine", - "CD4+ Tem", "terminal effector cd4 t", "blueprint_fine", + "CD4+ Tcm", "cd4 tcm", "blueprint_fine", + "CD4+ Tem", "cd4 tem", "blueprint_fine", "CD8+ Tcm", "cd8 tcm", "blueprint_fine", "CD8+ Tem", "cd8 tem", "blueprint_fine", "NK cells", "nk", "blueprint_fine", @@ -1048,22 +1051,42 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr "Astrocytes", "astrocyte", "blueprint_fine", "Mesangial cells", "mesangial_cell", "blueprint_fine" ) - - conversion_table = - bind_rows(monaco, blueprint, azimuth) + non_immune_cells <- c( + "megakaryocytes", + "endothelial_cell", + "chondrocyte", + "fibroblast", + "smooth_muscle_cell", + "epithelial_cell", + "melanocyte", + "muscle_cell", + "keratinocyte", + "endothelial_cell", # Appears again in the original vector + "myocyte", + "fat_cell", + "neuron", + "pericyte_cell", + "adipocyte", + "astrocyte", + "mesangial_cell" + ) t_cells <- c( "cd8 naive", "cd8 tcm", "cd8 tem", + "cd4 tem", + "cd4 tcm", "terminal effector cd4 t", "treg", "cd4 th1/th17", "cd4 th1", "cd4 th17", + "cd4 t", "t_nk", - "proliferating_t_cell", + "cd4_proliferating_t_cell", + "cd8_proliferating_t_cell", "dnt", "cd4 naive", "cd4 th2", @@ -1106,6 +1129,10 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr # Find consensus manually mutate(consensus = case_when( + + # Non immune + blueprint_fine %in% non_immune_cells ~ "non_immune", + # Full consensus blueprint_fine == monaco_fine & blueprint_fine == azimuth_pbmc ~ blueprint_fine , @@ -1186,11 +1213,11 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr # select(-Reference) |> # pivot_wider(names_from = Database, values_from = Query, values_fn = function(x) paste(unique(x), collapse = ",")) - # parse names + # parse names, chenge to lower case for all tibble( - blueprint_fine = blueprint |> select(-Database) |> deframe() |> _[!!blueprint_input], - monaco_fine = monaco |> select(-Database) |> deframe() |> _[!!monaco_input], - azimuth_pbmc = azimuth |> select(-Database) |> deframe() |> _[!!azimuth_input], + blueprint_fine = blueprint |> select(-Database) |> mutate(across(everything(), tolower)) |> deframe() |> _[!!tolower(blueprint_input)], + monaco_fine = monaco |> select(-Database) |> mutate(across(everything(), tolower)) |> deframe() |> _[!!tolower(monaco_input)], + azimuth_pbmc = azimuth |> select(-Database) |> mutate(across(everything(), tolower)) |> deframe() |> _[!!tolower(azimuth_input)], ) |> left_join( all_combinations, @@ -1203,85 +1230,137 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr pull(consensus) - # - # - # - # #Fix GChecks - # cell_type_clean = NULL - # - # x |> - # # Annotate - # mutate(cell_type_clean = cell_type_clean |> tolower()) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove_all(",")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("alphabeta")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove_all("positive")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace("cd4 t", "cd4")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace("regulatory t", "treg")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("thymusderived")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("human")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("igg ")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("igm ")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("iga ")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("group [0-9]")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("common")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("cd45ro")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("type i")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("germinal center")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("iggnegative")) |> - # mutate(cell_type_clean = cell_type_clean |> str_remove("terminally differentiated")) |> - # - # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("macrophage"), "macrophage", cell_type_clean) ) |> - # mutate(cell_type_clean = if_else(cell_type_clean == "mononuclear phagocyte", "macrophage", cell_type_clean) ) |> - # - # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect(" treg"), "treg", cell_type_clean) ) |> - # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect(" dendritic"), "dendritic", cell_type_clean) ) |> - # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect(" thelper"), "thelper", cell_type_clean) ) |> - # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("thelper "), "thelper", cell_type_clean) ) |> - # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("gammadelta"), "tgd", cell_type_clean) ) |> - # mutate(cell_type_clean = if_else(cell_type_clean |> str_detect("natural killer"), "nk", cell_type_clean) ) |> - # - # - # mutate(cell_type_clean = cell_type_clean |> str_replace_all(" ", " ")) |> - # - # - # mutate(cell_type_clean = cell_type_clean |> str_replace("myeloid leukocyte", "myeloid")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace("effector memory", "tem")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace("effector", "tem")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace_all("cd8 t", "cd8")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace("central memory", "tcm")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace("gammadelta t", "gdt")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace("nonclassical monocyte", "cd16 monocyte")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace("classical monocyte", "cd14 monocyte")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace("follicular b", "b")) |> - # mutate(cell_type_clean = cell_type_clean |> str_replace("unswitched memory", "memory")) |> - # - # mutate(cell_type_clean = cell_type_clean |> str_trim()) } -#' Clean and Standardize Cell Types +#' Clean and Standardize Cell Type Names #' -#' This function takes a vector of cell types and applies a series of transformations -#' to clean and standardize them for better consistency. +#' Cleans and standardizes a vector of cell type names by applying a series of string transformations to improve consistency. +#' This function is particularly useful for preprocessing cell type labels in biological datasets where consistent naming conventions are important. #' -#' @importFrom stringr str_remove_all -#' @importFrom stringr str_trim +#' @param x A character vector of cell type names to be cleaned and standardized. #' -#' @param .x A vector of cell types. +#' @return A character vector of cleaned and standardized cell type names. #' -#' @return A cleaned and standardized vector of cell types. +#' @importFrom stringr str_remove_all +#' @importFrom stringr str_remove +#' @importFrom stringr str_replace +#' @importFrom stringr str_replace_all +#' @importFrom stringr str_trim #' #' @examples -#' cell_types <- c("CD4+ T-cells", "NK cells", "Blast-cells") -# cleaned_cell_types <- clean_cell_types(cell_types) - -clean_cell_types = function(.x){ - .x |> +#' cell_types <- c("CD4+ T-cells", "NK cells", "Blast-cells", "Terminally differentiated macrophage") +#' cleaned_cell_types <- clean_cellxgene_cell_types(cell_types) +#' print(cleaned_cell_types) +#' +#' # Output: +#' # [1] "cd4 t" "nk" "" "macrophage" +#' +#' @export +clean_cellxgene_cell_types = function(x){ + + x |> + # Annotate + tolower() |> + str_remove_all(",") |> + str_remove("alphabeta") |> + str_remove_all("positive") |> + str_replace("cd4 t", "cd4") |> + str_replace("regulatory t", "treg") |> + str_remove("thymusderived") |> + str_remove("human") |> + str_remove("igg ") |> + str_remove("igm ") |> + str_remove("iga ") |> + str_remove("group [0-9]") |> + str_remove("common") |> + str_remove("cd45ro") |> + str_remove("type i") |> + str_remove("germinal center") |> + str_remove("iggnegative") |> + str_remove("terminally differentiated") |> + + str_replace(".*macrophage.*", "macrophage") |> + str_replace("^mononuclear phagocyte$", "macrophage") |> + str_replace(".* treg.*", "treg") |> + str_replace(".* dendritic.*", "dendritic") |> + str_replace(".* thelper.*", "thelper") |> + str_replace(".*thelper .*", "thelper") |> + str_replace(".*gammadelta.*", "tgd") |> + str_replace(".*natural killer.*", "nk") |> + + str_replace_all(" ", " ") |> + + str_replace("myeloid leukocyte", "myeloid") |> + str_replace("effector memory", "tem") |> + str_replace("effector", "tem") |> + str_replace_all("cd8 t", "cd8") |> + str_replace("central memory", "tcm") |> + str_replace("gammadelta t", "gdt") |> + str_replace("nonclassical monocyte", "cd16 monocyte") |> + str_replace("classical monocyte", "cd14 monocyte") |> + str_replace("follicular b", "b") |> + str_replace("unswitched memory", "memory") |> + + str_trim() |> + str_remove_all("\\+") |> str_remove_all("cells") |> str_remove_all("cell") |> str_remove_all("blast") |> str_remove_all("-") |> - str_trim() + str_trim() |> + + str_remove("^_+|_+$") |> # Removes leading and trailing underscores + + # clean NON IMMUNE + str_replace("(?i)\\bepithelial\\b", "epithelial_cell") |> + str_replace("(?i)\\bfibroblast\\b", "fibroblast") |> + str_replace("(?i)\\bendothelial\\b", "endothelial_cell") |> + str_replace("(?i)^(Mueller cell|Muller cell)$", "Muller_cell") |> + str_replace("(?i)\\bneuron\\b", "neuron") |> + str_replace("(?i)amplifying cell", "amplifying_cell") |> + str_replace("(?i)stem cell", "stem_cell") |> + str_replace("(?i)progenitor cell", "progenitor_cell") |> + str_replace("(?i)acinar cell", "acinar_cell") |> + str_replace("(?i)goblet cell", "goblet_cell") |> + str_replace("(?i)thymocyte", "thymocyte") |> + str_replace("(?i)urothelial", "urothelial_cell") |> + str_replace("(?i)\\bfat\\b", "fat_cell") |> + str_replace("(?i)pneumocyte", "pneumocyte") |> + str_replace("(?i)mesothelial", "mesothelial_cell") |> + str_replace("(?i)enteroendocrine", "enteroendocrine_cell") |> + str_replace("(?i)enterocyte", "enterocyte") |> + str_replace("(?i)\\bbasal\\b", "basal_cell") |> + str_replace("(?i)stromal", "stromal_cell") |> + str_replace("(?i)retina", "retinal_cell") |> + str_replace("(?i)ciliated", "ciliated_cell") |> + str_replace("(?i)pericyte", "pericyte_cell") |> + str_replace("(?i)trophoblast", "trophoblast") |> + str_replace("(?i)brush", "brush_cell") |> + str_replace("(?i)serous", "serous_cell") |> + str_replace("(?i)hepatocyte", "hepatocyte") |> + str_replace("(?i)melanocyte", "melanocyte") |> + str_replace("(?i)myocyte", "myocyte") |> + str_replace("(?i)promyelocyte", "promyelocyte") |> + str_replace("(?i)cholangiocyte", "cholangiocyte") |> + str_replace("(?i)myoblast", "myoblast") |> + str_replace("(?i)satellite", "satellite_cell") |> + str_replace("(?i)muscle", "muscle_cell") |> + str_replace("(?i)progenitor", "progenitor_cell") |> + str_replace("(?i)erythrocyte", "erythrocyte") |> + str_replace("(?i)myoepithelial", "myoepithelial_cell") |> + str_replace("(?i)myofibroblast", "myofibroblast_cell") |> + str_replace("(?i)pancreatic", "pancreatic_cell") |> + str_replace("(?i)renal", "renal_cell") |> + str_replace("(?i)epidermal", "epidermal_cell") |> + str_replace("(?i)cortical", "cortical_cell") |> + str_replace("(?i)interstitial", "interstitial_cell") |> + str_replace("(?i)neuroendocrine", "neuroendocrine_cell") |> + str_replace("(?i)granular", "granular_cell") |> + str_replace("(?i)kidney", "kidney_cell") |> + str_replace("(?i)paneth", "paneth_cell") |> + str_replace("(?i)bipolar", "bipolar_cell") |> + str_replace_all(" ", "_") } @@ -1525,648 +1604,648 @@ harmonise_names_non_immune = function(metadata){ metadata } -get_manually_curated_immune_cell_types = function(){ - - # library(zellkonverter) - # library(Seurat) - # library(SingleCellExperiment) # load early to avoid masking dplyr::count() - # library(tidySingleCellExperiment) - # library(dplyr) - # library(cellxgenedp) - # library(tidyverse) - #library(tidySingleCellExperiment) - # library(stringr) - # library(scMerge) - # library(glue) - # library(tidyseurat) - # library(celldex) - # library(SingleR) - # library(glmGamPoi) - # library(stringr) - # library(purrr) - - - #Fix GCHECKS - metadata_file = NULL - .cell = NULL - cell_type = NULL - file_id = NULL - .sample = NULL - azhimut_confirmed = NULL - blueprint_confirmed <- NULL - arrange <- NULL # This one is actually a function from dplyr, so you should use it with dplyr::arrange or import it - cell_type_clean <- NULL - blueprint_singler <- NULL - predicted.celltype.l2 <- NULL - strong_evidence <- NULL - cell_type_harmonised <- NULL - confidence_class <- NULL - lineage_1 <- NULL - monaco_singler <- NULL - cell_annotation_monaco_singler <- NULL - cell_annotation_azimuth_l2 <- NULL - cell_annotation_blueprint_singler <- NULL - confidence_class_manually_curated <- NULL - cell_type_harmonised_manually_curated <- NULL - file_curated_annotation_merged <- NULL - .sample <- NULL - cell_type_harmonised_non_immune <- NULL - - # library(zellkonverter) - # library(Seurat) - # library(SingleCellExperiment) # load early to avoid masking dplyr::count() - # library(tidySingleCellExperiment) - # library(dplyr) - # library(cellxgenedp) - # library(tidyverse) - # #library(tidySingleCellExperiment) - # library(stringr) - # library(scMerge) - # library(glue) - # library(DelayedArray) - # library(HDF5Array) - # library(tidyseurat) - # library(celldex) - # library(SingleR) - # library(glmGamPoi) - # library(stringr) - # library(purrr) - - # # source("utility.R") - # - # metadata_file = "/vast/projects/cellxgene_curated//metadata_0.2.rds" - # file_curated_annotation_merged = "~/PostDoc/CuratedAtlasQueryR/dev/cell_type_curated_annotation_0.2.3.rds" - # file_metadata_annotated = "/vast/projects/cellxgene_curated/metadata_annotated_0.2.3.rds" - # annotation_directory = "/vast/projects/cellxgene_curated//annotated_data_0.2/" - # - # # metadata_file = "/vast/projects/cellxgene_curated//metadata.rds" - # # file_curated_annotation_merged = "~/PostDoc/CuratedAtlasQueryR/dev/cell_type_curated_annotation.rds" - # # file_metadata_annotated = "/vast/projects/cellxgene_curated//metadata_annotated.rds" - # # annotation_directory = "/vast/projects/cellxgene_curated//annotated_data_0.1/" - # - # - # annotation_harmonised = - # dir(annotation_directory, full.names = TRUE) |> - # enframe(value="file") |> - # tidyr::extract( file,".sample", "/([a-z0-9]+)\\.rds", remove = F) |> - # mutate(data = map(file, ~ .x |> readRDS() |> select(-contains("score")) )) |> - # unnest(data) |> - # - # # Format - # mutate(across(c(predicted.celltype.l1, predicted.celltype.l2, blueprint_singler, monaco_singler, ), tolower )) |> - # mutate(across(c(predicted.celltype.l1, predicted.celltype.l2, blueprint_singler, monaco_singler, ), clean_cell_types )) |> - # - # # Format - # is_strong_evidence(predicted.celltype.l2, blueprint_singler) |> - # - # - # - # - # job::job({ - # annotation_harmonised |> saveRDS("~/PostDoc/CuratedAtlasQueryR/dev/annotated_data_0.2_temp_table.rds") - # }) - # - - annotation_harmonised = readRDS("~/PostDoc/CuratedAtlasQueryR/dev/annotated_data_0.2_temp_table.rds") - - # library(CuratedAtlasQueryR) - metadata_df = readRDS(metadata_file) - - # Integrate with metadata - - annotation = - metadata_df |> - select(.cell, cell_type, file_id, .sample) |> - as_tibble() |> - left_join(read_csv("~/PostDoc/CuratedAtlasQueryR/dev/metadata_cell_type.csv"), by = "cell_type") |> - left_join(annotation_harmonised, by = c(".cell", ".sample")) |> - - # Clen cell types - mutate(cell_type_clean = cell_type |> clean_cell_types()) - - # annotation |> - # filter(lineage_1=="immune") |> - # count(cell_type, predicted.celltype.l2, blueprint_singler, strong_evidence) |> - # arrange(!strong_evidence, desc(n)) |> - # write_csv("~/PostDoc/CuratedAtlasQueryR/dev/annotation_confirm.csv") - - - annotation_crated_confirmed = - read_csv("~/PostDoc/CuratedAtlasQueryR/dev/annotation_confirm_manually_curated.csv") |> - - # TEMPORARY - rename(cell_type_clean = cell_type) |> - - filter(!is.na(azhimut_confirmed) | !is.na(blueprint_confirmed)) |> - filter(azhimut_confirmed + blueprint_confirmed > 0) |> - - # Format - mutate(cell_type_harmonised = case_when( - azhimut_confirmed ~ predicted.celltype.l2, - blueprint_confirmed ~ blueprint_singler - )) |> - - mutate(confidence_class = 1) - - - - # To avoid immune cell annotation if very contrasting evidence - blueprint_definitely_non_immune = c( "astrocytes" , "chondrocytes" , "endothelial" , "epithelial" , "fibros" , "keratinocytes" , "melanocytes" , "mesangial" , "mv endothelial", "myocytes" , "neurons" , "pericytes" , "preadipocytes" , "skeletal muscle" , "smooth muscle" ) - - - - annotation_crated_UNconfirmed = - - # Read - read_csv("~/PostDoc/CuratedAtlasQueryR/dev/annotation_confirm_manually_curated.csv") |> - - # TEMPORARY - rename(cell_type_clean = cell_type) |> - - filter(is.na(azhimut_confirmed) | (azhimut_confirmed + blueprint_confirmed) == 0) |> - - clean_cell_types_deeper() |> - - mutate(cell_type_harmonised = "") |> - - # Classify strong evidence - mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("cd8 cytokine secreting tem t") & blueprint_singler == "nk", T, blueprint_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("cd8 cytotoxic t") & blueprint_singler == "nk", T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("cd8alphaalpha intraepithelial t") & predicted.celltype.l2 == "cd8 tem" & blueprint_singler == "cd8 tem", T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("mature t") & strong_evidence & predicted.celltype.l2 |> str_detect("tem|tcm"), T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("myeloid") & strong_evidence & predicted.celltype.l2 == "cd16 mono", T, azhimut_confirmed) ) |> - - # Classify weak evidence - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c("b", "B") & predicted.celltype.l2 == "b memory" & blueprint_singler == "classswitched memory b", T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c("b", "B") & predicted.celltype.l2 %in% c("b memory", "b intermediate", "b naive", "plasma") & !blueprint_singler %in% c("classswitched memory b", "memory b", "naive b"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c("b", "B") & !predicted.celltype.l2 %in% c("b memory", "b intermediate", "b naive") & blueprint_singler %in% c("classswitched memory b", "memory b", "naive b", "plasma"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "activated cd4" & predicted.celltype.l2 %in% c("cd4 tcm", "cd4 tem", "tregs"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "activated cd4" & blueprint_singler %in% c("cd4 tcm", "cd4 tem", "tregs"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "activated cd8" & predicted.celltype.l2 %in% c("cd8 tcm", "cd8 tem"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "activated cd8" & blueprint_singler %in% c("cd8 tcm", "cd8 tem"), T, blueprint_confirmed) ) |> - - # Monocyte macrophage - mutate(azhimut_confirmed = if_else(cell_type_clean == "cd14 cd16 monocyte" & predicted.celltype.l2 %in% c("cd14 mono", "cd16 mono"), T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "cd14 cd16negative classical monocyte" & predicted.celltype.l2 %in% c("cd14 mono"), T, azhimut_confirmed) ) |> - mutate(cell_type_harmonised = if_else(cell_type_clean == "cd14 cd16negative classical monocyte" & blueprint_singler %in% c("monocytes"), "cd14 mono", cell_type_harmonised) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "cd14 monocyte" & predicted.celltype.l2 %in% c("cd14 mono"), T, azhimut_confirmed) ) |> - mutate(cell_type_harmonised = if_else(cell_type_clean == "cd14 monocyte" & blueprint_singler %in% c("monocytes"), "cd14 mono", cell_type_harmonised) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "cd14low cd16 monocyte" & predicted.celltype.l2 %in% c("cd16 mono"), T, azhimut_confirmed) ) |> - mutate(cell_type_harmonised = if_else(cell_type_clean == "cd14low cd16 monocyte" & blueprint_singler %in% c("monocytes"), "cd16 mono", cell_type_harmonised) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "cd16 monocyte" & predicted.celltype.l2 %in% c("cd16 mono"), T, azhimut_confirmed) ) |> - mutate(cell_type_harmonised = if_else(cell_type_clean == "cd16 monocyte" & blueprint_singler %in% c("monocytes"), "cd16 mono", cell_type_harmonised) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "monocyte" & blueprint_singler |> str_detect("monocyte|macrophage") & !predicted.celltype.l2 |> str_detect(" mono"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "monocyte" & predicted.celltype.l2 |> str_detect(" mono"), T, azhimut_confirmed) ) |> - - - mutate(azhimut_confirmed = if_else(cell_type_clean == "cd4" & predicted.celltype.l2 |> str_detect("cd4|treg") & !blueprint_singler |> str_detect("cd4"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "cd4" & !predicted.celltype.l2 |> str_detect("cd4") & blueprint_singler |> str_detect("cd4|treg"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "cd8" & predicted.celltype.l2 |> str_detect("cd8") & !blueprint_singler |> str_detect("cd8"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "cd8" & !predicted.celltype.l2 |> str_detect("cd8") & blueprint_singler |> str_detect("cd8"), T, blueprint_confirmed) ) |> - - - mutate(azhimut_confirmed = if_else(cell_type_clean == "memory t" & predicted.celltype.l2 |> str_detect("tem|tcm") & !blueprint_singler |> str_detect("tem|tcm"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "memory t" & !predicted.celltype.l2 |> str_detect("tem|tcm") & blueprint_singler |> str_detect("tem|tcm"), T, blueprint_confirmed) ) |> - - - mutate(azhimut_confirmed = if_else(cell_type_clean == "cd8alphaalpha intraepithelial t" & predicted.celltype.l2 |> str_detect("cd8") & !blueprint_singler |> str_detect("cd8"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "cd8alphaalpha intraepithelial t" & !predicted.celltype.l2 |> str_detect("cd8") & blueprint_singler |> str_detect("cd8"), T, blueprint_confirmed) ) |> - - mutate(azhimut_confirmed = if_else(cell_type_clean == "cd8hymocyte" & predicted.celltype.l2 |> str_detect("cd8") & !blueprint_singler |> str_detect("cd8"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "cd8hymocyte" & !predicted.celltype.l2 |> str_detect("cd8") & blueprint_singler |> str_detect("cd8"), T, blueprint_confirmed) ) |> - - # B cells - mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("memory b") & predicted.celltype.l2 =="b memory", T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("memory b") & blueprint_singler |> str_detect("memory b"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "immature b" & predicted.celltype.l2 =="b naive", T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "immature b" & blueprint_singler |> str_detect("naive b"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "mature b" & predicted.celltype.l2 %in% c("b memory", "b intermediate"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "mature b" & blueprint_singler |> str_detect("memory b"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "naive b" & predicted.celltype.l2 %in% c("b naive"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "naive b" & blueprint_singler |> str_detect("naive b"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "transitional stage b" & predicted.celltype.l2 %in% c("b intermediate"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "transitional stage b" & blueprint_singler |> str_detect("naive b") & !predicted.celltype.l2 %in% c("b intermediate"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "memory b" & predicted.celltype.l2 %in% c("b intermediate"), T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "precursor b", "prob") & predicted.celltype.l2 %in% c("b naive") & !blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "precursor b", "prob") & blueprint_singler |> str_detect("naive b") & predicted.celltype.l2 %in% c("hspc"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "precursor b", "prob") & predicted.celltype.l2 %in% c("hspc"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "precursor b", "prob") & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, blueprint_confirmed) ) |> - - # Plasma cells - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "plasma") & predicted.celltype.l2 == "plasma" , T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "plasma") & predicted.celltype.l2 == "plasma" , T, blueprint_confirmed) ) |> - - mutate(azhimut_confirmed = case_when( - cell_type_clean %in% c("cd4 cytotoxic t", "cd4 helper t") & predicted.celltype.l2 == "cd4 ctl" & blueprint_singler != "cd4 tcm" ~ T, - cell_type_clean %in% c("cd4 cytotoxic t", "cd4 helper t") & predicted.celltype.l2 == "cd4 tem" & blueprint_singler != "cd4 tcm" ~ T, - TRUE ~ azhimut_confirmed - ) ) |> - mutate(blueprint_confirmed = case_when( - cell_type_clean %in% c("cd4 cytotoxic t", "cd4 helper t") & blueprint_singler == "cd4 tem" & predicted.celltype.l2 != "cd4 tcm" ~ T, - cell_type_clean %in% c("cd4 cytotoxic t", "cd4 helper t") & blueprint_singler == "cd4 t" & predicted.celltype.l2 != "cd4 tcm" ~ T, - TRUE ~ blueprint_confirmed - ) ) |> - - mutate(azhimut_confirmed = if_else(cell_type_clean == "cd4hymocyte" & predicted.celltype.l2 |> str_detect("cd4|treg") & !blueprint_singler |> str_detect("cd4"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "cd4hymocyte" & !predicted.celltype.l2 |> str_detect("cd4") & blueprint_singler |> str_detect("cd4|treg"), T, blueprint_confirmed) ) |> - - mutate(azhimut_confirmed = case_when( - cell_type_clean %in% c("cd8 memory t") & predicted.celltype.l2 == "cd8 tem" & blueprint_singler != "cd8 tcm" ~ T, - cell_type_clean %in% c("cd8 memory t") & predicted.celltype.l2 == "cd8 tcm" & blueprint_singler != "cd8 tem" ~ T, - TRUE ~ azhimut_confirmed - ) ) |> - mutate(blueprint_confirmed = case_when( - cell_type_clean %in% c("cd8 memory t") & predicted.celltype.l2 != "cd8 tem" & blueprint_singler == "cd8 tcm" ~ T, - cell_type_clean %in% c("cd8 memory t") & predicted.celltype.l2 != "cd8 tcm" & blueprint_singler == "cd8 tem" ~ T, - TRUE ~ blueprint_confirmed - ) ) |> - - mutate(azhimut_confirmed = case_when( - cell_type_clean %in% c("cd4 memory t") & predicted.celltype.l2 == "cd4 tem" & blueprint_singler != "cd8 tcm" ~ T, - cell_type_clean %in% c("cd4 memory t") & predicted.celltype.l2 == "cd4 tcm" & blueprint_singler != "cd8 tem" ~ T, - TRUE ~ azhimut_confirmed - ) ) |> - mutate(blueprint_confirmed = case_when( - cell_type_clean %in% c("cd4 memory t") & predicted.celltype.l2 != "cd4 tem" & blueprint_singler == "cd4 tcm" ~ T, - cell_type_clean %in% c("cd4 memory t") & predicted.celltype.l2 != "cd4 tcm" & blueprint_singler == "cd4 tem" ~ T, - TRUE ~ blueprint_confirmed - ) ) |> - - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "t") & blueprint_singler =="cd8 t" & predicted.celltype.l2 |> str_detect("cd8"), T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "t") & blueprint_singler =="cd4 t" & predicted.celltype.l2 |> str_detect("cd4|treg"), T, azhimut_confirmed) ) |> - - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "treg") & blueprint_singler %in% c("tregs"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "treg") & predicted.celltype.l2 == "treg", T, azhimut_confirmed) ) |> - - - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "tcm cd4") & blueprint_singler %in% c("cd4 tcm"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "tcm cd4") & predicted.celltype.l2 == "cd4 tcm", T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "tcm cd8") & blueprint_singler %in% c("cd8 tcm"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "tcm cd8") & predicted.celltype.l2 == "cd8 tcm", T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "tem cd4") & blueprint_singler %in% c("cd4 tem"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "tem cd4") & predicted.celltype.l2 == "cd4 tem", T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "tem cd8") & blueprint_singler %in% c("cd8 tem"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "tem cd8") & predicted.celltype.l2 == "cd8 tem", T, azhimut_confirmed) ) |> - - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "tgd") & predicted.celltype.l2 == "gdt", T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "activated cd4") & predicted.celltype.l2 == "cd4 proliferating", T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "activated cd8") & predicted.celltype.l2 == "cd8 proliferating", T, azhimut_confirmed) ) |> - - - - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c("naive cd4", "naive t") & predicted.celltype.l2 %in% c("cd4 naive"), T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c("naive cd8", "naive t") & predicted.celltype.l2 %in% c("cd8 naive"), T, azhimut_confirmed) ) |> - - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "prot") & predicted.celltype.l2 %in% c("cd4 naive") & !blueprint_singler |> str_detect("clp|hcs|mpp|cd8"), T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "prot") & predicted.celltype.l2 %in% c("cd8 naive") & !blueprint_singler |> str_detect("clp|hcs|mpp|cd4"), T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "prot") & predicted.celltype.l2 %in% c("hspc"), T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "prot") & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, blueprint_confirmed) ) |> - - mutate(azhimut_confirmed = if_else(cell_type_clean == "dendritic" & predicted.celltype.l2 %in% c("asdc", "cdc2", "cdc1", "pdc"), T, azhimut_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "double negative t regulatory" & predicted.celltype.l2 == "dnt", T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "early t lineage precursor", "immature innate lymphoid") & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "early t lineage precursor", "immature innate lymphoid") & predicted.celltype.l2 == "hspc" & blueprint_singler != "clp", T, azhimut_confirmed) ) |> - - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c("ilc1", "ilc2", "innate lymphoid") & blueprint_singler == "nk", T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c("ilc1", "ilc2", "innate lymphoid") & predicted.celltype.l2 %in% c( "nk", "ilc", "nk proliferating"), T, azhimut_confirmed) ) |> - - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "immature t") & blueprint_singler %in% c("naive t"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "immature t") & predicted.celltype.l2 == "t naive", T, azhimut_confirmed) ) |> - - mutate(cell_type_harmonised = if_else(cell_type_clean == "fraction a prepro b", "naive b", cell_type_harmonised)) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == "granulocyte" & blueprint_singler %in% c("eosinophils", "neutrophils"), T, blueprint_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c("immature neutrophil", "neutrophil") & blueprint_singler %in% c( "neutrophils"), T, blueprint_confirmed) ) |> - - mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("megakaryocyte") & blueprint_singler |> str_detect("megakaryocyte"), T, blueprint_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("macrophage") & blueprint_singler |> str_detect("macrophage"), T, blueprint_confirmed) ) |> - - mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "nk") & blueprint_singler %in% c("nk"), T, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "nk") & predicted.celltype.l2 %in% c("nk", "nk proliferating", "nk_cd56bright", "ilc"), T, azhimut_confirmed) ) |> - - - # If identical force - mutate(azhimut_confirmed = if_else(cell_type_clean == predicted.celltype.l2 , T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean == blueprint_singler , T, blueprint_confirmed) ) |> - - # Perogenitor - mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("progenitor|hematopoietic|precursor") & predicted.celltype.l2 == "hspc", T, azhimut_confirmed) ) |> - mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("progenitor|hematopoietic|precursor") & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, blueprint_confirmed) ) |> - - # Generic original annotation and stem for new annotations - mutate(azhimut_confirmed = if_else( - cell_type_clean %in% c("T cell", "myeloid cell", "leukocyte", "myeloid leukocyte", "B cell") & - predicted.celltype.l2 == "hspc" & - blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, azhimut_confirmed) ) |> - - # Omit mature for stem - mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("mature") & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), F, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("mature") & predicted.celltype.l2 == "hspc", F, azhimut_confirmed) ) |> - - # Omit megacariocyte for stem - mutate(blueprint_confirmed = if_else(cell_type_clean == "megakaryocyte" & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), F, blueprint_confirmed) ) |> - mutate(azhimut_confirmed = if_else(cell_type_clean == "megakaryocyte" & predicted.celltype.l2 == "hspc", F, azhimut_confirmed) ) |> - - # Mast cells - mutate(cell_type_harmonised = if_else(cell_type_clean == "mast", "mast", cell_type_harmonised)) |> - - - # Visualise - #distinct(cell_type_clean, predicted.celltype.l2, blueprint_singler, strong_evidence, azhimut_confirmed, blueprint_confirmed) |> - arrange(!strong_evidence, cell_type_clean) |> - - # set cell names - mutate(cell_type_harmonised = case_when( - cell_type_harmonised == "" & azhimut_confirmed ~ predicted.celltype.l2, - cell_type_harmonised == "" & blueprint_confirmed ~ blueprint_singler, - TRUE ~ cell_type_harmonised - )) |> - - # Add NA - mutate(cell_type_harmonised = case_when(cell_type_harmonised != "" ~ cell_type_harmonised)) |> - - # Add unannotated cells because datasets were too small - mutate(cell_type_harmonised = case_when( - is.na(cell_type_harmonised) & cell_type_clean |> str_detect("progenitor|hematopoietic|stem|precursor") ~ "stem", - - is.na(cell_type_harmonised) & cell_type_clean == "cd14 monocyte" ~ "cd14 mono", - is.na(cell_type_harmonised) & cell_type_clean == "cd16 monocyte" ~ "cd16 mono", - is.na(cell_type_harmonised) & cell_type_clean %in% c("cd4 cytotoxic t", "tem cd4") ~ "cd4 tem", - is.na(cell_type_harmonised) & cell_type_clean %in% c("cd8 cytotoxic t", "tem cd8") ~ "cd8 tem", - is.na(cell_type_harmonised) & cell_type_clean |> str_detect("macrophage") ~ "macrophage", - is.na(cell_type_harmonised) & cell_type_clean %in% c("mature b", "memory b", "transitional stage b") ~ "b memory", - is.na(cell_type_harmonised) & cell_type_clean == "mucosal invariant t" ~ "mait", - is.na(cell_type_harmonised) & cell_type_clean == "naive b" ~ "b naive", - is.na(cell_type_harmonised) & cell_type_clean == "nk" ~ "nk", - is.na(cell_type_harmonised) & cell_type_clean == "naive cd4" ~"cd4 naive", - is.na(cell_type_harmonised) & cell_type_clean == "naive cd8" ~"cd8 naive", - is.na(cell_type_harmonised) & cell_type_clean == "treg" ~ "treg", - is.na(cell_type_harmonised) & cell_type_clean == "tgd" ~ "tgd", - TRUE ~ cell_type_harmonised - )) |> - - mutate(confidence_class = case_when( - !is.na(cell_type_harmonised) & strong_evidence ~ 2, - !is.na(cell_type_harmonised) & !strong_evidence ~ 3 - )) |> - - # Lowest grade annotation UNreliable - mutate(cell_type_harmonised = case_when( - - # Get origincal annotation - is.na(cell_type_harmonised) & cell_type_clean %in% c("neutrophil", "granulocyte") ~ cell_type_clean, - is.na(cell_type_harmonised) & cell_type_clean %in% c("conventional dendritic", "dendritic") ~ "cdc", - is.na(cell_type_harmonised) & cell_type_clean %in% c("classical monocyte") ~ "cd14 mono", - - # Get Seurat annotation - is.na(cell_type_harmonised) & predicted.celltype.l2 != "eryth" & !is.na(predicted.celltype.l2) ~ predicted.celltype.l2, - is.na(cell_type_harmonised) & !blueprint_singler %in% c( - "astrocytes", "smooth muscle", "preadipocytes", "mesangial", "myocytes", - "doublet", "melanocytes", "chondrocytes", "mv endothelial", "fibros", - "neurons", "keratinocytes", "endothelial", "epithelial", "skeletal muscle", "pericytes", "erythrocytes", "adipocytes" - ) & !is.na(blueprint_singler) ~ blueprint_singler, - TRUE ~ cell_type_harmonised - - )) |> - - # Lowest grade annotation UNreliable - mutate(cell_type_harmonised = case_when( - - # Get origincal annotation - !cell_type_harmonised %in% c("doublet", "platelet") ~ cell_type_harmonised - - )) |> - - mutate(confidence_class = case_when( - is.na(confidence_class) & !is.na(cell_type_harmonised) ~ 4, - TRUE ~ confidence_class - )) - - # Another passage - - # annotated_samples = annotation_crated_UNconfirmed |> filter(!is.na(cell_type_harmonised)) |> distinct( cell_type, .sample, file_id) - # - # annotation_crated_UNconfirmed |> - # filter(is.na(cell_type_harmonised)) |> - # count(cell_type , cell_type_harmonised ,predicted.celltype.l2 ,blueprint_singler) |> - # arrange(desc(n)) |> - # print(n=99) - - - annotation_all = - annotation_crated_confirmed |> - clean_cell_types_deeper() |> - bind_rows( - annotation_crated_UNconfirmed - ) |> - - # I have multiple confidence_class per combination of labels - distinct() |> - with_groups(c(cell_type_clean, predicted.celltype.l2, blueprint_singler), ~ .x |> arrange(confidence_class) |> slice(1)) |> - - # Simplify after harmonisation - mutate(cell_type_harmonised = case_when( - cell_type_harmonised %in% c("b memory", "b intermediate", "classswitched memory b", "memory b" ) ~ "b memory", - cell_type_harmonised %in% c("b naive", "naive b") ~ "b naive", - cell_type_harmonised %in% c("nk_cd56bright", "nk", "nk proliferating", "ilc") ~ "ilc", - cell_type_harmonised %in% c("mpp", "clp", "hspc", "mep", "cmp", "hsc", "gmp") ~ "stem", - cell_type_harmonised %in% c("macrophages", "macrophages m1", "macrophages m2") ~ "macrophage", - cell_type_harmonised %in% c("treg", "tregs") ~ "treg", - cell_type_harmonised %in% c("gdt", "tgd") ~ "tgd", - cell_type_harmonised %in% c("cd8 proliferating", "cd8 tem") ~ "cd8 tem", - cell_type_harmonised %in% c("cd4 proliferating", "cd4 tem") ~ "cd4 tem", - cell_type_harmonised %in% c("eosinophils", "neutrophils", "granulocyte", "neutrophil") ~ "granulocyte", - cell_type_harmonised %in% c("cdc", "cdc1", "cdc2", "dc") ~ "cdc", - - TRUE ~ cell_type_harmonised - )) |> - dplyr::select(cell_type_clean, cell_type_harmonised, predicted.celltype.l2, blueprint_singler, confidence_class) |> - distinct() - - - curated_annotation = - annotation |> - clean_cell_types_deeper() |> - filter(lineage_1=="immune") |> - dplyr::select( - .cell, .sample, cell_type, cell_type_clean, predicted.celltype.l2, blueprint_singler, monaco_singler) |> - left_join( - annotation_all , - by = c("cell_type_clean", "predicted.celltype.l2", "blueprint_singler") - ) |> - dplyr::select( - .cell, .sample, cell_type, cell_type_harmonised, confidence_class, - cell_annotation_azimuth_l2 = predicted.celltype.l2, cell_annotation_blueprint_singler = blueprint_singler, - cell_annotation_monaco_singler = monaco_singler - ) |> - - # Reannotation of generic cell types - mutate(cell_type_harmonised = case_when( - cell_type_harmonised=="cd4 t" & cell_annotation_monaco_singler |> str_detect("effector memory") ~ "cd4 tem", - cell_type_harmonised=="cd4 t" & cell_annotation_monaco_singler |> str_detect("mait") ~ "mait", - cell_type_harmonised=="cd4 t" & cell_annotation_monaco_singler |> str_detect("central memory") ~ "cd4 tcm", - cell_type_harmonised=="cd4 t" & cell_annotation_monaco_singler |> str_detect("naive") ~ "cd4 naive", - cell_type_harmonised=="cd8 t" & cell_annotation_monaco_singler |> str_detect("effector memory") ~ "cd8 tem", - cell_type_harmonised=="cd8 t" & cell_annotation_monaco_singler |> str_detect("central memory") ~ "cd8 tcm", - cell_type_harmonised=="cd8 t" & cell_annotation_monaco_singler |> str_detect("naive") ~ "cd8 naive", - cell_type_harmonised=="monocytes" & cell_annotation_monaco_singler |> str_detect("non classical") ~ "cd16 mono", - cell_type == "nonclassical monocyte" & cell_type_harmonised=="monocytes" & cell_annotation_monaco_singler =="intermediate monocytes" ~ "cd16 mono", - cell_type_harmonised=="monocytes" & cell_annotation_monaco_singler |> str_detect("^classical") ~ "cd14 mono", - cell_type == "classical monocyte" & cell_type_harmonised=="monocytes" & cell_annotation_monaco_singler =="intermediate monocytes" ~ "cd14 mono", - cell_type_harmonised=="monocytes" & cell_annotation_monaco_singler =="myeloid dendritic" & str_detect(cell_annotation_azimuth_l2, "cdc") ~ "cdc", - - - TRUE ~ cell_type_harmonised - )) |> - - # Change CD4 classification for version 0.2.1 - mutate(confidence_class = if_else( - cell_type_harmonised |> str_detect("cd4|mait|treg|tgd") & cell_annotation_monaco_singler %in% c("terminal effector cd4 t", "naive cd4 t", "th2", "th17", "t regulatory", "follicular helper t", "th1/th17", "th1", "nonvd2 gd t", "vd2 gd t"), - 3, - confidence_class - )) |> - - # Change CD4 classification for version 0.2.1 - mutate(cell_type_harmonised = if_else( - cell_type_harmonised |> str_detect("cd4|mait|treg|tgd") & cell_annotation_monaco_singler %in% c("terminal effector cd4 t", "naive cd4 t", "th2", "th17", "t regulatory", "follicular helper t", "th1/th17", "th1", "nonvd2 gd t", "vd2 gd t"), - cell_annotation_monaco_singler, - cell_type_harmonised - )) |> - - - mutate(cell_type_harmonised = cell_type_harmonised |> - str_replace("naive cd4 t", "cd4 naive") |> - str_replace("th2", "cd4 th2") |> - str_replace("^th17$", "cd4 th17") |> - str_replace("t regulatory", "treg") |> - str_replace("follicular helper t", "cd4 fh") |> - str_replace("th1/th17", "cd4 th1/th17") |> - str_replace("^th1$", "cd4 th1") |> - str_replace("nonvd2 gd t", "tgd") |> - str_replace("vd2 gd t", "tgd") - ) |> - - # add immune_unclassified - mutate(cell_type_harmonised = if_else(cell_type_harmonised == "monocytes", "immune_unclassified", cell_type_harmonised)) |> - mutate(cell_type_harmonised = if_else(is.na(cell_type_harmonised), "immune_unclassified", cell_type_harmonised)) |> - mutate(confidence_class = if_else(is.na(confidence_class), 5, confidence_class)) |> - - # drop uncommon cells - mutate(cell_type_harmonised = if_else(cell_type_harmonised %in% c("cd4 t", "cd8 t", "asdc", "cd4 ctl"), "immune_unclassified", cell_type_harmonised)) - - - # Further rescue of unannotated cells, manually - - # curated_annotation |> - # filter(cell_type_harmonised == "immune_unclassified") |> - # count(cell_type , cell_type_harmonised ,confidence_class ,cell_annotation_azimuth_l2 ,cell_annotation_blueprint_singler ,cell_annotation_monaco_singler) |> - # arrange(desc(n)) |> - # write_csv("curated_annotation_still_unannotated_0.2.csv") - - - curated_annotation = - curated_annotation |> - left_join( - read_csv("~/PostDoc/CuratedAtlasQueryR/dev/curated_annotation_still_unannotated_0.2_manually_labelled.csv") |> - select(cell_type, cell_type_harmonised_manually_curated = cell_type_harmonised, confidence_class_manually_curated = confidence_class, everything()), - by = join_by(cell_type, cell_annotation_azimuth_l2, cell_annotation_blueprint_singler, cell_annotation_monaco_singler) - ) |> - mutate( - confidence_class = if_else(cell_type_harmonised == "immune_unclassified", confidence_class_manually_curated, confidence_class), - cell_type_harmonised = if_else(cell_type_harmonised == "immune_unclassified", cell_type_harmonised_manually_curated, cell_type_harmonised), - ) |> - select(-contains("manually_curated"), -n) |> - - # drop uncommon cells - mutate(cell_type_harmonised = if_else(cell_type_harmonised %in% c("cd4 tcm", "cd4 tem"), "immune_unclassified", cell_type_harmonised)) - - - - # # Recover confidence class == 4 - - # curated_annotation |> - # filter(confidence_class==4) |> - # count(cell_type , cell_type_harmonised ,confidence_class ,cell_annotation_azimuth_l2 ,cell_annotation_blueprint_singler ,cell_annotation_monaco_singler) |> - # arrange(desc(n)) |> - # write_csv("curated_annotation_still_unannotated_0.2_confidence_class_4.csv") - - curated_annotation = - curated_annotation |> - left_join( - read_csv("~/PostDoc/CuratedAtlasQueryR/dev/curated_annotation_still_unannotated_0.2_confidence_class_4_manually_labelled.csv") |> - select(confidence_class_manually_curated = confidence_class, everything()), - by = join_by(cell_type, cell_type_harmonised, cell_annotation_azimuth_l2, cell_annotation_blueprint_singler, cell_annotation_monaco_singler) - ) |> - mutate( - confidence_class = if_else(confidence_class == 4 & !is.na(confidence_class_manually_curated), confidence_class_manually_curated, confidence_class) - ) |> - select(-contains("manually_curated"), -n) - - # Correct fishy stem cell labelling - # If stem for the study's annotation and blueprint is non-immune it is probably wrong, - # even because the heart has too many progenitor/stem - curated_annotation = - curated_annotation |> - mutate(confidence_class = case_when( - cell_type_harmonised == "stem" & cell_annotation_blueprint_singler %in% c( - "skeletal muscle", "adipocytes", "epithelial", "smooth muscle", "chondrocytes", "endothelial" - ) ~ 5, - TRUE ~ confidence_class - )) - - - curated_annotation_merged = - - # Fix cell ID - metadata_df |> - dplyr::select(.cell, .sample, cell_type) |> - as_tibble() |> - - # Add cell type - left_join(curated_annotation |> dplyr::select(-cell_type), by = c(".cell", ".sample")) |> - - # Add non immune - mutate(cell_type_harmonised = if_else(is.na(cell_type_harmonised), "non_immune", cell_type_harmonised)) |> - mutate(confidence_class = if_else(is.na(confidence_class) & cell_type_harmonised == "non_immune", 1, confidence_class)) |> - - # For some unknown reason - distinct() - - - curated_annotation_merged |> - - # Save - saveRDS(file_curated_annotation_merged) - - metadata_annotated = - curated_annotation_merged |> - - # merge with the rest of metadata - left_join( - metadata_df |> - as_tibble(), - by=c(".cell", ".sample", "cell_type") - ) - - # Replace `.` with `_` for all column names as it can create difficoulties for MySQL and Python - colnames(metadata_annotated) = colnames(metadata_annotated) |> str_replace_all("\\.", "_") - metadata_annotated = metadata_annotated |> rename(cell_ = `_cell`, sample_ = `_sample`) - - - dictionary_connie_non_immune = - metadata_annotated |> - filter(cell_type_harmonised == "non_immune") |> - distinct(cell_type) |> - harmonise_names_non_immune() |> - rename(cell_type_harmonised_non_immune = cell_type_harmonised ) - - metadata_annotated = - metadata_annotated |> - left_join(dictionary_connie_non_immune) |> - mutate(cell_type_harmonised = if_else(cell_type_harmonised=="non_immune", cell_type_harmonised_non_immune, cell_type_harmonised)) |> - select(-cell_type_harmonised_non_immune) - - -} +# get_manually_curated_immune_cell_types = function(){ +# +# # library(zellkonverter) +# # library(Seurat) +# # library(SingleCellExperiment) # load early to avoid masking dplyr::count() +# # library(tidySingleCellExperiment) +# # library(dplyr) +# # library(cellxgenedp) +# # library(tidyverse) +# #library(tidySingleCellExperiment) +# # library(stringr) +# # library(scMerge) +# # library(glue) +# # library(tidyseurat) +# # library(celldex) +# # library(SingleR) +# # library(glmGamPoi) +# # library(stringr) +# # library(purrr) +# +# +# #Fix GCHECKS +# metadata_file = NULL +# .cell = NULL +# cell_type = NULL +# file_id = NULL +# .sample = NULL +# azhimut_confirmed = NULL +# blueprint_confirmed <- NULL +# arrange <- NULL # This one is actually a function from dplyr, so you should use it with dplyr::arrange or import it +# cell_type_clean <- NULL +# blueprint_singler <- NULL +# predicted.celltype.l2 <- NULL +# strong_evidence <- NULL +# cell_type_harmonised <- NULL +# confidence_class <- NULL +# lineage_1 <- NULL +# monaco_singler <- NULL +# cell_annotation_monaco_singler <- NULL +# cell_annotation_azimuth_l2 <- NULL +# cell_annotation_blueprint_singler <- NULL +# confidence_class_manually_curated <- NULL +# cell_type_harmonised_manually_curated <- NULL +# file_curated_annotation_merged <- NULL +# .sample <- NULL +# cell_type_harmonised_non_immune <- NULL +# +# # library(zellkonverter) +# # library(Seurat) +# # library(SingleCellExperiment) # load early to avoid masking dplyr::count() +# # library(tidySingleCellExperiment) +# # library(dplyr) +# # library(cellxgenedp) +# # library(tidyverse) +# # #library(tidySingleCellExperiment) +# # library(stringr) +# # library(scMerge) +# # library(glue) +# # library(DelayedArray) +# # library(HDF5Array) +# # library(tidyseurat) +# # library(celldex) +# # library(SingleR) +# # library(glmGamPoi) +# # library(stringr) +# # library(purrr) +# +# # # source("utility.R") +# # +# # metadata_file = "/vast/projects/cellxgene_curated//metadata_0.2.rds" +# # file_curated_annotation_merged = "~/PostDoc/CuratedAtlasQueryR/dev/cell_type_curated_annotation_0.2.3.rds" +# # file_metadata_annotated = "/vast/projects/cellxgene_curated/metadata_annotated_0.2.3.rds" +# # annotation_directory = "/vast/projects/cellxgene_curated//annotated_data_0.2/" +# # +# # # metadata_file = "/vast/projects/cellxgene_curated//metadata.rds" +# # # file_curated_annotation_merged = "~/PostDoc/CuratedAtlasQueryR/dev/cell_type_curated_annotation.rds" +# # # file_metadata_annotated = "/vast/projects/cellxgene_curated//metadata_annotated.rds" +# # # annotation_directory = "/vast/projects/cellxgene_curated//annotated_data_0.1/" +# # +# # +# # annotation_harmonised = +# # dir(annotation_directory, full.names = TRUE) |> +# # enframe(value="file") |> +# # tidyr::extract( file,".sample", "/([a-z0-9]+)\\.rds", remove = F) |> +# # mutate(data = map(file, ~ .x |> readRDS() |> select(-contains("score")) )) |> +# # unnest(data) |> +# # +# # # Format +# # mutate(across(c(predicted.celltype.l1, predicted.celltype.l2, blueprint_singler, monaco_singler, ), tolower )) |> +# # mutate(across(c(predicted.celltype.l1, predicted.celltype.l2, blueprint_singler, monaco_singler, ), clean_cell_types )) |> +# # +# # # Format +# # is_strong_evidence(predicted.celltype.l2, blueprint_singler) |> +# # +# # +# # +# # +# # job::job({ +# # annotation_harmonised |> saveRDS("~/PostDoc/CuratedAtlasQueryR/dev/annotated_data_0.2_temp_table.rds") +# # }) +# # +# +# annotation_harmonised = readRDS("~/PostDoc/CuratedAtlasQueryR/dev/annotated_data_0.2_temp_table.rds") +# +# # library(CuratedAtlasQueryR) +# metadata_df = readRDS(metadata_file) +# +# # Integrate with metadata +# +# annotation = +# metadata_df |> +# select(.cell, cell_type, file_id, .sample) |> +# as_tibble() |> +# left_join(read_csv("~/PostDoc/CuratedAtlasQueryR/dev/metadata_cell_type.csv"), by = "cell_type") |> +# left_join(annotation_harmonised, by = c(".cell", ".sample")) |> +# +# # Clen cell types +# mutate(cell_type_clean = cell_type |> clean_cell_types()) +# +# # annotation |> +# # filter(lineage_1=="immune") |> +# # count(cell_type, predicted.celltype.l2, blueprint_singler, strong_evidence) |> +# # arrange(!strong_evidence, desc(n)) |> +# # write_csv("~/PostDoc/CuratedAtlasQueryR/dev/annotation_confirm.csv") +# +# +# annotation_crated_confirmed = +# read_csv("~/PostDoc/CuratedAtlasQueryR/dev/annotation_confirm_manually_curated.csv") |> +# +# # TEMPORARY +# rename(cell_type_clean = cell_type) |> +# +# filter(!is.na(azhimut_confirmed) | !is.na(blueprint_confirmed)) |> +# filter(azhimut_confirmed + blueprint_confirmed > 0) |> +# +# # Format +# mutate(cell_type_harmonised = case_when( +# azhimut_confirmed ~ predicted.celltype.l2, +# blueprint_confirmed ~ blueprint_singler +# )) |> +# +# mutate(confidence_class = 1) +# +# +# +# # To avoid immune cell annotation if very contrasting evidence +# blueprint_definitely_non_immune = c( "astrocytes" , "chondrocytes" , "endothelial" , "epithelial" , "fibros" , "keratinocytes" , "melanocytes" , "mesangial" , "mv endothelial", "myocytes" , "neurons" , "pericytes" , "preadipocytes" , "skeletal muscle" , "smooth muscle" ) +# +# +# +# annotation_crated_UNconfirmed = +# +# # Read +# read_csv("~/PostDoc/CuratedAtlasQueryR/dev/annotation_confirm_manually_curated.csv") |> +# +# # TEMPORARY +# rename(cell_type_clean = cell_type) |> +# +# filter(is.na(azhimut_confirmed) | (azhimut_confirmed + blueprint_confirmed) == 0) |> +# +# clean_cell_types_deeper() |> +# +# mutate(cell_type_harmonised = "") |> +# +# # Classify strong evidence +# mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("cd8 cytokine secreting tem t") & blueprint_singler == "nk", T, blueprint_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("cd8 cytotoxic t") & blueprint_singler == "nk", T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("cd8alphaalpha intraepithelial t") & predicted.celltype.l2 == "cd8 tem" & blueprint_singler == "cd8 tem", T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("mature t") & strong_evidence & predicted.celltype.l2 |> str_detect("tem|tcm"), T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("myeloid") & strong_evidence & predicted.celltype.l2 == "cd16 mono", T, azhimut_confirmed) ) |> +# +# # Classify weak evidence +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c("b", "B") & predicted.celltype.l2 == "b memory" & blueprint_singler == "classswitched memory b", T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c("b", "B") & predicted.celltype.l2 %in% c("b memory", "b intermediate", "b naive", "plasma") & !blueprint_singler %in% c("classswitched memory b", "memory b", "naive b"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c("b", "B") & !predicted.celltype.l2 %in% c("b memory", "b intermediate", "b naive") & blueprint_singler %in% c("classswitched memory b", "memory b", "naive b", "plasma"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "activated cd4" & predicted.celltype.l2 %in% c("cd4 tcm", "cd4 tem", "tregs"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "activated cd4" & blueprint_singler %in% c("cd4 tcm", "cd4 tem", "tregs"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "activated cd8" & predicted.celltype.l2 %in% c("cd8 tcm", "cd8 tem"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "activated cd8" & blueprint_singler %in% c("cd8 tcm", "cd8 tem"), T, blueprint_confirmed) ) |> +# +# # Monocyte macrophage +# mutate(azhimut_confirmed = if_else(cell_type_clean == "cd14 cd16 monocyte" & predicted.celltype.l2 %in% c("cd14 mono", "cd16 mono"), T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "cd14 cd16negative classical monocyte" & predicted.celltype.l2 %in% c("cd14 mono"), T, azhimut_confirmed) ) |> +# mutate(cell_type_harmonised = if_else(cell_type_clean == "cd14 cd16negative classical monocyte" & blueprint_singler %in% c("monocytes"), "cd14 mono", cell_type_harmonised) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "cd14 monocyte" & predicted.celltype.l2 %in% c("cd14 mono"), T, azhimut_confirmed) ) |> +# mutate(cell_type_harmonised = if_else(cell_type_clean == "cd14 monocyte" & blueprint_singler %in% c("monocytes"), "cd14 mono", cell_type_harmonised) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "cd14low cd16 monocyte" & predicted.celltype.l2 %in% c("cd16 mono"), T, azhimut_confirmed) ) |> +# mutate(cell_type_harmonised = if_else(cell_type_clean == "cd14low cd16 monocyte" & blueprint_singler %in% c("monocytes"), "cd16 mono", cell_type_harmonised) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "cd16 monocyte" & predicted.celltype.l2 %in% c("cd16 mono"), T, azhimut_confirmed) ) |> +# mutate(cell_type_harmonised = if_else(cell_type_clean == "cd16 monocyte" & blueprint_singler %in% c("monocytes"), "cd16 mono", cell_type_harmonised) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "monocyte" & blueprint_singler |> str_detect("monocyte|macrophage") & !predicted.celltype.l2 |> str_detect(" mono"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "monocyte" & predicted.celltype.l2 |> str_detect(" mono"), T, azhimut_confirmed) ) |> +# +# +# mutate(azhimut_confirmed = if_else(cell_type_clean == "cd4" & predicted.celltype.l2 |> str_detect("cd4|treg") & !blueprint_singler |> str_detect("cd4"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "cd4" & !predicted.celltype.l2 |> str_detect("cd4") & blueprint_singler |> str_detect("cd4|treg"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "cd8" & predicted.celltype.l2 |> str_detect("cd8") & !blueprint_singler |> str_detect("cd8"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "cd8" & !predicted.celltype.l2 |> str_detect("cd8") & blueprint_singler |> str_detect("cd8"), T, blueprint_confirmed) ) |> +# +# +# mutate(azhimut_confirmed = if_else(cell_type_clean == "memory t" & predicted.celltype.l2 |> str_detect("tem|tcm") & !blueprint_singler |> str_detect("tem|tcm"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "memory t" & !predicted.celltype.l2 |> str_detect("tem|tcm") & blueprint_singler |> str_detect("tem|tcm"), T, blueprint_confirmed) ) |> +# +# +# mutate(azhimut_confirmed = if_else(cell_type_clean == "cd8alphaalpha intraepithelial t" & predicted.celltype.l2 |> str_detect("cd8") & !blueprint_singler |> str_detect("cd8"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "cd8alphaalpha intraepithelial t" & !predicted.celltype.l2 |> str_detect("cd8") & blueprint_singler |> str_detect("cd8"), T, blueprint_confirmed) ) |> +# +# mutate(azhimut_confirmed = if_else(cell_type_clean == "cd8hymocyte" & predicted.celltype.l2 |> str_detect("cd8") & !blueprint_singler |> str_detect("cd8"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "cd8hymocyte" & !predicted.celltype.l2 |> str_detect("cd8") & blueprint_singler |> str_detect("cd8"), T, blueprint_confirmed) ) |> +# +# # B cells +# mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("memory b") & predicted.celltype.l2 =="b memory", T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("memory b") & blueprint_singler |> str_detect("memory b"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "immature b" & predicted.celltype.l2 =="b naive", T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "immature b" & blueprint_singler |> str_detect("naive b"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "mature b" & predicted.celltype.l2 %in% c("b memory", "b intermediate"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "mature b" & blueprint_singler |> str_detect("memory b"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "naive b" & predicted.celltype.l2 %in% c("b naive"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "naive b" & blueprint_singler |> str_detect("naive b"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "transitional stage b" & predicted.celltype.l2 %in% c("b intermediate"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "transitional stage b" & blueprint_singler |> str_detect("naive b") & !predicted.celltype.l2 %in% c("b intermediate"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "memory b" & predicted.celltype.l2 %in% c("b intermediate"), T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "precursor b", "prob") & predicted.celltype.l2 %in% c("b naive") & !blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "precursor b", "prob") & blueprint_singler |> str_detect("naive b") & predicted.celltype.l2 %in% c("hspc"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "precursor b", "prob") & predicted.celltype.l2 %in% c("hspc"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "precursor b", "prob") & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, blueprint_confirmed) ) |> +# +# # Plasma cells +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "plasma") & predicted.celltype.l2 == "plasma" , T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "plasma") & predicted.celltype.l2 == "plasma" , T, blueprint_confirmed) ) |> +# +# mutate(azhimut_confirmed = case_when( +# cell_type_clean %in% c("cd4 cytotoxic t", "cd4 helper t") & predicted.celltype.l2 == "cd4 ctl" & blueprint_singler != "cd4 tcm" ~ T, +# cell_type_clean %in% c("cd4 cytotoxic t", "cd4 helper t") & predicted.celltype.l2 == "cd4 tem" & blueprint_singler != "cd4 tcm" ~ T, +# TRUE ~ azhimut_confirmed +# ) ) |> +# mutate(blueprint_confirmed = case_when( +# cell_type_clean %in% c("cd4 cytotoxic t", "cd4 helper t") & blueprint_singler == "cd4 tem" & predicted.celltype.l2 != "cd4 tcm" ~ T, +# cell_type_clean %in% c("cd4 cytotoxic t", "cd4 helper t") & blueprint_singler == "cd4 t" & predicted.celltype.l2 != "cd4 tcm" ~ T, +# TRUE ~ blueprint_confirmed +# ) ) |> +# +# mutate(azhimut_confirmed = if_else(cell_type_clean == "cd4hymocyte" & predicted.celltype.l2 |> str_detect("cd4|treg") & !blueprint_singler |> str_detect("cd4"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "cd4hymocyte" & !predicted.celltype.l2 |> str_detect("cd4") & blueprint_singler |> str_detect("cd4|treg"), T, blueprint_confirmed) ) |> +# +# mutate(azhimut_confirmed = case_when( +# cell_type_clean %in% c("cd8 memory t") & predicted.celltype.l2 == "cd8 tem" & blueprint_singler != "cd8 tcm" ~ T, +# cell_type_clean %in% c("cd8 memory t") & predicted.celltype.l2 == "cd8 tcm" & blueprint_singler != "cd8 tem" ~ T, +# TRUE ~ azhimut_confirmed +# ) ) |> +# mutate(blueprint_confirmed = case_when( +# cell_type_clean %in% c("cd8 memory t") & predicted.celltype.l2 != "cd8 tem" & blueprint_singler == "cd8 tcm" ~ T, +# cell_type_clean %in% c("cd8 memory t") & predicted.celltype.l2 != "cd8 tcm" & blueprint_singler == "cd8 tem" ~ T, +# TRUE ~ blueprint_confirmed +# ) ) |> +# +# mutate(azhimut_confirmed = case_when( +# cell_type_clean %in% c("cd4 memory t") & predicted.celltype.l2 == "cd4 tem" & blueprint_singler != "cd8 tcm" ~ T, +# cell_type_clean %in% c("cd4 memory t") & predicted.celltype.l2 == "cd4 tcm" & blueprint_singler != "cd8 tem" ~ T, +# TRUE ~ azhimut_confirmed +# ) ) |> +# mutate(blueprint_confirmed = case_when( +# cell_type_clean %in% c("cd4 memory t") & predicted.celltype.l2 != "cd4 tem" & blueprint_singler == "cd4 tcm" ~ T, +# cell_type_clean %in% c("cd4 memory t") & predicted.celltype.l2 != "cd4 tcm" & blueprint_singler == "cd4 tem" ~ T, +# TRUE ~ blueprint_confirmed +# ) ) |> +# +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "t") & blueprint_singler =="cd8 t" & predicted.celltype.l2 |> str_detect("cd8"), T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "t") & blueprint_singler =="cd4 t" & predicted.celltype.l2 |> str_detect("cd4|treg"), T, azhimut_confirmed) ) |> +# +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "treg") & blueprint_singler %in% c("tregs"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "treg") & predicted.celltype.l2 == "treg", T, azhimut_confirmed) ) |> +# +# +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "tcm cd4") & blueprint_singler %in% c("cd4 tcm"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "tcm cd4") & predicted.celltype.l2 == "cd4 tcm", T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "tcm cd8") & blueprint_singler %in% c("cd8 tcm"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "tcm cd8") & predicted.celltype.l2 == "cd8 tcm", T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "tem cd4") & blueprint_singler %in% c("cd4 tem"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "tem cd4") & predicted.celltype.l2 == "cd4 tem", T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "tem cd8") & blueprint_singler %in% c("cd8 tem"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "tem cd8") & predicted.celltype.l2 == "cd8 tem", T, azhimut_confirmed) ) |> +# +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "tgd") & predicted.celltype.l2 == "gdt", T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "activated cd4") & predicted.celltype.l2 == "cd4 proliferating", T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "activated cd8") & predicted.celltype.l2 == "cd8 proliferating", T, azhimut_confirmed) ) |> +# +# +# +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c("naive cd4", "naive t") & predicted.celltype.l2 %in% c("cd4 naive"), T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c("naive cd8", "naive t") & predicted.celltype.l2 %in% c("cd8 naive"), T, azhimut_confirmed) ) |> +# +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "prot") & predicted.celltype.l2 %in% c("cd4 naive") & !blueprint_singler |> str_detect("clp|hcs|mpp|cd8"), T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "prot") & predicted.celltype.l2 %in% c("cd8 naive") & !blueprint_singler |> str_detect("clp|hcs|mpp|cd4"), T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "prot") & predicted.celltype.l2 %in% c("hspc"), T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "prot") & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, blueprint_confirmed) ) |> +# +# mutate(azhimut_confirmed = if_else(cell_type_clean == "dendritic" & predicted.celltype.l2 %in% c("asdc", "cdc2", "cdc1", "pdc"), T, azhimut_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "double negative t regulatory" & predicted.celltype.l2 == "dnt", T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "early t lineage precursor", "immature innate lymphoid") & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "early t lineage precursor", "immature innate lymphoid") & predicted.celltype.l2 == "hspc" & blueprint_singler != "clp", T, azhimut_confirmed) ) |> +# +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c("ilc1", "ilc2", "innate lymphoid") & blueprint_singler == "nk", T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c("ilc1", "ilc2", "innate lymphoid") & predicted.celltype.l2 %in% c( "nk", "ilc", "nk proliferating"), T, azhimut_confirmed) ) |> +# +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "immature t") & blueprint_singler %in% c("naive t"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "immature t") & predicted.celltype.l2 == "t naive", T, azhimut_confirmed) ) |> +# +# mutate(cell_type_harmonised = if_else(cell_type_clean == "fraction a prepro b", "naive b", cell_type_harmonised)) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == "granulocyte" & blueprint_singler %in% c("eosinophils", "neutrophils"), T, blueprint_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c("immature neutrophil", "neutrophil") & blueprint_singler %in% c( "neutrophils"), T, blueprint_confirmed) ) |> +# +# mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("megakaryocyte") & blueprint_singler |> str_detect("megakaryocyte"), T, blueprint_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("macrophage") & blueprint_singler |> str_detect("macrophage"), T, blueprint_confirmed) ) |> +# +# mutate(blueprint_confirmed = if_else(cell_type_clean %in% c( "nk") & blueprint_singler %in% c("nk"), T, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean %in% c( "nk") & predicted.celltype.l2 %in% c("nk", "nk proliferating", "nk_cd56bright", "ilc"), T, azhimut_confirmed) ) |> +# +# +# # If identical force +# mutate(azhimut_confirmed = if_else(cell_type_clean == predicted.celltype.l2 , T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean == blueprint_singler , T, blueprint_confirmed) ) |> +# +# # Perogenitor +# mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("progenitor|hematopoietic|precursor") & predicted.celltype.l2 == "hspc", T, azhimut_confirmed) ) |> +# mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("progenitor|hematopoietic|precursor") & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, blueprint_confirmed) ) |> +# +# # Generic original annotation and stem for new annotations +# mutate(azhimut_confirmed = if_else( +# cell_type_clean %in% c("T cell", "myeloid cell", "leukocyte", "myeloid leukocyte", "B cell") & +# predicted.celltype.l2 == "hspc" & +# blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), T, azhimut_confirmed) ) |> +# +# # Omit mature for stem +# mutate(blueprint_confirmed = if_else(cell_type_clean |> str_detect("mature") & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), F, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean |> str_detect("mature") & predicted.celltype.l2 == "hspc", F, azhimut_confirmed) ) |> +# +# # Omit megacariocyte for stem +# mutate(blueprint_confirmed = if_else(cell_type_clean == "megakaryocyte" & blueprint_singler %in% c("clp","hcs", "mpp", "gmp"), F, blueprint_confirmed) ) |> +# mutate(azhimut_confirmed = if_else(cell_type_clean == "megakaryocyte" & predicted.celltype.l2 == "hspc", F, azhimut_confirmed) ) |> +# +# # Mast cells +# mutate(cell_type_harmonised = if_else(cell_type_clean == "mast", "mast", cell_type_harmonised)) |> +# +# +# # Visualise +# #distinct(cell_type_clean, predicted.celltype.l2, blueprint_singler, strong_evidence, azhimut_confirmed, blueprint_confirmed) |> +# arrange(!strong_evidence, cell_type_clean) |> +# +# # set cell names +# mutate(cell_type_harmonised = case_when( +# cell_type_harmonised == "" & azhimut_confirmed ~ predicted.celltype.l2, +# cell_type_harmonised == "" & blueprint_confirmed ~ blueprint_singler, +# TRUE ~ cell_type_harmonised +# )) |> +# +# # Add NA +# mutate(cell_type_harmonised = case_when(cell_type_harmonised != "" ~ cell_type_harmonised)) |> +# +# # Add unannotated cells because datasets were too small +# mutate(cell_type_harmonised = case_when( +# is.na(cell_type_harmonised) & cell_type_clean |> str_detect("progenitor|hematopoietic|stem|precursor") ~ "stem", +# +# is.na(cell_type_harmonised) & cell_type_clean == "cd14 monocyte" ~ "cd14 mono", +# is.na(cell_type_harmonised) & cell_type_clean == "cd16 monocyte" ~ "cd16 mono", +# is.na(cell_type_harmonised) & cell_type_clean %in% c("cd4 cytotoxic t", "tem cd4") ~ "cd4 tem", +# is.na(cell_type_harmonised) & cell_type_clean %in% c("cd8 cytotoxic t", "tem cd8") ~ "cd8 tem", +# is.na(cell_type_harmonised) & cell_type_clean |> str_detect("macrophage") ~ "macrophage", +# is.na(cell_type_harmonised) & cell_type_clean %in% c("mature b", "memory b", "transitional stage b") ~ "b memory", +# is.na(cell_type_harmonised) & cell_type_clean == "mucosal invariant t" ~ "mait", +# is.na(cell_type_harmonised) & cell_type_clean == "naive b" ~ "b naive", +# is.na(cell_type_harmonised) & cell_type_clean == "nk" ~ "nk", +# is.na(cell_type_harmonised) & cell_type_clean == "naive cd4" ~"cd4 naive", +# is.na(cell_type_harmonised) & cell_type_clean == "naive cd8" ~"cd8 naive", +# is.na(cell_type_harmonised) & cell_type_clean == "treg" ~ "treg", +# is.na(cell_type_harmonised) & cell_type_clean == "tgd" ~ "tgd", +# TRUE ~ cell_type_harmonised +# )) |> +# +# mutate(confidence_class = case_when( +# !is.na(cell_type_harmonised) & strong_evidence ~ 2, +# !is.na(cell_type_harmonised) & !strong_evidence ~ 3 +# )) |> +# +# # Lowest grade annotation UNreliable +# mutate(cell_type_harmonised = case_when( +# +# # Get origincal annotation +# is.na(cell_type_harmonised) & cell_type_clean %in% c("neutrophil", "granulocyte") ~ cell_type_clean, +# is.na(cell_type_harmonised) & cell_type_clean %in% c("conventional dendritic", "dendritic") ~ "cdc", +# is.na(cell_type_harmonised) & cell_type_clean %in% c("classical monocyte") ~ "cd14 mono", +# +# # Get Seurat annotation +# is.na(cell_type_harmonised) & predicted.celltype.l2 != "eryth" & !is.na(predicted.celltype.l2) ~ predicted.celltype.l2, +# is.na(cell_type_harmonised) & !blueprint_singler %in% c( +# "astrocytes", "smooth muscle", "preadipocytes", "mesangial", "myocytes", +# "doublet", "melanocytes", "chondrocytes", "mv endothelial", "fibros", +# "neurons", "keratinocytes", "endothelial", "epithelial", "skeletal muscle", "pericytes", "erythrocytes", "adipocytes" +# ) & !is.na(blueprint_singler) ~ blueprint_singler, +# TRUE ~ cell_type_harmonised +# +# )) |> +# +# # Lowest grade annotation UNreliable +# mutate(cell_type_harmonised = case_when( +# +# # Get origincal annotation +# !cell_type_harmonised %in% c("doublet", "platelet") ~ cell_type_harmonised +# +# )) |> +# +# mutate(confidence_class = case_when( +# is.na(confidence_class) & !is.na(cell_type_harmonised) ~ 4, +# TRUE ~ confidence_class +# )) +# +# # Another passage +# +# # annotated_samples = annotation_crated_UNconfirmed |> filter(!is.na(cell_type_harmonised)) |> distinct( cell_type, .sample, file_id) +# # +# # annotation_crated_UNconfirmed |> +# # filter(is.na(cell_type_harmonised)) |> +# # count(cell_type , cell_type_harmonised ,predicted.celltype.l2 ,blueprint_singler) |> +# # arrange(desc(n)) |> +# # print(n=99) +# +# +# annotation_all = +# annotation_crated_confirmed |> +# clean_cell_types_deeper() |> +# bind_rows( +# annotation_crated_UNconfirmed +# ) |> +# +# # I have multiple confidence_class per combination of labels +# distinct() |> +# with_groups(c(cell_type_clean, predicted.celltype.l2, blueprint_singler), ~ .x |> arrange(confidence_class) |> slice(1)) |> +# +# # Simplify after harmonisation +# mutate(cell_type_harmonised = case_when( +# cell_type_harmonised %in% c("b memory", "b intermediate", "classswitched memory b", "memory b" ) ~ "b memory", +# cell_type_harmonised %in% c("b naive", "naive b") ~ "b naive", +# cell_type_harmonised %in% c("nk_cd56bright", "nk", "nk proliferating", "ilc") ~ "ilc", +# cell_type_harmonised %in% c("mpp", "clp", "hspc", "mep", "cmp", "hsc", "gmp") ~ "stem", +# cell_type_harmonised %in% c("macrophages", "macrophages m1", "macrophages m2") ~ "macrophage", +# cell_type_harmonised %in% c("treg", "tregs") ~ "treg", +# cell_type_harmonised %in% c("gdt", "tgd") ~ "tgd", +# cell_type_harmonised %in% c("cd8 proliferating", "cd8 tem") ~ "cd8 tem", +# cell_type_harmonised %in% c("cd4 proliferating", "cd4 tem") ~ "cd4 tem", +# cell_type_harmonised %in% c("eosinophils", "neutrophils", "granulocyte", "neutrophil") ~ "granulocyte", +# cell_type_harmonised %in% c("cdc", "cdc1", "cdc2", "dc") ~ "cdc", +# +# TRUE ~ cell_type_harmonised +# )) |> +# dplyr::select(cell_type_clean, cell_type_harmonised, predicted.celltype.l2, blueprint_singler, confidence_class) |> +# distinct() +# +# +# curated_annotation = +# annotation |> +# clean_cell_types_deeper() |> +# filter(lineage_1=="immune") |> +# dplyr::select( +# .cell, .sample, cell_type, cell_type_clean, predicted.celltype.l2, blueprint_singler, monaco_singler) |> +# left_join( +# annotation_all , +# by = c("cell_type_clean", "predicted.celltype.l2", "blueprint_singler") +# ) |> +# dplyr::select( +# .cell, .sample, cell_type, cell_type_harmonised, confidence_class, +# cell_annotation_azimuth_l2 = predicted.celltype.l2, cell_annotation_blueprint_singler = blueprint_singler, +# cell_annotation_monaco_singler = monaco_singler +# ) |> +# +# # Reannotation of generic cell types +# mutate(cell_type_harmonised = case_when( +# cell_type_harmonised=="cd4 t" & cell_annotation_monaco_singler |> str_detect("effector memory") ~ "cd4 tem", +# cell_type_harmonised=="cd4 t" & cell_annotation_monaco_singler |> str_detect("mait") ~ "mait", +# cell_type_harmonised=="cd4 t" & cell_annotation_monaco_singler |> str_detect("central memory") ~ "cd4 tcm", +# cell_type_harmonised=="cd4 t" & cell_annotation_monaco_singler |> str_detect("naive") ~ "cd4 naive", +# cell_type_harmonised=="cd8 t" & cell_annotation_monaco_singler |> str_detect("effector memory") ~ "cd8 tem", +# cell_type_harmonised=="cd8 t" & cell_annotation_monaco_singler |> str_detect("central memory") ~ "cd8 tcm", +# cell_type_harmonised=="cd8 t" & cell_annotation_monaco_singler |> str_detect("naive") ~ "cd8 naive", +# cell_type_harmonised=="monocytes" & cell_annotation_monaco_singler |> str_detect("non classical") ~ "cd16 mono", +# cell_type == "nonclassical monocyte" & cell_type_harmonised=="monocytes" & cell_annotation_monaco_singler =="intermediate monocytes" ~ "cd16 mono", +# cell_type_harmonised=="monocytes" & cell_annotation_monaco_singler |> str_detect("^classical") ~ "cd14 mono", +# cell_type == "classical monocyte" & cell_type_harmonised=="monocytes" & cell_annotation_monaco_singler =="intermediate monocytes" ~ "cd14 mono", +# cell_type_harmonised=="monocytes" & cell_annotation_monaco_singler =="myeloid dendritic" & str_detect(cell_annotation_azimuth_l2, "cdc") ~ "cdc", +# +# +# TRUE ~ cell_type_harmonised +# )) |> +# +# # Change CD4 classification for version 0.2.1 +# mutate(confidence_class = if_else( +# cell_type_harmonised |> str_detect("cd4|mait|treg|tgd") & cell_annotation_monaco_singler %in% c("terminal effector cd4 t", "naive cd4 t", "th2", "th17", "t regulatory", "follicular helper t", "th1/th17", "th1", "nonvd2 gd t", "vd2 gd t"), +# 3, +# confidence_class +# )) |> +# +# # Change CD4 classification for version 0.2.1 +# mutate(cell_type_harmonised = if_else( +# cell_type_harmonised |> str_detect("cd4|mait|treg|tgd") & cell_annotation_monaco_singler %in% c("terminal effector cd4 t", "naive cd4 t", "th2", "th17", "t regulatory", "follicular helper t", "th1/th17", "th1", "nonvd2 gd t", "vd2 gd t"), +# cell_annotation_monaco_singler, +# cell_type_harmonised +# )) |> +# +# +# mutate(cell_type_harmonised = cell_type_harmonised |> +# str_replace("naive cd4 t", "cd4 naive") |> +# str_replace("th2", "cd4 th2") |> +# str_replace("^th17$", "cd4 th17") |> +# str_replace("t regulatory", "treg") |> +# str_replace("follicular helper t", "cd4 fh") |> +# str_replace("th1/th17", "cd4 th1/th17") |> +# str_replace("^th1$", "cd4 th1") |> +# str_replace("nonvd2 gd t", "tgd") |> +# str_replace("vd2 gd t", "tgd") +# ) |> +# +# # add immune_unclassified +# mutate(cell_type_harmonised = if_else(cell_type_harmonised == "monocytes", "immune_unclassified", cell_type_harmonised)) |> +# mutate(cell_type_harmonised = if_else(is.na(cell_type_harmonised), "immune_unclassified", cell_type_harmonised)) |> +# mutate(confidence_class = if_else(is.na(confidence_class), 5, confidence_class)) |> +# +# # drop uncommon cells +# mutate(cell_type_harmonised = if_else(cell_type_harmonised %in% c("cd4 t", "cd8 t", "asdc", "cd4 ctl"), "immune_unclassified", cell_type_harmonised)) +# +# +# # Further rescue of unannotated cells, manually +# +# # curated_annotation |> +# # filter(cell_type_harmonised == "immune_unclassified") |> +# # count(cell_type , cell_type_harmonised ,confidence_class ,cell_annotation_azimuth_l2 ,cell_annotation_blueprint_singler ,cell_annotation_monaco_singler) |> +# # arrange(desc(n)) |> +# # write_csv("curated_annotation_still_unannotated_0.2.csv") +# +# +# curated_annotation = +# curated_annotation |> +# left_join( +# read_csv("~/PostDoc/CuratedAtlasQueryR/dev/curated_annotation_still_unannotated_0.2_manually_labelled.csv") |> +# select(cell_type, cell_type_harmonised_manually_curated = cell_type_harmonised, confidence_class_manually_curated = confidence_class, everything()), +# by = join_by(cell_type, cell_annotation_azimuth_l2, cell_annotation_blueprint_singler, cell_annotation_monaco_singler) +# ) |> +# mutate( +# confidence_class = if_else(cell_type_harmonised == "immune_unclassified", confidence_class_manually_curated, confidence_class), +# cell_type_harmonised = if_else(cell_type_harmonised == "immune_unclassified", cell_type_harmonised_manually_curated, cell_type_harmonised), +# ) |> +# select(-contains("manually_curated"), -n) |> +# +# # drop uncommon cells +# mutate(cell_type_harmonised = if_else(cell_type_harmonised %in% c("cd4 tcm", "cd4 tem"), "immune_unclassified", cell_type_harmonised)) +# +# +# +# # # Recover confidence class == 4 +# +# # curated_annotation |> +# # filter(confidence_class==4) |> +# # count(cell_type , cell_type_harmonised ,confidence_class ,cell_annotation_azimuth_l2 ,cell_annotation_blueprint_singler ,cell_annotation_monaco_singler) |> +# # arrange(desc(n)) |> +# # write_csv("curated_annotation_still_unannotated_0.2_confidence_class_4.csv") +# +# curated_annotation = +# curated_annotation |> +# left_join( +# read_csv("~/PostDoc/CuratedAtlasQueryR/dev/curated_annotation_still_unannotated_0.2_confidence_class_4_manually_labelled.csv") |> +# select(confidence_class_manually_curated = confidence_class, everything()), +# by = join_by(cell_type, cell_type_harmonised, cell_annotation_azimuth_l2, cell_annotation_blueprint_singler, cell_annotation_monaco_singler) +# ) |> +# mutate( +# confidence_class = if_else(confidence_class == 4 & !is.na(confidence_class_manually_curated), confidence_class_manually_curated, confidence_class) +# ) |> +# select(-contains("manually_curated"), -n) +# +# # Correct fishy stem cell labelling +# # If stem for the study's annotation and blueprint is non-immune it is probably wrong, +# # even because the heart has too many progenitor/stem +# curated_annotation = +# curated_annotation |> +# mutate(confidence_class = case_when( +# cell_type_harmonised == "stem" & cell_annotation_blueprint_singler %in% c( +# "skeletal muscle", "adipocytes", "epithelial", "smooth muscle", "chondrocytes", "endothelial" +# ) ~ 5, +# TRUE ~ confidence_class +# )) +# +# +# curated_annotation_merged = +# +# # Fix cell ID +# metadata_df |> +# dplyr::select(.cell, .sample, cell_type) |> +# as_tibble() |> +# +# # Add cell type +# left_join(curated_annotation |> dplyr::select(-cell_type), by = c(".cell", ".sample")) |> +# +# # Add non immune +# mutate(cell_type_harmonised = if_else(is.na(cell_type_harmonised), "non_immune", cell_type_harmonised)) |> +# mutate(confidence_class = if_else(is.na(confidence_class) & cell_type_harmonised == "non_immune", 1, confidence_class)) |> +# +# # For some unknown reason +# distinct() +# +# +# curated_annotation_merged |> +# +# # Save +# saveRDS(file_curated_annotation_merged) +# +# metadata_annotated = +# curated_annotation_merged |> +# +# # merge with the rest of metadata +# left_join( +# metadata_df |> +# as_tibble(), +# by=c(".cell", ".sample", "cell_type") +# ) +# +# # Replace `.` with `_` for all column names as it can create difficoulties for MySQL and Python +# colnames(metadata_annotated) = colnames(metadata_annotated) |> str_replace_all("\\.", "_") +# metadata_annotated = metadata_annotated |> rename(cell_ = `_cell`, sample_ = `_sample`) +# +# +# dictionary_connie_non_immune = +# metadata_annotated |> +# filter(cell_type_harmonised == "non_immune") |> +# distinct(cell_type) |> +# harmonise_names_non_immune() |> +# rename(cell_type_harmonised_non_immune = cell_type_harmonised ) +# +# metadata_annotated = +# metadata_annotated |> +# left_join(dictionary_connie_non_immune) |> +# mutate(cell_type_harmonised = if_else(cell_type_harmonised=="non_immune", cell_type_harmonised_non_immune, cell_type_harmonised)) |> +# select(-cell_type_harmonised_non_immune) +# +# +# } remove_files_safely <- function(files) { for (file in files) { From 1a183a6ab84a55f1f447657e23749bc61f39ab13 Mon Sep 17 00:00:00 2001 From: stemangiola Date: Tue, 8 Oct 2024 10:53:13 +1100 Subject: [PATCH 047/145] update exports --- NAMESPACE | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index e5b894bd..8b8e980e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -173,6 +173,7 @@ importFrom(dplyr,rename) importFrom(dplyr,select) importFrom(dplyr,summarise) importFrom(dplyr,tibble) +importFrom(dplyr,tribble) importFrom(dplyr,with_groups) importFrom(edgeR,estimateDisp) importFrom(future,nbrOfWorkers) @@ -229,7 +230,6 @@ importFrom(stringr,str_c) importFrom(stringr,str_detect) importFrom(stringr,str_remove) importFrom(stringr,str_remove_all) -importFrom(stringr,str_replace) importFrom(stringr,str_replace_all) importFrom(stringr,str_subset) importFrom(stringr,str_trim) @@ -244,6 +244,7 @@ importFrom(tibble,tibble) importFrom(tidybulk,as_SummarizedExperiment) importFrom(tidybulk,pivot_transcript) importFrom(tidybulk,test_differential_abundance) +importFrom(tidyr,expand_grid) importFrom(tidyr,gather) importFrom(tidyr,nest) importFrom(tidyr,pivot_longer) From df20eeb2a98ba7fa6ae9dad7531a6cb8925d01d0 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Mon, 14 Oct 2024 11:53:30 +1100 Subject: [PATCH 048/145] Update report generation and testing --- NAMESPACE | 2 + R/factories.R | 3 +- R/modules_grammar_hpc.R | 51 ++- R/utilities.R | 55 ++- README.rmd | 30 +- inst/rmd/Doublet_identification_report.Rmd | 425 +++++++++++++++------ inst/rmd/Empty_droplet_report.Rmd | 45 ++- inst/rmd/Technical_variation_report.Rmd | 2 +- man/empty_droplet_id.Rd | 2 +- tests/testthat/test_single_functions.R | 62 ++- 10 files changed, 503 insertions(+), 174 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index cb9cddd5..4cc6d542 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -16,6 +16,7 @@ export(alive_identification) export(annotate_cell_type) export(annotation_consensus) export(annotation_label_transfer) +export(calc_UMAP) export(calculate_pseudobulk) export(cell_cycle_scoring) export(convert_gene_names) @@ -66,6 +67,7 @@ export(test_differential_abundance_hpc) export(tranform_assay) export(transform_utility) export(vector_to_code) +exportMethods(test_differential_abundance) import(SeuratObject) import(broom) import(crew) diff --git a/R/factories.R b/R/factories.R index f72170ce..bc78ebfb 100644 --- a/R/factories.R +++ b/R/factories.R @@ -442,8 +442,7 @@ hpc_merge = #' #' #' @export -hpc_report = - function(input_hpc, target_output = NULL, rmd_path = NULL, ...) { +hpc_report = function(input_hpc, target_output = NULL, rmd_path = NULL, ...) { # # Check for argument consistency # check_for_name_value_conflicts(...) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 9e90e1ee..3e4aec88 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -65,10 +65,12 @@ initialise_hpc <- function(input_hpc, dir.create(store, showWarnings = FALSE, recursive = TRUE) data_file_names = glue("{store}/{names(input_hpc)}.rds") + # Save parameters to files? input_hpc |> as.list() |> saveRDS("input_file.rds") gene_nomenclature |> saveRDS("temp_gene_nomenclature.rds") data_container_type |> saveRDS("data_container_type.rds") computing_resources |> saveRDS("temp_computing_resources.rds") + # Get the index of jobs of different priority tiers = tier |> get_positions() tiers |> @@ -147,7 +149,6 @@ initialise_hpc <- function(input_hpc, - # Define the generic function #' @export remove_empty_DropletUtils <- function(input_hpc, total_RNA_count_check = NULL, target_input = "data_object", target_output = "empty_tbl", ...) { @@ -455,6 +456,49 @@ get_single_cell.HPCell = function(input_hpc, target_input = "data_object", targe } +# Define the generic function + +# calc_UMAP_reports <- function(input_hpc, target_input = "data_object", target_output = "calc_UMAP_dbl_report", ...) { +# UseMethod("calc_UMAP_reports") +# } + + +# calc_UMAP_reports.HPCell = function(input_hpc, target_input = "data_object", target_output = "calc_UMAP_dbl_report", ...) { +# +# input_hpc |> +# hpc_iterate( +# target_output = target_output, +# user_function = calc_UMAP |> quote(), +# input_seurat = target_input |> is_target() +# ) +# +# } + +# calc_UMAP_reports.Seurat = function(input_hpc, target_input = "data_object", target_output = "calc_UMAP_dbl_report", ...){ +# +# # Capture all arguments including defaults +# args_list <- as.list(environment()) +# +# # Optionally, you can evaluate the arguments if they are expressions +# args_list <- lapply(args_list, eval, envir = parent.frame()) +# +# list(initialisation = list(input_hpc = input_hpc)) |> +# add_class("HPCell") |> +# calc_UMAP_reports() +# } + + +# target_chunk_undefined_calc_UMAP_reports = function(input_hpc){ +# +# input_hpc |> +# hpc_iterate( +# target_output = "calc_UMAP_dbl_report", +# packages = c("Seurat") +# ) + +# } + + #' Test Differential Abundance for HPCell #' @@ -656,6 +700,11 @@ evaluate_hpc.HPCell = function(input_hpc) { if(! "sct_matrix" %in% names(input_hpc)) target_chunk_undefined_normalise_abundance_seurat_SCT(input_hpc) + # #---------------------------# + # # Calculate UMAP for reports + # #---------------------------# + # if(! "calc_UMAP_dbl_report" %in% names(input_hpc)) + # target_chunk_undefined_calc_UMAP_reports(input_hpc) #-----------------------# # Reports diff --git a/R/utilities.R b/R/utilities.R index 511742ed..ff8acb2b 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -105,7 +105,7 @@ convert_gene_names <- function(id, empty_droplet_id <- function(input_read_RNA_assay, total_RNA_count_check = -Inf, assay = NULL, - gene_nomenclature){ + gene_nomenclature = "symbol"){ #Fix GChecks FDR = NULL .cell = NULL @@ -819,20 +819,49 @@ addition = function(a, b){ #' @noRd #' #' @importFrom Seurat RunUMAP -calc_UMAP <- function(input_seurat){ - assay_name = input_seurat@assays |> names() |> extract2(1) - find_var_genes <- FindVariableFeatures(input_seurat) - var_genes<- find_var_genes@assays[[assay_name]]@var.features - - x<- ScaleData(input_seurat) |> - # Calculate UMAP of clusters - RunPCA(features = var_genes) |> - FindNeighbors(dims = 1:30) |> - FindClusters(resolution = 0.5) |> - RunUMAP(dims = 1:30, spread = 0.5,min.dist = 0.01, n.neighbors = 10L) |> - as_tibble() +#' @export +calc_UMAP <- function(input_seurat) { + assay_name <- input_seurat@assays |> names() |> extract2(1) + + # Check if variable features are already present, if not calculate them + if (length(VariableFeatures(input_seurat)) == 0) { + input_seurat <- FindVariableFeatures(input_seurat) + } + + # Extract variable features using VariableFeatures() for Seurat v5 + var_genes <- VariableFeatures(input_seurat) + + # Ensure that there are variable features before proceeding + if (length(var_genes) > 0) { + # Scale data and run PCA on variable genes + x <- ScaleData(input_seurat) |> + RunPCA(features = var_genes) |> + FindNeighbors(dims = 1:30) |> + FindClusters(resolution = 0.5) |> + RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> + as_tibble() + } else { + stop("No variable features available for UMAP calculation.") + } + return(x) } + + +# calc_UMAP <- function(input_seurat){ +# assay_name = input_seurat@assays |> names() |> extract2(1) +# find_var_genes <- FindVariableFeatures(input_seurat) +# var_genes<- find_var_genes@assays[[assay_name]]@var.features +# +# x<- ScaleData(input_seurat) |> +# # Calculate UMAP of clusters +# RunPCA(features = var_genes) |> +# FindNeighbors(dims = 1:30) |> +# FindClusters(resolution = 0.5) |> +# RunUMAP(dims = 1:30, spread = 0.5,min.dist = 0.01, n.neighbors = 10L) |> +# as_tibble() +# return(x) +# } #' Subsetting input dataset into a list of SingleCellExperiment or Seurat objects by pre-specified sample column tissue #' #' @importFrom dplyr quo_name pull diff --git a/README.rmd b/README.rmd index fdcc4574..b4e7715d 100644 --- a/README.rmd +++ b/README.rmd @@ -126,7 +126,16 @@ input_hpc |> "subsets_Mito_percent", "subsets_Ribo_percent", "G2M.Score" - )) + )) |> + + hpc_report( + "empty_report", + rmd_path = "~/HPCell/inst/rmd/Empty_droplet_Report_HPC.Rmd", + empty_tbl = "empty_tbl" |> is_target(), + sample_names = "sample_names" |> is_target(), + input_meta = tar_read(data_object)[[1]]@meta.data + ) + # calculate_pseudobulk(group_by = c("sampleName")) ``` @@ -276,13 +285,20 @@ input_hpc |> gene_nomenclature = "symbol", data_container_type = "seurat_rds" ) |> - hpc_report( - "empty_report", # The name of the report output - rmd_path = "~/HPCell/inst/rmd/Empty_droplet_Report_HPC.Rmd", - x1 = "empty_tbl" |> is_target(), # The results and targets needed for the report - x2 = "sample_names" |> is_target() # The results and targets needed for the report - ) + "empty_report", + rmd_path = "~/HPCell/inst/rmd/Empty_droplet_Report_HPC.Rmd", + empty_tbl = targets::tar_read(empty_tbl), # Explicitly pass the target + sample_names = targets::tar_read(sample_names) +) + + + + + + + + tar_read(empty_report) # paste0(system.file(package = "HPCell"), "/inst/rmd/Empty_droplet_Report_HPC.Rmd") diff --git a/inst/rmd/Doublet_identification_report.Rmd b/inst/rmd/Doublet_identification_report.Rmd index e3e209ea..fd53e390 100644 --- a/inst/rmd/Doublet_identification_report.Rmd +++ b/inst/rmd/Doublet_identification_report.Rmd @@ -4,16 +4,66 @@ author: "SS" date: "2023-12-05" output: html_document params: - x1: "NA" - x2: "NA" - x3: "NA" - x4: "NA" - x5: "NA" - x6: "NA" + data_object: "data_object" + doublet_tbl: "doublet_tbl" + annotation_tbl: "annotation_tbl" + sample_names: "sample_names" --- ## Introduction This report contains UMAP representation of cell clusters and visualization of the distribution of doublets across processed samples. -```{r setup, include=FALSE} + +```{r, include=FALSE} +library(purrr) +library(dplyr) +library(tidyr) +library(ggrepel) +library(Seurat) +library(glue) +library(scDblFinder) +library(tidyseurat) +library(tidySingleCellExperiment) +library(patchwork) +library(tibble) +library(scran) +library(magrittr) +sample_column <- "orig.ident" +cell_ann_col <- "seurat_annotations" +``` + +```{r, include=FALSE} +library(purrr) +calc_UMAP <- function(input_seurat) { + assay_name <- input_seurat@assays |> names() |> extract2(1) + + # Check if variable features are already present, if not calculate them + if (length(VariableFeatures(input_seurat)) == 0) { + input_seurat <- FindVariableFeatures(input_seurat) + } + + # Extract variable features using VariableFeatures() for Seurat v5 + var_genes <- VariableFeatures(input_seurat) + + # Ensure that there are variable features before proceeding + if (length(var_genes) > 0) { + # Scale data and run PCA on variable genes + x <- ScaleData(input_seurat) |> + RunPCA(features = var_genes) |> + FindNeighbors(dims = 1:30) |> + FindClusters(resolution = 0.5) |> + RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> + as_tibble() + } else { + stop("No variable features available for UMAP calculation.") + } + + return(x) +} + +calc_UMAP_dbl_report <- map(data_object, calc_UMAP) + +``` + +```{r, include=FALSE} library(dplyr) library(tidyr) library(purrr) @@ -58,123 +108,215 @@ get_labels_clusters = function(.data, label_column, dim1, dim2){ - This visualization highlights the clustering of cell types and identifies singlets and doublets in the population. - This allows for an exploration of similarities and differences in gene expression profiles between cells from different tissues. -```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} -## Adjusting plot size according to the number of samples -# num_samples <- length(params$x1$Tissue) -# -# # Calculate the grid layout based on the number of samples -# num_columns <- ceiling(sqrt(num_samples)) -# num_rows <- ceiling(num_samples / num_columns) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -# Joining info and returning a list opf tibbles + + + + + + + + + + + + + + + + + + + +```{r, echo = FALSE, warning=FALSE} +# Joining info and returning a list of tibbles merged_combined_annotation_doublets <- list( - #params$x1, - params$x2, - params$x3, - params$x4 + print(length(calc_UMAP_dbl_report)), + doublet_tbl, + annotation_tbl ) |> - pmap( - ~ ..1 |> - left_join(..2, by = ".cell") |> - left_join(..3, by = ".cell") - #left_join(..4, by = ".cell") - ) |> - enframe(name = "sample_id", value = "annotated_metadata")|> + pmap( + ~ ..1 |> + left_join(..2, by = ".cell") |> + left_join(..3, by = ".cell") + ) |> + enframe(name = "sample_id", value = "annotated_metadata") |> mutate( - sample_name = map(annotated_metadata, ~ .x |> pull(params$x5[[1]]))) |> + sample_name = sample_names # Using the sample_names list you already have + ) |> mutate(plot_by_doublet = map2( annotated_metadata, sample_name, - ~ { - #browser() - merged_combined_annotation_doublets = .x |> - - #Sample to non overwhelmm the plotting - nest(doublet_class = -scDblFinder.class) |> - mutate(number_to_sample = if_else(scDblFinder.class=="singlet", 10000, Inf)) |> - replace_na(list(number_to_sample = Inf)) |> - # mutate( - # doublet_class = map2(doublet_class, number_to_sample, ~ .x |> sample_n(min(n(), .y))) - # ) - unnest(doublet_class) - # doublet_plots <- plot_by_doublet$doublet_class[[1]]|> - - merged_combined_annotation_doublets |> - ggplot(aes(umap_1, umap_2, color = scDblFinder.class)) + - geom_point(shape=".", size = 10) + - theme_bw() + - labs(title = .y, color = "Cell Type") + - ggrepel::geom_text_repel( - data= get_labels_clusters( - .x, - scDblFinder.class, - umap_1, - umap_2 - ) , - aes(umap_1, umap_2, label = scDblFinder.class), size = 4) + - guides(color = "none")+ + ~ { + # Sample to not overwhelm the plotting + merged_combined_annotation_doublets = .x |> + nest(doublet_class = -scDblFinder.class) |> + mutate(number_to_sample = if_else(scDblFinder.class == "singlet", 10000, Inf)) |> + replace_na(list(number_to_sample = Inf)) |> + unnest(doublet_class) + + # UMAP plot by doublet class + merged_combined_annotation_doublets |> + ggplot(aes(umap_1, umap_2, color = scDblFinder.class)) + + geom_point(shape = ".", size = 10) + + theme_bw() + + labs(title = .y, color = "Cell Type") + + ggrepel::geom_text_repel( + data = get_labels_clusters( + .x, + scDblFinder.class, + umap_1, + umap_2 + ), + aes(umap_1, umap_2, label = scDblFinder.class), size = 4 + ) + + guides(color = "none") + labs(title = .y) - #print(plot_by_doublet) - #return(plot_by_doublet) - })) |> - + } + )) |> mutate(plot_by_cell_type = map2( annotated_metadata, sample_name, - ~ { - #browser() - merged_combined_annotation_doublets = .x |> - # Sample to non overwhelmm the plotting - nest(doublet_class = -scDblFinder.class) |> - mutate(number_to_sample = if_else(scDblFinder.class=="singlet", 10000, Inf)) |> + ~ { + # Sample to not overwhelm the plotting + merged_combined_annotation_doublets = .x |> + nest(doublet_class = -scDblFinder.class) |> + mutate(number_to_sample = if_else(scDblFinder.class == "singlet", 10000, Inf)) |> replace_na(list(number_to_sample = Inf)) |> - #mutate(doublet_class = map2(doublet_class, number_to_sample, ~ .x |> sample_n(min(n(), .y))))|> - unnest(doublet_class) - + unnest(doublet_class) + + # UMAP plot by cell annotation merged_combined_annotation_doublets |> - ggplot(aes(umap_1, umap_2, color = all_of(params$x6))) + - geom_point(shape=".") + + ggplot(aes(umap_1, umap_2, color = !!sym(cell_ann_col))) + # Using the cell annotation column dynamically + geom_point(shape = ".") + theme_bw() + labs(title = .y, color = "Cell Type") + ggrepel::geom_text_repel( - data= get_labels_clusters( + data = get_labels_clusters( .x, - all_of(params$x5), - umap_1, - umap_2 - ) , - aes(umap_1, umap_2, label = all_of(params$x5)), size = 2) + + !!sym(cell_ann_col), # Assuming cell_ann_col contains your cell annotations + umap_1, + umap_2 + ), + aes(umap_1, umap_2, label = !!sym(cell_ann_col)), size = 2 + ) + guides(color = "none") + labs(title = .y) - })) |> + } + )) |> mutate(overall_plot = map2(plot_by_doublet, plot_by_cell_type, ~ .x + .y)) +# Combine the plots plot_merged_combined_annotation_doublets <- merged_combined_annotation_doublets |> - pull(overall_plot) |> - wrap_plots(ncol = 1) + - plot_layout(guides = 'collect') - # theme( - # legend.position = "bottom", - # plot.margin = margin(10, 10, 10, 10, "cm") - # ) + pull(overall_plot) |> + wrap_plots(ncol = 1) + + plot_layout(guides = 'collect') # Print plot plot_merged_combined_annotation_doublets - # patchwork::wrap_elements() |> - # map(~ .x |> - # left_join( - # params$x4 |> - # purrr::reduce(bind_rows), by=".cell" - # ) |> - # - # #join doublets identified - # left_join( - # params$x3 |> - # purrr::reduce(bind_rows), by = c(".cell") - # ) - # ) + ``` @@ -189,15 +331,14 @@ From this plot, we can infer: ```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} # 2a) Create the composition of the doublets - doublet_composition<- merged_combined_annotation_doublets |> mutate(doublet_composition = map2( annotated_metadata, sample_name, ~ { - #browser() - .x|> - dplyr::select(all_of(params$x5), scDblFinder.class)} + #browser() + .x|> + dplyr::select(!!sym(sample_column), scDblFinder.class)} )) |> # table()|> dplyr::select(sample_name, doublet_composition) |> @@ -205,50 +346,94 @@ doublet_composition<- merged_combined_annotation_doublets |> # merged_combined_annotation_doublets <- # merged_combined_annotation_doublets |> - # mutate(doublet_composition_plot = doublet_composition |> + # mutate(doublet_composition_plot = doublet_composition |> # group_by(params$x5, all_of(params$x5)) |> # mutate(proportion = count_class/sum(count_class)) |> # ungroup() # ) - + # calculate proportion and plot #calculate proportion and plot - merged_combined_annotation_doublets <- + merged_combined_annotation_doublets <- merged_combined_annotation_doublets |> mutate(doublet_composition_plot = map( annotated_metadata, - ~ .x |> - # browser() |> + ~ .x |> + # browser() |> # create frequency column - dplyr::count(.data[[params$x5]], .data[[params$x6]], scDblFinder.class, name= "count_class") |> - group_by(.data[[params$x5]], .data[[params$x6]]) |> + dplyr::count(.data[[sample_column]], .data[[cell_ann_col]], scDblFinder.class, name= "count_class") |> + group_by(.data[[sample_column]], .data[[cell_ann_col]]) |> mutate(proportion = count_class/sum(count_class)) |> ungroup() |> - + # mutate(frequency = nCount_SCT/sum(nCount_SCT)*100) |> - # + # # # create the proportion column # group_by(sample, scDblFinder.class) |> # mutate(tot_sample_proportion = sum(frequency)) |> # mutate(proportion = (frequency * 1)/tot_sample_proportion) |> - + #plot proportion - ggplot(aes(x = .data[[params$x6]] , y = proportion, fill = scDblFinder.class)) + + ggplot(aes(x = .data[[cell_ann_col]] , y = proportion, fill = scDblFinder.class)) + geom_bar(stat = "identity") + theme_bw() + - facet_wrap(~sampleName) + + facet_wrap(~ orig.ident) + theme(axis.text.x=element_text(angle=70, hjust=1)) - )) - - plot_merged_combined_annotation_doublets<- merged_combined_annotation_doublets|> - pull(doublet_composition_plot)|> + )) + +plot_merged_combined_annotation_doublets<- merged_combined_annotation_doublets|> + pull(doublet_composition_plot)|> wrap_plots(ncol = 1) + - plot_layout(guides = 'collect') - -# Print plot + plot_layout(guides = 'collect') + +# Print plot plot_merged_combined_annotation_doublets ``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inst/rmd/Empty_droplet_report.Rmd b/inst/rmd/Empty_droplet_report.Rmd index b278813b..daee294a 100644 --- a/inst/rmd/Empty_droplet_report.Rmd +++ b/inst/rmd/Empty_droplet_report.Rmd @@ -4,11 +4,8 @@ author: "SS" date: "2023-12-07" output: html_document params: - x1: "NA" - x2: "NA" - x3: "NA" - x4: "NA" - x5: "NA" + empty_tbl: "NA" + data_object: "NA" --- ```{r, warning=FALSE, message=FALSE, echo=FALSE} @@ -107,16 +104,20 @@ library(S4Vectors) # sample_names<- params$x4 # sample_names<- unlist(sample_names) -process_input<- function(input_metadata) { - input<- input_metadata |> - # input_seurat@meta.data |> - tibble::rownames_to_column(var = '.cell') - return(input) -} -processed_input_list <- map(input_meta_data_list, process_input) -unique_samples_list <- map(preprocessed_metadata_list, ~ .x |> magrittr::extract2(sample_column) |> unique()) -preprocessed_metadata_list -sample_column<- "sampleName" +# process_input<- function(input_metadata) { +# input<- input_metadata |> +# # input_seurat@meta.data |> +# tibble::rownames_to_column(var = '.cell') +# return(input) +# } +#processed_input_list <- map(input_metadata, process_input) +#unique_samples_list <- map(input_metadata, ~ .x |> magrittr::extract2(sample_column) |> unique()) +#preprocessed_metadata_list +#sample_column<- "sampleName" + +sample_column <- "orig.ident" +# data_object <- map(data_object, ~ .x %>% extract2("orig.ident") |> +# rownames_to_column(var = ".cell")) ``` ## Barcode rank plot @@ -124,12 +125,12 @@ sample_column<- "sampleName" # names(empty_droplets_tbl_list) <- unique_samples_list # Process empty droplets data empty_df <- function(input_metadata, empty_droplets_tbl) { - input <- input_metadata |> - # input_seurat@meta.data |> - tibble::rownames_to_column(var = '.cell') - + # input <- input_metadata |> + # # input_seurat@meta.data |> + # tibble::rownames_to_column(var = '.cell') + #browser() joined_data <- empty_droplets_tbl |> - left_join(input |> dplyr::select(.cell, !!sample_column), by = '.cell') + left_join(input_metadata |> dplyr::select(.cell, !!sample_column), by = '.cell') # Create a data frame with plotting information plot_data <- data.frame( @@ -149,7 +150,9 @@ empty_df <- function(input_metadata, empty_droplets_tbl) { } -process_empty_droplet_list <- purrr::map2(input_meta_data_list, empty_droplets_tbl_list, empty_df) +# process_empty_droplet_list <- purrr::map2(input_meta_data_list, empty_droplets_tbl_list, empty_df) +process_empty_droplet_list <- purrr::map2(data_object, empty_tbl, empty_df) + # Combined tibble with an identifier for each tissue/sample combined_df <- bind_rows(process_empty_droplet_list) diff --git a/inst/rmd/Technical_variation_report.Rmd b/inst/rmd/Technical_variation_report.Rmd index ec7e0ae8..e4aab59c 100644 --- a/inst/rmd/Technical_variation_report.Rmd +++ b/inst/rmd/Technical_variation_report.Rmd @@ -140,7 +140,7 @@ data_umap<- params$x4 %>% bind_rows() plot_tissue_color = data_umap |> dplyr::mutate(batch = 1) |> - ggplot(aes(umap_1, umap_2, color = data_umap[[params$x5]])) + # Ensure 'Tissue' is a column in 'data_umap' + ggplot(aes(umap_1, umap_2, color = data_umap[[params$x5]])) + geom_point(size = 0.2) + facet_wrap(~data_umap[[params$x5]]) + theme_minimal() + diff --git a/man/empty_droplet_id.Rd b/man/empty_droplet_id.Rd index 1362f176..39faddb5 100644 --- a/man/empty_droplet_id.Rd +++ b/man/empty_droplet_id.Rd @@ -8,7 +8,7 @@ empty_droplet_id( input_read_RNA_assay, total_RNA_count_check = -Inf, assay = NULL, - gene_nomenclature + gene_nomenclature = "symbol" ) } \arguments{ diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index ee5c8d27..ab40690d 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -407,7 +407,6 @@ rmarkdown::render( ) ## Pseudobulk analysis report - rmarkdown::render( input = paste0(system.file(package = "HPCell"), "/rmd/pseudobulk_analysis_report.Rmd"), output_file = paste0(system.file(package = "HPCell"), "/pseudobulk_analysis_report.html"), @@ -513,10 +512,12 @@ file_list = # Initialise pipeline characteristics -file_list |> +# file_list |> +input_hpc |> initialise_hpc( gene_nomenclature = "symbol", - data_container_type = "sce_hdf5", + # data_container_type = "sce_hdf5", + data_container_type = "seurat_rds", # debug_step = "non_batch_variation_removal_S_1", @@ -570,13 +571,14 @@ file_list |> hpc_report( "empty_report", - rmd_path = paste0(system.file(package = "HPCell"), "/rmd/test.Rmd"), - empty_list = "empty_tbl" |> is_target(), - sample_names = "sample_names" |> is_target() + rmd_path = "~/HPCell/inst/rmd/Empty_droplet_Report_HPC.Rmd", + empty_tbl = "empty_tbl" |> is_target(), + sample_names = "sample_names" |> is_target(), + data_object = "data_object" |> is_target() ) |> # ONLY APPLICABLE TO SCE FOR NOW - tranform_assay(fx = file_list |> purrr::map(~identity), target_output = "sce_transformed") |> + tranform_assay(fx = input_hpc |> purrr::map(~identity), target_output = "sce_transformed") |> hpc_iterate( target_output = "o", @@ -615,8 +617,52 @@ file_list |> calculate_pseudobulk(group_by = "monaco_first.labels.fine", target_input = "data_object") |> # test_differential_abundance(~ age_days + (1|collection_id), .abundance="counts") |> - test_differential_abundance(~ age_days, .abundance="counts", group_by_column = "monaco_first.labels.fine") |> + test_differential_abundance(~ age_days, .abundance="counts", group_by_column = "monaco_first.labels.fine") |> # For the moment only available for single cell get_single_cell(target_input = "data_object") + +input_metadata <- list(data_object$data_object_cd8b54e4bde74e66@meta.data, data_object$data_object_054cd7cffa276f6d@meta.data) + +#Testing report + +input_hpc |> + # Initialise pipeline characteristics + initialise_hpc( + gene_nomenclature = "symbol", + data_container_type = "seurat_rds" + ) |> + # calc_UMAP_reports() |> + remove_empty_DropletUtils() |> # Remove empty outliers + remove_dead_scuttle() |> # Remove dead cells + score_cell_cycle_seurat() |> # Score cell cycle + remove_doublets_scDblFinder() |> # Remove doublets + annotate_cell_type() |> # Annotation across SingleR and Seurat Azimuth + normalise_abundance_seurat_SCT(factors_to_regress = c( + "subsets_Mito_percent", + "subsets_Ribo_percent", + "G2M.Score" + )) |> + hpc_report( + "empty_report", + rmd_path = "~/HPCell/inst/rmd/Empty_droplet_report.Rmd", + empty_tbl = "empty_tbl" |> is_target(), + data_object = "data_object" |> is_target() + ) |> + hpc_report( + "doublet_report", + rmd_path = "~/HPCell/inst/rmd/Doublet_identification_report.Rmd", + data_object = "data_object" |> is_target(), + doublet_tbl = "doublet_tbl" |> is_target(), + annotation_tbl = "annotation_tbl" |> is_target(), + sample_names = "sample_names" |> is_target() + ) |> + hpc_report( + "Technical_variation_report", + rmd_path = "~/HPCell/inst/rmd/Technical_variation_report_hpc.Rmd", + data_object = "data_object" |> is_target(), + empty_tbl = "empty_tbl" |> is_target() + ) + + From 886c4a691b43a9d69fa2eee461080fd0b58adf8c Mon Sep 17 00:00:00 2001 From: stemangiola Date: Wed, 23 Oct 2024 23:36:17 +1100 Subject: [PATCH 049/145] mainly update cell consensus --- NAMESPACE | 6 +- R/differential_expression.R | 1 + R/functions.R | 125 +------- R/utilities.R | 509 +++++++++++++++++---------------- man/annotation_consensus.Rd | 35 --- man/clean_cell_types.Rd | 21 -- man/clean_cell_types_deeper.Rd | 18 -- 7 files changed, 273 insertions(+), 442 deletions(-) delete mode 100644 man/annotation_consensus.Rd delete mode 100644 man/clean_cell_types.Rd delete mode 100644 man/clean_cell_types_deeper.Rd diff --git a/NAMESPACE b/NAMESPACE index 88bd74b6..e5559cd2 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -14,7 +14,6 @@ S3method(score_cell_cycle_seurat,HPCell) S3method(tranform_assay,HPCell) export(alive_identification) export(annotate_cell_type) -export(annotation_consensus) export(annotation_label_transfer) export(calculate_pseudobulk) export(cell_cycle_scoring) @@ -133,9 +132,7 @@ importFrom(crew,crew_controller_local) importFrom(data.table,":=") importFrom(digest,digest) importFrom(dplyr,"%>%") -importFrom(dplyr,across) importFrom(dplyr,as_tibble) -importFrom(dplyr,bind_rows) importFrom(dplyr,case_when) importFrom(dplyr,count) importFrom(dplyr,distinct) @@ -175,7 +172,6 @@ importFrom(purrr,map_int) importFrom(purrr,rep_along) importFrom(purrr,safely) importFrom(purrr,set_names) -importFrom(readr,read_csv) importFrom(readr,write_lines) importFrom(rlang,enquo) importFrom(rlang,is_symbolic) @@ -193,6 +189,7 @@ importFrom(stringr,str_c) importFrom(stringr,str_detect) importFrom(stringr,str_remove) importFrom(stringr,str_remove_all) +importFrom(stringr,str_replace) importFrom(stringr,str_replace_all) importFrom(stringr,str_subset) importFrom(stringr,str_trim) @@ -209,7 +206,6 @@ importFrom(tidybulk,as_SummarizedExperiment) importFrom(tidybulk,pivot_transcript) importFrom(tidybulk,test_differential_abundance) importFrom(tidyr,expand_grid) -importFrom(tidyr,gather) importFrom(tidyr,nest) importFrom(tidyr,pivot_longer) importFrom(tidyr,replace_na) diff --git a/R/differential_expression.R b/R/differential_expression.R index a6ec451d..ebe07d58 100644 --- a/R/differential_expression.R +++ b/R/differential_expression.R @@ -200,6 +200,7 @@ map_de = function(se, my_formula, assay, method, max_rows_for_matrix_multiplicat } +#' @importFrom tidybulk test_differential_abundance #' @export #' @noRd internal_de_function = function(x, fi, a, formul, m){ diff --git a/R/functions.R b/R/functions.R index 7311b37b..83d8c664 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1190,6 +1190,8 @@ map_add_dispersion_to_se = function(se_df, .col, abundance = NULL){ #' @return Data frame with test results. #' #' @importFrom rlang enquo +#' @importFrom tidybulk test_differential_abundance +#' #' @import dplyr #' @export map_test_differential_abundance = function( @@ -1397,129 +1399,6 @@ find_variable_genes <- function(input_seurat, empty_droplet){ return(my_variable_genes) } -#' Harmonize cell type annotations based on consensus -#' -#' This function harmonizes cell type annotations by matching them with a reference annotation -#' and applying specific rules for non-immune cell types. -#' -#' @param single_cell_data A data frame containing single-cell data with cell type annotations. -#' @param .sample_column The column name specifying sample information. -#' @param .cell_type The column name for the cell type annotations. -#' @param .azimuth The column name for Azimuth annotations. -#' @param .blueprint The column name for Blueprint annotations. -#' @param .monaco The column name for Monaco annotations. -#' -#' @return A data frame with harmonized cell type annotations. -#' -#' -#' @importFrom dplyr across -#' @importFrom readr read_csv -#' @importFrom dplyr bind_rows -#' @importFrom dplyr join_by -#' @importFrom data.table := -#' -#' -#' @export -annotation_consensus = function(single_cell_data, .sample_column, .cell_type, .azimuth, .blueprint, .monaco){ - # Fix GITCHECK notes - .sample = NULL - cell_type = NULL - cell_annotation_azimuth_l2 = NULL - cell_annotation_blueprint_singler = NULL - cell_annotation_monaco_singler = NULL - .cell = NULL - cell_type_harmonised = NULL - confidence_class = NULL - - - # Fix GCHECK notes - .cell = NULL - cell_type_harmonised = NULL - confidence_class = NULL - cell_annotation_azimuth_l2 = NULL - cell_annotation_blueprint_singler = NULL - cell_annotation_monaco_singler = NULL - cell_type = NULL - .sample = NULL - .sample_column = enquo(.sample_column) - .azimuth = enquo(.azimuth) - .blueprint = enquo(.blueprint) - .monaco = enquo(.monaco) - .cell_type = enquo(.cell_type) - - # reference_annotation = - # CuratedAtlasQueryR::get_metadata() |> - # filter(cell_type_harmonised!="immune_unclassified" | is.na(cell_type_harmonised)) |> - # select(cell_type, - # cell_type_harmonised, - # cell_annotation_azimuth_l2, - # cell_annotation_blueprint_singler, - # cell_annotation_monaco_singler, - # confidence_class - # ) |> - # as_tibble() |> - # mutate(cell_type_clean = cell_type |> clean_cell_types()) |> - # HPCell::clean_cell_types_deeper() |> - # select(-cell_type) |> - # - # count(cell_type_harmonised, cell_annotation_azimuth_l2, cell_annotation_blueprint_singler, cell_annotation_monaco_singler, confidence_class, cell_type_clean) |> - # with_groups(c(cell_annotation_azimuth_l2, cell_annotation_blueprint_singler, cell_annotation_monaco_singler, cell_type_clean), ~ .x |> arrange(desc(n)) |> slice(1) ) - # - # reference_annotation |> saveRDS("reference_annotation_16_jan_2024.rds") - - reference_annotation = readRDS("reference_annotation_16_jan_2024.rds") - - annotation= - single_cell_data |> - rename( - .sample := !!.sample_column, - cell_type := !!.cell_type, - cell_annotation_azimuth_l2 := !!.azimuth, - cell_annotation_blueprint_singler := !!.blueprint, - cell_annotation_monaco_singler := !!.monaco - ) |> - select(.cell, .sample, cell_type, cell_annotation_azimuth_l2,cell_annotation_blueprint_singler, cell_annotation_monaco_singler) |> - mutate(across(c(cell_annotation_azimuth_l2, cell_annotation_blueprint_singler, cell_annotation_monaco_singler), tolower )) |> - mutate(across(c(cell_annotation_azimuth_l2, cell_annotation_blueprint_singler, cell_annotation_monaco_singler), clean_cell_types )) |> - - is_strong_evidence(cell_annotation_azimuth_l2, cell_annotation_blueprint_singler) |> - - # Clean cell types - mutate(cell_type_clean = cell_type |> clean_cell_types()) |> - left_join(read_csv("~/PostDoc/CuratedAtlasQueryR/dev/metadata_cell_type.csv"), by = "cell_type") |> - clean_cell_types_deeper() |> - - # Reference annotation link - left_join(reference_annotation ) - - annotation_connie_non_immune = - annotation |> - filter(cell_type_harmonised |> is.na()) |> - - harmonise_names_non_immune() |> - - # Fix some gaps in the original code - mutate(cell_type_harmonised = case_when( - cell_type |> tolower() |> str_detect("endothelial") ~ "endothelial_cell", - cell_type |> tolower() |> str_detect("enodothelial") ~ "endothelial_cell", - cell_type |> tolower() |> str_detect("epithelial") ~ "epithelial_cell", - cell_type |> tolower() |> str_detect("fibroblast") ~ "fibroblast", - TRUE ~ cell_type - )) |> - - mutate(confidence_class = 1) - - single_cell_data |> - left_join( - annotation |> - filter(!cell_type_harmonised |> is.na()) |> - bind_rows(annotation_connie_non_immune) |> - select(.cell, .sample, cell_type_harmonised, confidence_class), - by = join_by(.cell, !!.sample_column == .sample) - ) - -} - #' @export is_target = function(x) { diff --git a/R/utilities.R b/R/utilities.R index 469ed476..595add5e 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -48,7 +48,7 @@ read_data_container <- function(file, "seurat_rds" = readRDS(file), "sce_hdf5" = loadHDF5SummarizedExperiment(file), "seurat_h5" = SeuratDisk::LoadH5Seurat(file) - ) + ) } #' Gene name conversion using ensembl database @@ -113,12 +113,12 @@ empty_droplet_id <- function(input_read_RNA_assay, # Check if empty droplets have been identified nFeature_name <- paste0("nFeature_", assay) - #if (any(input_read_RNA_assay[[nFeature_name]] < total_RNA_count_check)) { + #if (any(input_read_RNA_assay[[nFeature_name]] < total_RNA_count_check)) { filter_empty_droplets <- "TRUE" - # } - # else { - # filter_empty_droplets <- "FALSE" - # } + # } + # else { + # filter_empty_droplets <- "FALSE" + # } significance_threshold = 0.001 # Genes to exclude @@ -614,10 +614,10 @@ tar_append = function(fx, tiers = NULL, script = targets::tar_config_get("script # Construct the call with substitute # if (length(additional_args) > 0) { - call_expr = - as.call(arguments_to_pass) |> - deparse() - + call_expr = + as.call(arguments_to_pass) |> + deparse() + # } else { # call_expr <- substitute(fx(x), env = list(fx = fx, x = tiers)) |> # deparse() @@ -716,13 +716,13 @@ append_chunk_fix = function(chunk, script = targets::tar_config_get("script")){ #' @importFrom targets tar_config_get #' @noRd append_chunk_tiers = function(chunk, tiers, script = targets::tar_config_get("script")){ - + # This does not work with purrr:::imap # As chunk does not like passed to a function tiers = tiers |> get_positions() .y = 1 for(.x in tiers |> names() ){ - + "target_list = c(target_list, list(" |> c( @@ -740,7 +740,7 @@ append_chunk_tiers = function(chunk, tiers, script = targets::tar_config_get("sc "targets::tar_option_get(\"resources\")", glue("tar_resources(crew = tar_resources_crew(\"{.x}\"))" ) ) - ) + ) ) |> # Add suffix @@ -753,7 +753,7 @@ append_chunk_tiers = function(chunk, tiers, script = targets::tar_config_get("sc .y = .y + 1 } - + } @@ -919,157 +919,156 @@ is_strong_evidence = function(single_cell_data, cell_annotation_azimuth_l2, cell #' #' @export reference_annotation_to_consensus = function(azimuth_input, monaco_input, blueprint_input){ - + # azimuth_pbmc = enquo(azimuth_pbmc) # monaco_fine = enquo(monaco_fine) # blueprint_fine = enquo(blueprint_fine) monaco = tribble( - ~Query, ~Reference, ~Database, - "Naive CD8 T cells", "cd8 naive", "monaco_fine", - "Central memory CD8 T cells", "cd8 tcm", "monaco_fine", - "Effector memory CD8 T cells", "cd8 tem", "monaco_fine", - "Terminal effector CD8 T cells", "cd8 tem", "monaco_fine", # Adjusting for the closest match - "MAIT cells", "mait", "monaco_fine", - "Vd2 gd T cells", "tgd", "monaco_fine", - "Non-Vd2 gd T cells", "tgd", "monaco_fine", # No direct match, leaving as NA - "Follicular helper T cells", "cd4 fh", "monaco_fine", - "T regulatory cells", "treg", "monaco_fine", - "Th1 cells", "cd4 th1", "monaco_fine", - "Th1/Th17 cells", "cd4 th1/th17", "monaco_fine", - "Th17 cells", "cd4 th17", "monaco_fine", - "Th2 cells", "cd4 th2", "monaco_fine", - "Naive CD4 T cells", "cd4 naive", "monaco_fine", - "Progenitor cells", "progenitor_cell", "monaco_fine", - "Naive B cells", "b naive", "monaco_fine", - "Naive B", "b naive", "monaco_fine", - "Non-switched memory B cells", "b memory", "monaco_fine", # No direct match, leaving as NA - "Nonswitched memory B", "b memory", "monaco_fine", # No direct match, leaving as NA - "Exhausted B cells", "plasma_cell", "monaco_fine", # No direct match, leaving as NA - "Switched memory B cells", "b memory", "monaco_fine", - "Switched memory B", "b memory", "monaco_fine", - "Plasmablasts", "plasma_cell", "monaco_fine", - "Classical monocytes", "cd14 mono", "monaco_fine", - "Intermediate monocytes", "cd14 mono", "monaco_fine", # Mapping to a closely related term - "Non classical monocytes", "cd16 mono", "monaco_fine", - "Natural killer cells", "nk", "monaco_fine", - "Natural killer", "nk", "monaco_fine", - "Plasmacytoid dendritic cells", "pdc", "monaco_fine", - "Myeloid dendritic cells", "cdc", "monaco_fine", - "Myeloid dendritic", "cdc", "monaco_fine", - "Low-density neutrophils", "granulocyte", "monaco_fine", - "Lowdensity neutrophils", "granulocyte", "monaco_fine", - "Low-density basophils", "granulocyte", "monaco_fine", # No direct match, leaving as NA - "Lowdensity basophils", "granulocyte", "monaco_fine", # No direct match, leaving as NA - "Terminal effector CD4 T cells", "terminal effector cd4 t", "monaco_fine", - "progenitor", "progenitor_cell", "monaco_fine" - ) - - azimuth = + ~Query, ~Reference, + "Naive CD8 T cells", "cd8 naive", + "Central memory CD8 T cells", "cd8 tcm", + "Effector memory CD8 T cells", "cd8 tem", + "Terminal effector CD8 T cells", "cd8 tem", # Adjusting for the closest match + "MAIT cells", "mait", + "Vd2 gd T cells", "tgd", + "Non-Vd2 gd T cells", "tgd", # No direct match, leaving as NA + "Follicular helper T cells", "cd4 fh", + "T regulatory cells", "treg", + "Th1 cells", "cd4 th1", + "Th1/Th17 cells", "cd4 th1/th17", + "Th17 cells", "cd4 th17", + "Th2 cells", "cd4 th2", + "Naive CD4 T cells", "cd4 naive", + "Progenitor cells", "progenitor", + "Naive B cells", "b naive", + "Naive B", "b naive", + "Non-switched memory B cells", "b memory", # No direct match, leaving as NA + "Nonswitched memory B", "b memory", # No direct match, leaving as NA + "Exhausted B cells", "plasma", # Removed " cell" + "Switched memory B cells", "b memory", + "Switched memory B", "b memory", + "Plasmablasts", "plasma", # Removed " cell" + "Classical monocytes", "cd14 mono", + "Intermediate monocytes", "cd14 mono", # Mapping to a closely related term + "Non classical monocytes", "cd16 mono", + "Natural killer cells", "nk", + "Natural killer", "nk", + "Plasmacytoid dendritic cells", "pdc", + "Myeloid dendritic cells", "cdc", + "Myeloid dendritic", "cdc", + "Low-density neutrophils", "granulocyte", + "Lowdensity neutrophils", "granulocyte", + "Low-density basophils", "granulocyte", # No direct match, leaving as NA + "Lowdensity basophils", "granulocyte", # No direct match, leaving as NA + "Terminal effector CD4 T cells", "cd4 tem", + "progenitor", "progenitor" # Removed " cell" + ) + + azimuth = tribble( - ~Query, ~Reference, ~Database, - "NK", "nk", "azimuth_pbmc", - "CD8 TEM", "cd8 tem", "azimuth_pbmc", - "CD4 CTL", "cd4 helper", "azimuth_pbmc", # CD4 cytotoxic T lymphocytes often relate to Th1 cells - "dnT", "dnt", "azimuth_pbmc", - "CD8 Naive", "cd8 naive", "azimuth_pbmc", - "CD4 Naive", "cd4 naive", "azimuth_pbmc", - "CD4 TCM", "cd4 tcm", "azimuth_pbmc", # Central memory cells often relate to Th1 or Th17 - "gdT", "tgd", "azimuth_pbmc", - "CD8 TCM", "cd8 tcm", "azimuth_pbmc", - "MAIT", "mait", "azimuth_pbmc", - "CD4 TEM", "cd4 tem", "azimuth_pbmc", # Effector memory cells can relate to terminal effector cells - "ILC", "ilc", "azimuth_pbmc", - "CD14 Mono", "cd14 mono", "azimuth_pbmc", - "cDC1", "cdc", "azimuth_pbmc", # Conventional dendritic cell 1 is commonly referred to as CDC - "pDC", "pdc", "azimuth_pbmc", - "cDC2", "cdc", "azimuth_pbmc", # No specific reference for cDC2, but using CDC as a general category - "B naive", "b naive", "azimuth_pbmc", - "B intermediate", "b memory", "azimuth_pbmc", # No direct match, leaving as NA - "B memory", "b memory", "azimuth_pbmc", - "Platelet", "platelet", "azimuth_pbmc", - "Eryth", "erythrocyte", "azimuth_pbmc", - "CD16 Mono", "cd16 mono", "azimuth_pbmc", - "HSPC", "hematopoietic_precursor_cell", "azimuth_pbmc", - "Treg", "treg", "azimuth_pbmc", - "NK_CD56bright", "nk", "azimuth_pbmc", # CD56bright NK cells are a subset of NK cells - "Plasmablast", "plasma_cell", "azimuth_pbmc", - "NK Proliferating", "NK", "azimuth_pbmc", # NK cells can be proliferative, linked to general proliferation - "ASDC", "cdc", "azimuth_pbmc", # No direct match, leaving as NA - "CD8 Proliferating", "cd8_proliferating_t_cell", "azimuth_pbmc", - "CD4 Proliferating", "cd4_proliferating_t_cell", "azimuth_pbmc", - "doublet", - "non_immune", - "azimuth_pbmc" - ) + ~Query, ~Reference, + "NK", "nk", + "CD8 TEM", "cd8 tem", + "CD4 CTL", "cd4 helper", # CD4 cytotoxic T lymphocytes often relate to Th1 cells + "dnT", "dnt", + "CD8 Naive", "cd8 naive", + "CD4 Naive", "cd4 naive", + "CD4 TCM", "cd4 tcm", # Central memory cells often relate to Th1 or Th17 + "gdT", "tgd", + "CD8 TCM", "cd8 tcm", + "MAIT", "mait", + "CD4 TEM", "cd4 tem", # Effector memory cells can relate to terminal effector cells + "ILC", "ilc", + "CD14 Mono", "cd14 mono", + "cDC1", "cdc", # Conventional dendritic cell 1 is commonly referred to as CDC + "pDC", "pdc", + "cDC2", "cdc", # No specific reference for cDC2, but using CDC as a general category + "B naive", "b naive", + "B intermediate", "b memory", # No direct match, leaving as NA + "B memory", "b memory", + "Platelet", "platelet", + "Eryth", "erythrocyte", + "CD16 Mono", "cd16 mono", + "HSPC", "progenitor", + "Treg", "treg", + "NK_CD56bright", "nk", # CD56bright NK cells are a subset of NK cells + "Plasmablast", "plasma", + "NK Proliferating", "nk", # NK cells can be proliferative + "ASDC", "cdc", # No direct match, leaving as NA + "CD8 Proliferating", "cd8 tem", + "CD4 Proliferating", "cd4 tem", + "doublet", "non immune", + NA, NA + ) + + blueprint = tribble( + ~Query, ~Reference, + "Neutrophils", "granulocyte", + "Monocytes", "monocyte", + "MEP", "progenitor", # MEP typically refers to megakaryocyte-erythroid progenitor + "CD4+ T-cells", "cd4 t", + "Tregs", "treg", + "CD4+ Tcm", "cd4 tcm", + "CD4+ Tem", "cd4 tem", + "CD8+ Tcm", "cd8 tcm", + "CD8+ Tem", "cd8 tem", + "NK cells", "nk", + "naive B-cells", "b naive", + "Memory B-cells", "b memory", + "Class-switched memory B-cells", "b memory", # No direct match, leaving as NA + "HSC", "progenitor", # HSC typically refers to hematopoietic stem cell + "MPP", "progenitor", # MPP typically refers to multipotent progenitor + "CLP", "progenitor", # CLP typically refers to common lymphoid progenitor + "GMP", "progenitor", # GMP typically refers to granulocyte-macrophage progenitor + "Macrophages", "macrophage", + "CD8+ T-cells", "cd8", + "CD8 T", "cd8", + "Erythrocytes", "erythrocyte", + "Megakaryocytes", "megakaryocytes", + "CMP", "progenitor", # CMP typically refers to common myeloid progenitor + "Macrophages M1", "macrophage m1", # Specific polarization states (M1, M2) not explicitly listed + "Macrophages M2", "macrophage m2", + "Endothelial cells", "endothelial", # Removed " cell" + "DC", "cdc", # Assuming DC refers to dendritic cells + "Eosinophils", "granulocyte", # No direct match, leaving as NA + "Plasma cells", "plasma", # Removed " cell" + "Chondrocytes", "chondrocyte", + "Fibroblasts", "fibroblast", + "Smooth muscle", "smooth muscle", # Removed " cell" from "smooth muscle cell" + "Epithelial cells", "epithelial", # Removed " cell" + "Melanocytes", "melanocyte", + "Skeletal muscle", "muscle", # "muscle cell" becomes "muscle" + "Keratinocytes", "keratinocyte", + "mv Endothelial cells", "endothelial", # Removed " cell" + "Myocytes", "myocyte", + "Adipocytes", "fat", # "fat cell" becomes "fat" after removing " cell" + "Neurons", "neuron", + "Pericytes", "pericyte", # "pericyte cell" becomes "pericyte" + "Preadipocytes", "adipocyte", # No direct match, leaving as NA + "Astrocytes", "astrocyte", + "Mesangial cells", "mesangial" # Removed " cell" + ) - blueprint = tribble( - ~Query, ~Reference, ~Database, - "Neutrophils", "granulocyte", "blueprint_fine", - "Monocytes", "monocyte", "blueprint_fine", - "MEP", "hematopoietic_cell", "blueprint_fine", # MEP typically refers to megakaryocyte-erythroid progenitor - "CD4+ T-cells", "cd4 t", "blueprint_fine", - "Tregs", "treg", "blueprint_fine", - "CD4+ Tcm", "cd4 tcm", "blueprint_fine", - "CD4+ Tem", "cd4 tem", "blueprint_fine", - "CD8+ Tcm", "cd8 tcm", "blueprint_fine", - "CD8+ Tem", "cd8 tem", "blueprint_fine", - "NK cells", "nk", "blueprint_fine", - "naive B-cells", "b naive", "blueprint_fine", - "Memory B-cells", "b memory", "blueprint_fine", - "Class-switched memory B-cells", "b memory", "blueprint_fine", # No direct match, leaving as NA - "HSC", "hematopoietic_cell", "blueprint_fine", - "MPP", "hematopoietic_cell", "blueprint_fine", # MPP typically refers to multipotent progenitor - "CLP", "hematopoietic_cell", "blueprint_fine", # CLP typically refers to common lymphoid progenitor - "GMP", "hematopoietic_cell", "blueprint_fine", # GMP typically refers to granulocyte-macrophage progenitor - "Macrophages", "macrophage", "blueprint_fine", - "CD8+ T-cells", "cd8", "blueprint_fine", - "CD8 T", "cd8", "blueprint_fine", - "Erythrocytes", "erythrocyte", "blueprint_fine", - "Megakaryocytes", "megakaryocytes", "blueprint_fine", - "CMP", "hematopoietic_cell", "blueprint_fine", # CMP typically refers to common myeloid progenitor - "Macrophages M1", "macrophage", "blueprint_fine", # Specific polarization states (M1, M2) not explicitly listed - "Macrophages M2", "macrophage", "blueprint_fine", - "Endothelial cells", "endothelial_cell", "blueprint_fine", - "DC", "cdc", "blueprint_fine", # Assuming DC refers to dendritic cells - "Eosinophils", "granulocyte", "blueprint_fine", # No direct match, leaving as NA - "Plasma cells", "plasma_cell", "blueprint_fine", - "Chondrocytes", "chondrocyte", "blueprint_fine", - "Fibroblasts", "fibroblast", "blueprint_fine", - "Smooth muscle", "smooth_muscle_cell", "blueprint_fine", - "Epithelial cells", "epithelial_cell", "blueprint_fine", - "Melanocytes", "melanocyte", "blueprint_fine", - "Skeletal muscle", "muscle_cell", "blueprint_fine", - "Keratinocytes", "keratinocyte", "blueprint_fine", - "mv Endothelial cells", "endothelial_cell", "blueprint_fine", - "Myocytes", "myocyte", "blueprint_fine", - "Adipocytes", "fat_cell", "blueprint_fine", - "Neurons", "neuron", "blueprint_fine", - "Pericytes", "pericyte_cell", "blueprint_fine", - "Preadipocytes", "adipocyte", "blueprint_fine", # No direct match, leaving as NA - "Astrocytes", "astrocyte", "blueprint_fine", - "Mesangial cells", "mesangial_cell", "blueprint_fine" - ) - non_immune_cells <- c( "megakaryocytes", - "endothelial_cell", + "endothelial", "chondrocyte", "fibroblast", - "smooth_muscle_cell", - "epithelial_cell", + "smooth muscle", + "epithelial", "melanocyte", - "muscle_cell", + "muscle", "keratinocyte", - "endothelial_cell", # Appears again in the original vector + "endothelial", # Appears again in the original vector "myocyte", - "fat_cell", + "fat", "neuron", - "pericyte_cell", + "pericyte", "adipocyte", "astrocyte", - "mesangial_cell" + "mesangial" ) t_cells <- c( @@ -1078,15 +1077,15 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr "cd8 tem", "cd4 tem", "cd4 tcm", - "terminal effector cd4 t", + "cd4 effector", "treg", "cd4 th1/th17", "cd4 th1", "cd4 th17", + "cd4 th2", "cd4 t", "t_nk", - "cd4_proliferating_t_cell", - "cd8_proliferating_t_cell", + "cd8 effector", "dnt", "cd4 naive", "cd4 th2", @@ -1098,7 +1097,7 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr b_cells <- c( "b naive", "b memory", - "plasma_cell" + "plasma" ) myeloid_cells <- c( @@ -1106,12 +1105,12 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr "monocyte", "cd16 mono", "macrophage", + "macrophage m1", + "macrophage m2", "macrophages", - "pdc", # Plasmacytoid dendritic cells + #"pdc", # Plasmacytoid dendritic cells "cdc", # Conventional dendritic cells - "promyelocyte", - "myelocyte", - "kupffer_cell" + "kupffer" ) ilcs <- c( @@ -1119,6 +1118,7 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr "nk" ) + all_combinations = expand_grid( blueprint_fine = blueprint |> pull(Reference) |> unique(), @@ -1131,35 +1131,46 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr case_when( # Non immune - blueprint_fine %in% non_immune_cells ~ "non_immune", + blueprint_fine %in% non_immune_cells ~ "non immune", # Full consensus - blueprint_fine == monaco_fine & - blueprint_fine == azimuth_pbmc ~ blueprint_fine , + blueprint_fine == monaco_fine & + blueprint_fine == azimuth_pbmc ~ blueprint_fine , + + # This goes before partial exact consensus because is a special case + monaco_fine %in% c("cd4 fh","cd4 th1","cd4 th1/th17", "cd4 th17", "cd4 th2") & blueprint_fine %in% c("cd4 tcm") & azimuth_pbmc %in% c("cd4 tcm") ~ glue("{monaco_fine} cm") , # Because most Th cells are central and effector memory CD4 T cells (CM and EM), PMID: 30726743 + monaco_fine %in% c("cd4 fh","cd4 th1","cd4 th1/th17", "cd4 th17", "cd4 th2") & blueprint_fine %in% c("cd4 tem") & azimuth_pbmc %in% c("cd4 tem") ~ glue("{monaco_fine} em") , # Because most Th cells are central and effector memory CD4 T cells (CM and EM), PMID: 30726743 + blueprint_fine |> str_detect("macrophage") & monaco_fine |> str_detect(" mono") & azimuth_pbmc |> str_detect(" mono") ~ blueprint_fine, # Partial consensus - blueprint_fine == monaco_fine ~ blueprint_fine , - blueprint_fine == azimuth_pbmc ~ blueprint_fine , - monaco_fine == azimuth_pbmc ~ monaco_fine , + blueprint_fine == monaco_fine ~ blueprint_fine , + blueprint_fine == azimuth_pbmc ~ blueprint_fine , + monaco_fine == azimuth_pbmc ~ monaco_fine , + + ################## + # More difficoult combination if nothing above matched + ################## # T cells str_detect( blueprint_fine , "cd8") & str_detect( monaco_fine , "cd8") & str_detect( azimuth_pbmc , "cd8") ~ "t cd8", - str_detect( blueprint_fine , "cd4|th|fh|treg") & str_detect( monaco_fine , "cd4|th|fh|treg") & str_detect( azimuth_pbmc , "cd4|th|fh|treg") ~ "t cd4", - blueprint_fine %in% t_cells & monaco_fine %in% t_cells & azimuth_pbmc %in% t_cells ~ "t", + + + str_detect( blueprint_fine , "cd4|treg") & str_detect( monaco_fine , "cd4|treg") & str_detect( azimuth_pbmc , "cd4|treg") ~ "t cd4", + blueprint_fine %in% t_cells & monaco_fine %in% t_cells & azimuth_pbmc %in% t_cells ~ "t", # B cells - blueprint_fine %in% b_cells & monaco_fine %in% b_cells & azimuth_pbmc %in% b_cells ~ "b", + blueprint_fine %in% b_cells & monaco_fine %in% b_cells & azimuth_pbmc %in% b_cells ~ "b", # Monocytic cells - blueprint_fine %in% myeloid_cells & monaco_fine %in% myeloid_cells & azimuth_pbmc %in% myeloid_cells ~ "monocytic", + blueprint_fine %in% myeloid_cells & monaco_fine %in% myeloid_cells & azimuth_pbmc %in% myeloid_cells ~ "monocytic", # ILCs - blueprint_fine %in% ilcs & monaco_fine %in% ilcs & azimuth_pbmc %in% ilcs ~ "ilc", + blueprint_fine %in% ilcs & monaco_fine %in% ilcs & azimuth_pbmc %in% ilcs ~ "ilc", - # Citotoxic + # cytotoxic ( blueprint_fine %in% ilcs | str_detect( blueprint_fine , "cd8") ) & - ( monaco_fine %in% ilcs | str_detect( monaco_fine , "cd8") ) & - ( azimuth_pbmc %in% ilcs | str_detect( azimuth_pbmc , "cd8") ) ~ "citotoxic", + ( monaco_fine %in% ilcs | str_detect( monaco_fine , "cd8") ) & + ( azimuth_pbmc %in% ilcs | str_detect( azimuth_pbmc , "cd8") ) ~ "cytotoxic", ################## # Partial consensus broad cell types @@ -1169,43 +1180,61 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr str_detect( blueprint_fine , "cd8") & str_detect( monaco_fine , "cd8") ~ "t cd8", str_detect( blueprint_fine , "cd8") & str_detect( azimuth_pbmc , "cd8") ~ "t cd8", str_detect( monaco_fine , "cd8") & str_detect( azimuth_pbmc , "cd8") ~ "t cd8", - - str_detect( blueprint_fine , "cd4|th|fh|treg") & str_detect( monaco_fine , "cd4|th|fh|treg") ~ "t cd4", - str_detect( blueprint_fine , "cd4|th|fh|treg") & str_detect( azimuth_pbmc , "cd4|th|fh|treg") ~ "t cd4", - str_detect( monaco_fine , "cd4|th|fh|treg") & str_detect( azimuth_pbmc , "cd4|th|fh|treg") ~ "t cd4", - - blueprint_fine %in% t_cells & monaco_fine %in% t_cells ~ "t", - blueprint_fine %in% t_cells & azimuth_pbmc %in% t_cells ~ "t", - monaco_fine %in% t_cells & azimuth_pbmc %in% t_cells ~ "t", - + + monaco_fine %in% c("cd4 fh","cd4 th1","cd4 th1/th17", "cd4 th17", "cd4 th2") & blueprint_fine %in% c("cd4 tcm") ~ glue("{monaco_fine} cm") , # Because most Th cells are central and effector memory CD4 T cells (CM and EM), PMID: 30726743 + monaco_fine %in% c("cd4 fh","cd4 th1","cd4 th1/th17", "cd4 th17", "cd4 th2") & azimuth_pbmc %in% c("cd4 tcm") ~ glue("{monaco_fine} cm") , # Because most Th cells are central and effector memory CD4 T cells (CM and EM), PMID: 30726743 + + + monaco_fine %in% c("cd4 fh","cd4 th1","cd4 th1/th17", "cd4 th17", "cd4 th2") & blueprint_fine %in% c("cd4 tem") ~ glue("{monaco_fine} em") , # Because most Th cells are central and effector memory CD4 T cells (CM and EM), PMID: 30726743 + monaco_fine %in% c("cd4 fh","cd4 th1","cd4 th1/th17", "cd4 th17", "cd4 th2") & azimuth_pbmc %in% c("cd4 tem") ~ glue("{monaco_fine} em") , # Because most Th cells are central and effector memory CD4 T cells (CM and EM), PMID: 30726743 + + + str_detect( blueprint_fine , "cd4|treg") & str_detect( monaco_fine , "cd4|treg") ~ "t cd4", + str_detect( blueprint_fine , "cd4|treg") & str_detect( azimuth_pbmc , "cd4|treg") ~ "t cd4", + str_detect( monaco_fine , "cd4|treg") & str_detect( azimuth_pbmc , "cd4|treg") ~ "t cd4", + + blueprint_fine %in% t_cells & monaco_fine %in% t_cells ~ "t", + blueprint_fine %in% t_cells & azimuth_pbmc %in% t_cells ~ "t", + monaco_fine %in% t_cells & azimuth_pbmc %in% t_cells ~ "t", + # B cells - blueprint_fine %in% b_cells & monaco_fine %in% b_cells ~ "b", - blueprint_fine %in% b_cells & azimuth_pbmc %in% b_cells ~ "b", - monaco_fine %in% b_cells & azimuth_pbmc %in% b_cells ~ "b", - + blueprint_fine %in% b_cells & monaco_fine %in% b_cells ~ "b", + blueprint_fine %in% b_cells & azimuth_pbmc %in% b_cells ~ "b", + monaco_fine %in% b_cells & azimuth_pbmc %in% b_cells ~ "b", + # Monocytic cells + blueprint_fine |> str_detect("monocyte") & monaco_fine |> str_detect(" mono") ~ monaco_fine, # This is because blueprint does not have CDC16 or CD14 + blueprint_fine |> str_detect("monocyte") & azimuth_pbmc |> str_detect(" mono") ~ azimuth_pbmc, # This is because blueprint does not have CDC16 or CD14 + + blueprint_fine |> str_detect("macrophage") & monaco_fine |> str_detect(" mono") ~ blueprint_fine, # This is because only blueprint has mac M1 M2 + blueprint_fine |> str_detect("macrophage") & azimuth_pbmc |> str_detect(" mono") ~ blueprint_fine, # This is because only blueprint has mac M1 M2 + blueprint_fine %in% myeloid_cells & monaco_fine %in% myeloid_cells ~ "monocytic", blueprint_fine %in% myeloid_cells & azimuth_pbmc %in% myeloid_cells ~ "monocytic", monaco_fine %in% myeloid_cells & azimuth_pbmc %in% myeloid_cells ~ "monocytic", - + # ILCs blueprint_fine %in% ilcs & monaco_fine %in% ilcs ~ "ilc", blueprint_fine %in% ilcs & azimuth_pbmc %in% ilcs ~ "ilc", monaco_fine %in% ilcs & azimuth_pbmc %in% ilcs ~ "ilc", - - # Citotoxic - ( blueprint_fine %in% ilcs | str_detect( blueprint_fine , "cd8") ) & - ( monaco_fine %in% ilcs | str_detect( monaco_fine , "cd8") ) ~ "citotoxic", - - ( blueprint_fine %in% ilcs | str_detect( blueprint_fine , "cd8") ) & - ( azimuth_pbmc %in% ilcs | str_detect( azimuth_pbmc , "cd8") ) ~ "citotoxic", - - ( monaco_fine %in% ilcs | str_detect( monaco_fine , "cd8") ) & - ( azimuth_pbmc %in% ilcs | str_detect( azimuth_pbmc , "cd8") ) ~ "citotoxic", - + + # cytotoxic + ( blueprint_fine %in% ilcs | str_detect( blueprint_fine , "cd8") ) & + ( monaco_fine %in% ilcs | str_detect( monaco_fine , "cd8") ) ~ "cytotoxic", + + ( blueprint_fine %in% ilcs | str_detect( blueprint_fine , "cd8") ) & + ( azimuth_pbmc %in% ilcs | str_detect( azimuth_pbmc , "cd8") ) ~ "cytotoxic", + + ( monaco_fine %in% ilcs | str_detect( monaco_fine , "cd8") ) & + ( azimuth_pbmc %in% ilcs | str_detect( azimuth_pbmc , "cd8") ) ~ "cytotoxic", + TRUE ~ NA_character_ - )) + )) |> + + # simplify Thelper cm to tcm + mutate(consensus = if_else(consensus |> str_detect("cd4 .* cm"), "cd4 tcm", consensus )) + # |> # rowid_to_column("combination_id") |> # pivot_longer(-combination_id, names_to = "Database", values_to = "Reference") |> @@ -1214,11 +1243,11 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr # pivot_wider(names_from = Database, values_from = Query, values_fn = function(x) paste(unique(x), collapse = ",")) # parse names, chenge to lower case for all - tibble( - blueprint_fine = blueprint |> select(-Database) |> mutate(across(everything(), tolower)) |> deframe() |> _[!!tolower(blueprint_input)], - monaco_fine = monaco |> select(-Database) |> mutate(across(everything(), tolower)) |> deframe() |> _[!!tolower(monaco_input)], - azimuth_pbmc = azimuth |> select(-Database) |> mutate(across(everything(), tolower)) |> deframe() |> _[!!tolower(azimuth_input)], - ) |> + tibble( + blueprint_fine = blueprint |> mutate(across(everything(), tolower)) |> deframe() |> _[!!tolower(blueprint_input)], + monaco_fine = monaco |> mutate(across(everything(), tolower)) |> deframe() |> _[!!tolower(monaco_input)], + azimuth_pbmc = azimuth |> mutate(across(everything(), tolower)) |> deframe() |> _[!!tolower(azimuth_input)], + ) |> left_join( all_combinations, by = join_by( @@ -1257,7 +1286,7 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr #' #' @export clean_cellxgene_cell_types = function(x){ - + x |> # Annotate tolower() |> @@ -1278,7 +1307,7 @@ clean_cellxgene_cell_types = function(x){ str_remove("germinal center") |> str_remove("iggnegative") |> str_remove("terminally differentiated") |> - + str_replace(".*macrophage.*", "macrophage") |> str_replace("^mononuclear phagocyte$", "macrophage") |> str_replace(".* treg.*", "treg") |> @@ -1287,9 +1316,9 @@ clean_cellxgene_cell_types = function(x){ str_replace(".*thelper .*", "thelper") |> str_replace(".*gammadelta.*", "tgd") |> str_replace(".*natural killer.*", "nk") |> - + str_replace_all(" ", " ") |> - + str_replace("myeloid leukocyte", "myeloid") |> str_replace("effector memory", "tem") |> str_replace("effector", "tem") |> @@ -1300,7 +1329,7 @@ clean_cellxgene_cell_types = function(x){ str_replace("classical monocyte", "cd14 monocyte") |> str_replace("follicular b", "b") |> str_replace("unswitched memory", "memory") |> - + str_trim() |> str_remove_all("\\+") |> @@ -1311,7 +1340,7 @@ clean_cellxgene_cell_types = function(x){ str_trim() |> str_remove("^_+|_+$") |> # Removes leading and trailing underscores - + # clean NON IMMUNE str_replace("(?i)\\bepithelial\\b", "epithelial_cell") |> str_replace("(?i)\\bfibroblast\\b", "fibroblast") |> @@ -1515,7 +1544,7 @@ harmonise_names_non_immune = function(metadata){ metadata$cell_type_harmonised <- ifelse(grepl("myoblast", metadata$cell_type_harmonised, ignore.case=TRUE), "myoblast", ## Discussed with Stefano on Teams on 16/12/2022. metadata$cell_type_harmonised) - + metadata$cell_type_harmonised <- ifelse(grepl("satellite", metadata$cell_type_harmonised, ignore.case=TRUE), "satellite_cell", ## Discussed with Stefano on Teams on 16/12/2022. metadata$cell_type_harmonised) @@ -1588,7 +1617,7 @@ harmonise_names_non_immune = function(metadata){ metadata$cell_type_harmonised <- gsub(" " , "_", metadata$cell_type_harmonised) - + table(metadata$cell_type_harmonised[grepl("glial", metadata$cell_type_harmonised, ignore.case=TRUE)]) ## glial cell, microglial cell, radial glial cell ## https://www.simplypsychology.org/glial-cells.html#:~:text=Glial%20cells%20are%20a%20general,that%20keep%20the%20brain%20functioning. @@ -2518,10 +2547,10 @@ arguments_to_action <- function(lst, input_hpc, value) { if ( arg_value |> length() == 0 | is.null(arg_value) | !( - arg_value |> is("character") | - arg_value |> is("name") | - arg_value |> is("list") - )) next + arg_value |> is("character") | + arg_value |> is("name") | + arg_value |> is("list") + )) next # Convert the argument value to a character string vector # arg_value_as_char <- as.character(arg_value) @@ -2536,9 +2565,9 @@ arguments_to_action <- function(lst, input_hpc, value) { input_hpc[[arg_value]]$iterate %in% value ) matching_elements <- c(matching_elements, as.character(arg_value) |> set_names(arg_name)) - - } + } + else{ # Iterate over each element in arg_value_as_char for (val in arg_value) { @@ -2555,7 +2584,7 @@ arguments_to_action <- function(lst, input_hpc, value) { } } - + } return(matching_elements) @@ -2626,27 +2655,27 @@ safe_as_name <- function(input) { #' @importFrom glue glue #' @noRd check_for_name_value_conflicts <- function(...) { -# Capture the arguments passed to the function -args_list <- list(...) - -# Iterate through the list and check for name-value conflicts -for (arg_name in names(args_list)) { - arg_value <- args_list[[arg_name]] - - # Skip NULL values - if (is.null(arg_value)) next + # Capture the arguments passed to the function + args_list <- list(...) - # Convert the argument value to a character string - # arg_value_as_char <- as.character(arg_value) - - # Check if the argument name matches any of the values in arg_value_as_char - if (arg_name %in% c(arg_value)) { - stop(glue::glue("HPCell says: Argument name '{arg_name}' cannot be the same as its value '{arg_value_as_char}'")) + # Iterate through the list and check for name-value conflicts + for (arg_name in names(args_list)) { + arg_value <- args_list[[arg_name]] + + # Skip NULL values + if (is.null(arg_value)) next + + # Convert the argument value to a character string + # arg_value_as_char <- as.character(arg_value) + + # Check if the argument name matches any of the values in arg_value_as_char + if (arg_name %in% c(arg_value)) { + stop(glue::glue("HPCell says: Argument name '{arg_name}' cannot be the same as its value '{arg_value_as_char}'")) + } } -} - -# If no conflicts, return the arguments as is or proceed with the function logic -return(args_list) + + # If no conflicts, return the arguments as is or proceed with the function logic + return(args_list) } #' Expand Tiered Arguments in a List @@ -2710,7 +2739,7 @@ expand_tiered_arguments <- function(lst, tiers, argument_to_replace, tiered_args # Create a vector of tiered values by combining tiered_base with tiers # If no tier do not add the suffix tiered_values <- lapply(tiers, function(tier) paste0(tiered_base, "_", tier) |> as.name() ) - + # Construct the c(...) call with the tiered values c_call <- as.call(c(as.name("c"), tiered_values)) @@ -2746,10 +2775,10 @@ build_pattern = function(arguments_to_tier = c(), other_arguments_to_map = c(), if(other_arguments_to_map |> length() > 0){ - pattern = pattern |> c(other_arguments_to_map |> lapply(as.name)) + pattern = pattern |> c(other_arguments_to_map |> lapply(as.name)) } - + pattern = as.call(pattern) } @@ -2762,9 +2791,9 @@ write_source = function(user_function_source_path, target_script){ if(user_function_source_path |> is.null() |> not()) source(s) |> - substitute(env = list(s =user_function_source_path )) |> - deparse() |> - write_lines(target_script, append = TRUE) + substitute(env = list(s =user_function_source_path )) |> + deparse() |> + write_lines(target_script, append = TRUE) } #' @export diff --git a/man/annotation_consensus.Rd b/man/annotation_consensus.Rd deleted file mode 100644 index 365c9ca1..00000000 --- a/man/annotation_consensus.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/functions.R -\name{annotation_consensus} -\alias{annotation_consensus} -\title{Harmonize cell type annotations based on consensus} -\usage{ -annotation_consensus( - single_cell_data, - .sample_column, - .cell_type, - .azimuth, - .blueprint, - .monaco -) -} -\arguments{ -\item{single_cell_data}{A data frame containing single-cell data with cell type annotations.} - -\item{.sample_column}{The column name specifying sample information.} - -\item{.cell_type}{The column name for the cell type annotations.} - -\item{.azimuth}{The column name for Azimuth annotations.} - -\item{.blueprint}{The column name for Blueprint annotations.} - -\item{.monaco}{The column name for Monaco annotations.} -} -\value{ -A data frame with harmonized cell type annotations. -} -\description{ -This function harmonizes cell type annotations by matching them with a reference annotation -and applying specific rules for non-immune cell types. -} diff --git a/man/clean_cell_types.Rd b/man/clean_cell_types.Rd deleted file mode 100644 index 97ddcfb6..00000000 --- a/man/clean_cell_types.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utilities.R -\name{clean_cell_types} -\alias{clean_cell_types} -\title{Clean and Standardize Cell Types} -\usage{ -clean_cell_types(.x) -} -\arguments{ -\item{.x}{A vector of cell types.} -} -\value{ -A cleaned and standardized vector of cell types. -} -\description{ -This function takes a vector of cell types and applies a series of transformations -to clean and standardize them for better consistency. -} -\examples{ -cell_types <- c("CD4+ T-cells", "NK cells", "Blast-cells") -} diff --git a/man/clean_cell_types_deeper.Rd b/man/clean_cell_types_deeper.Rd deleted file mode 100644 index f85f0ed3..00000000 --- a/man/clean_cell_types_deeper.Rd +++ /dev/null @@ -1,18 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utilities.R -\name{clean_cell_types_deeper} -\alias{clean_cell_types_deeper} -\title{Clean and Standardize Cell Types (Deeper)} -\usage{ -clean_cell_types_deeper(x) -} -\arguments{ -\item{x}{A vector of cell types.} -} -\value{ -A cleaned and standardized vector of cell types. -} -\description{ -This function takes a vector of cell types and applies a series of transformations -to clean and standardize them for better consistency. -} From 5cf02cb5b61d38081f3b64aafafb8275ea4efc76 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Fri, 30 Aug 2024 11:19:24 +0930 Subject: [PATCH 050/145] deal with undefined targets --- R/functions.R | 216 ++++++++++++------------- R/modules_grammar_hpc.R | 107 ++++++------ man/alive_identification.Rd | 2 +- man/annotation_label_transfer.Rd | 2 +- man/cell_cycle_scoring.Rd | 2 +- man/create_pseudobulk.Rd | 10 +- man/doublet_identification.Rd | 4 +- man/non_batch_variation_removal.Rd | 6 +- man/preprocessing_output.Rd | 10 +- tests/testthat/test_single_functions.R | 1 - 10 files changed, 177 insertions(+), 183 deletions(-) diff --git a/R/functions.R b/R/functions.R index 83d8c664..2050a004 100644 --- a/R/functions.R +++ b/R/functions.R @@ -40,7 +40,7 @@ if(getRversion() >= "2.15.1") utils::globalVariables(c(".")) #' #' @export annotation_label_transfer <- function(input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, reference_azimuth = NULL, assay = NULL ){ @@ -54,34 +54,36 @@ annotation_label_transfer <- function(input_read_RNA_assay, # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - # SingleR - if (inherits(input_read_RNA_assay, "Seurat")) { - sce = + # Filter empty + if(empty_droplets_tbl |> is.null() |> not()) + input_read_RNA_assay = input_read_RNA_assay |> - # Filter empty left_join(empty_droplets_tbl, by = ".cell") |> - dplyr::filter(!empty_droplet) |> + dplyr::filter(!empty_droplet) + + # SingleR + if (inherits(input_read_RNA_assay, "Seurat")) { + input_read_RNA_assay = + input_read_RNA_assay as.SingleCellExperiment() |> logNormCounts() } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")){ - sce = + input_read_RNA_assay = input_read_RNA_assay |> - # Filter empty - left_join(empty_droplets_tbl, by = ".cell") |> - dplyr::filter(!empty_droplet) |> logNormCounts() } - - if(ncol(sce)==1){ - sce = S4Vectors::cbind(sce, sce) - colnames(sce)[2]= "dummy___" + # This because an error is num cell = 1 + if(ncol(input_read_RNA_assay)==1){ + input_read_RNA_assay = S4Vectors::cbind(input_read_RNA_assay, input_read_RNA_assay) + colnames(input_read_RNA_assay)[2]= "dummy___" } + blueprint <- celldex::BlueprintEncodeData() data_annotated = - sce |> + input_read_RNA_assay |> SingleR( ref = blueprint, assay.type.test= 1, @@ -94,7 +96,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, left_join( - sce |> + input_read_RNA_assay |> SingleR( ref = blueprint, assay.type.test= 1, @@ -116,7 +118,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, data_annotated |> left_join( - sce |> + input_read_RNA_assay |> SingleR( ref = MonacoImmuneData, assay.type.test= 1, @@ -130,7 +132,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, ) |> left_join( - sce |> + input_read_RNA_assay |> SingleR( ref = MonacoImmuneData, assay.type.test= 1, @@ -146,9 +148,6 @@ annotation_label_transfer <- function(input_read_RNA_assay, rm(MonacoImmuneData) gc() - - rm(sce) - gc() # Convert SCE to SE to calculate SCT if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { @@ -181,22 +180,6 @@ annotation_label_transfer <- function(input_read_RNA_assay, } else if (!is.null(reference_azimuth)) { - #print("Start Seurat") - - # Load reference PBMC - # reference_azimuth <- LoadH5Seurat("data//pbmc_multimodal.h5seurat") - # reference_azimuth |> saveRDS("analysis/annotation_label_transfer/reference_azimuth.rds") - - #reference_azimuth = readRDS(reference_azimuth_path) - - - # Reading input - input_read_RNA_assay = - input_read_RNA_assay |> - # Filter empty - left_join(empty_droplets_tbl, by = ".cell") |> - filter(!empty_droplet) - # Subset RNA_assay = input_read_RNA_assay[rownames(input_read_RNA_assay[[assay]]) %in% rownames(reference_azimuth[["SCT"]]),][[assay]] @@ -322,7 +305,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, #' #' @export alive_identification <- function(input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, annotation_label_transfer_tbl = NULL, annotation_column = NULL, assay = NULL) { @@ -332,8 +315,7 @@ alive_identification <- function(input_read_RNA_assay, detected = NULL .cell = NULL high_mitochondrion = NULL - blueprint_first.labels.fine = NULL - + if( !is.null(annotation_column) && !annotation_column %in% colnames(as_tibble(input_read_RNA_assay[1,1])) @@ -343,10 +325,12 @@ alive_identification <- function(input_read_RNA_assay, # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - input_read_RNA_assay = - input_read_RNA_assay |> - left_join(empty_droplets_tbl, by=".cell") |> - dplyr::filter(!empty_droplet) + # Filter empty + if(empty_droplets_tbl |> is.null() |> not()) + input_read_RNA_assay = + input_read_RNA_assay |> + left_join(empty_droplets_tbl, by=".cell") |> + dplyr::filter(!empty_droplet) # Calculate nFeature_RNA and nCount_RNA if not exist in the data nFeature_name <- paste0("nFeature_", assay) @@ -544,8 +528,8 @@ alive_identification <- function(input_read_RNA_assay, #' @import scDblFinder #' @export doublet_identification <- function(input_read_RNA_assay, - empty_droplets_tbl, - alive_identification_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, #annotation_label_transfer_tbl, #reference_label_fine, assay = NULL){ @@ -553,8 +537,6 @@ doublet_identification <- function(input_read_RNA_assay, # Fix GChecks .cell = NULL empty_droplet = NULL - high_mitochondrion = NULL - high_ribosome = NULL # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) @@ -564,26 +546,29 @@ doublet_identification <- function(input_read_RNA_assay, input_read_RNA_assay <- input_read_RNA_assay |> # Filtering empty Seurat::as.SingleCellExperiment() - } - filter_empty_droplets <- input_read_RNA_assay |> - # Filtering empty + # Filtering empty + if(empty_droplets_tbl |> is.null() |> not()) + input_read_RNA_assay <- input_read_RNA_assay |> left_join(empty_droplets_tbl |> select(.cell, empty_droplet), by = ".cell") |> - filter(!empty_droplet) |> - - # Filter dead + filter(!empty_droplet) + + # Filtering dead + if(alive_identification_tbl |> is.null() |> not()) + input_read_RNA_assay = input_read_RNA_assay |> left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> filter(alive) # Annotate - filter_empty_droplets <- filter_empty_droplets |> + input_read_RNA_assay |> #left_join(annotation_label_transfer_tbl, by = ".cell")|> #scDblFinder(clusters = ifelse(reference_label_fine=="none", TRUE, reference_label_fine)) |> - scDblFinder(clusters = NULL) - - as_tibble(colData(filter_empty_droplets), rownames = ".cell")|> select(.cell, contains("scDblFinder")) + scDblFinder(clusters = NULL) |> + colData() |> + as_tibble(rownames = ".cell") |> + select(.cell, contains("scDblFinder")) } @@ -614,7 +599,7 @@ doublet_identification <- function(input_read_RNA_assay, #' @importFrom SingleCellExperiment SingleCellExperiment #' @export cell_cycle_scoring <- function(input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, gene_nomenclature, assay = NULL){ #Fix GCHECK @@ -649,11 +634,15 @@ cell_cycle_scoring <- function(input_read_RNA_assay, g2m.features_tidy = Seurat::cc.genes$g2m.genes } - - counts <- + # Filter empty + if(empty_droplets_tbl |> is.null() |> not()) + input_read_RNA_assay = input_read_RNA_assay |> left_join(empty_droplets_tbl, by = ".cell") |> - dplyr::filter(!empty_droplet) |> + dplyr::filter(!empty_droplet) + + + input_read_RNA_assay |> # Normalise needed NormalizeData() |> @@ -670,8 +659,6 @@ cell_cycle_scoring <- function(input_read_RNA_assay, as_tibble() |> select(.cell, S.Score, G2M.Score, Phase) - counts - } @@ -693,9 +680,9 @@ cell_cycle_scoring <- function(input_read_RNA_assay, #' @importFrom Seurat NormalizeData VariableFeatures SCTransform #' @export non_batch_variation_removal <- function(input_read_RNA_assay, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, assay = NULL, factors_to_regress = NULL, external_path){ @@ -724,25 +711,27 @@ non_batch_variation_removal <- function(input_read_RNA_assay, new.assay.name = assay) } - input_read_RNA_assay = - input_read_RNA_assay |> - left_join(empty_droplets_tbl, by = ".cell") |> - filter(!empty_droplet) |> - - left_join( - alive_identification_tbl |> - select(.cell, any_of(factors_to_regress)), - by=".cell" - ) + # Filtering empty + if(empty_droplets_tbl |> is.null() |> not()) + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(empty_droplets_tbl |> select(.cell, empty_droplet), by = ".cell") |> + filter(!empty_droplet) - if(!is.null(cell_cycle_score_tbl)) + # Filtering dead + if(alive_identification_tbl |> is.null() |> not()) input_read_RNA_assay = input_read_RNA_assay |> - - left_join( - cell_cycle_score_tbl |> - select(.cell, any_of(factors_to_regress)), - by=".cell" - ) + left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> + filter(alive) + + # attach cell cycle + if(cell_cycle_score_tbl |> is.null() |> not()) + input_read_RNA_assay = + input_read_RNA_assay |> + left_join( + cell_cycle_score_tbl |> + select(.cell, any_of(factors_to_regress)), + by=".cell" + ) # filter(!high_mitochondrion | !high_ribosome) @@ -826,11 +815,11 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #' @importFrom SingleCellExperiment altExp<- #' @export preprocessing_output <- function(input_read_RNA_assay, - empty_droplets_tbl, - non_batch_variation_removal_S, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, + empty_droplets_tbl = NULL, + non_batch_variation_removal_S = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + annotation_label_transfer_tbl = NULL, doublet_identification_tbl){ #Fix GCHECKS .cell <- NULL @@ -854,38 +843,37 @@ preprocessing_output <- function(input_read_RNA_assay, input_read_RNA_assay[["SCT"]] = non_batch_variation_removal_S else if(input_read_RNA_assay |> is("SingleCellExperiment")){ message("HPCell says: in order to attach SCT assay to the SingleCellExperiment, SCT was added to external experiments slot") - - #input_read_RNA_assay = input_read_RNA_assay[rownames(non_batch_variation_removal_S), ] - + #input_read_RNA_assay = input_read_RNA_assay[rownames(non_batch_variation_removal_S), # altExp(input_read_RNA_assay) = SingleCellExperiment(assay = list(SCT = non_batch_variation_removal_S)) - assay(input_read_RNA_assay, "SCT") <- non_batch_variation_removal_S } } + # Filtering dead + if(alive_identification_tbl |> is.null() |> not()) + input_read_RNA_assay = input_read_RNA_assay |> + left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> + filter(alive) + + + + # Filter doublets + if(doublet_identification_tbl |> is.null() |> not()) input_read_RNA_assay <- input_read_RNA_assay |> - - # Filter dead cells - left_join( - alive_identification_tbl |> - select(.cell, any_of(c("alive", "subsets_Mito_percent", "subsets_Ribo_percent", "high_mitochondrion", "high_ribosome"))), - by = ".cell" - ) |> - filter(alive) |> - - # Filter doublets left_join(doublet_identification_tbl |> select(.cell, scDblFinder.class), by = ".cell") |> filter(scDblFinder.class=="singlet") - # Add cell cycle + # attach cell cycle if(cell_cycle_score_tbl |> is.null() |> not()) - input_read_RNA_assay <- input_read_RNA_assay |> - left_join( - cell_cycle_score_tbl, + input_read_RNA_assay = + input_read_RNA_assay |> + left_join( + cell_cycle_score_tbl |> + select(.cell, any_of(factors_to_regress)), by=".cell" - ) + ) # Attach annotation if (inherits(annotation_label_transfer_tbl, "tbl_df")){ @@ -947,11 +935,11 @@ preprocessing_output <- function(input_read_RNA_assay, # Create pseudobulk for each sample create_pseudobulk <- function(input_read_RNA_assay, sample_names_vec, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, - doublet_identification_tbl , + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + annotation_label_transfer_tbl = NULL, + doublet_identification_tbl = NULL, x = c() , external_path, assays = NULL) { #Fix GChecks @@ -1403,6 +1391,8 @@ find_variable_genes <- function(input_seurat, empty_droplet){ #' @export is_target = function(x) { + if(x |> is.null()) return(NULL) + if(x |> is("character") |> not()) stop("HPCell says: the input to `is_target` must be a character") diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index eade4f69..fbd78f03 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -260,7 +260,6 @@ target_chunk_undefined_remove_dead_scuttle = function(input_hpc){ } - # Define the generic function #' @export score_cell_cycle_seurat <- function(input_hpc, target_input = "data_object", target_output = "cell_cycle_tbl",...) { @@ -295,20 +294,26 @@ target_chunk_undefined_score_cell_cycle_seurat = function(input_hpc, target_inpu # Define the generic function #' @export -remove_doublets_scDblFinder <- function(input_hpc, target_input = "data_object", target_output = "doublet_tbl") { +remove_doublets_scDblFinder <- function( + input_hpc, target_input = "data_object", target_output = "doublet_tbl", + target_empry_droplets = "empty_tbl", target_alive = "alive_tbl" + ) { UseMethod("remove_doublets_scDblFinder") } #' @export -remove_doublets_scDblFinder.HPCell = function(input_hpc, target_input = "data_object", target_output = "doublet_tbl") { +remove_doublets_scDblFinder.HPCell = function( + input_hpc, target_input = "data_object", target_output = "doublet_tbl", + target_empry_droplets = "empty_tbl", target_alive = "alive_tbl" + ) { input_hpc |> hpc_iterate( target_output = target_output, user_function = doublet_identification |> quote() , input_read_RNA_assay = target_input |> is_target(), - empty_droplets_tbl = "empty_tbl" |> is_target() , - alive_identification_tbl = "alive_tbl" |> is_target() + empty_droplets_tbl = target_empry_droplets |> is_target() , + alive_identification_tbl = target_alive |> is_target() ) } @@ -577,52 +582,52 @@ evaluate_hpc <- function(input_hpc) { #' @export evaluate_hpc.HPCell = function(input_hpc) { - #-----------------------# - # Empty droplets - #-----------------------# - - if(! "empty_tbl" %in% names(input_hpc)) - target_chunk_undefined_remove_empty_DropletUtils(input_hpc) - - #-----------------------# - # Annotate cell type - #-----------------------# - - if( - !("annotation_tbl" %in% names(input_hpc) | - ( "alive_tbl" %in% names(input_hpc) & !is.null(input_hpc$remove_dead_scuttle$group_by)) - )) - target_chunk_undefined_annotate_cell_type(input_hpc) - - #-----------------------# - # Remove dead - #-----------------------# - - if(! "alive_tbl" %in% names(input_hpc)) - target_chunk_undefined_remove_dead_scuttle(input_hpc) - - - #-----------------------# - # score cell cycle - #-----------------------# - if(! "cell_cycle_tbl" %in% names(input_hpc)) - target_chunk_undefined_score_cell_cycle_seurat(input_hpc) - - #-----------------------# - # Doublets - #-----------------------# - - if(! "doublet_tbl" %in% names(input_hpc)) - target_chunk_undefined_remove_doublets_scDblFinder(input_hpc) - - #-----------------------# - # SCT - #-----------------------# - - if(! "sct_matrix" %in% names(input_hpc)) - target_chunk_undefined_normalise_abundance_seurat_SCT(input_hpc) - - + # #-----------------------# + # # Empty droplets + # #-----------------------# + # + # if(! "empty_tbl" %in% names(input_hpc)) + # target_chunk_undefined_remove_empty_DropletUtils(input_hpc) + # + # #-----------------------# + # # Annotate cell type + # #-----------------------# + # + # if( + # !("annotation_tbl" %in% names(input_hpc) | + # ( "alive_tbl" %in% names(input_hpc) & !is.null(input_hpc$remove_dead_scuttle$group_by)) + # )) + # target_chunk_undefined_annotate_cell_type(input_hpc) + # + # #-----------------------# + # # Remove dead + # #-----------------------# + # + # if(! "alive_tbl" %in% names(input_hpc)) + # target_chunk_undefined_remove_dead_scuttle(input_hpc) + # + # + # #-----------------------# + # # score cell cycle + # #-----------------------# + # if(! "cell_cycle_tbl" %in% names(input_hpc)) + # target_chunk_undefined_score_cell_cycle_seurat(input_hpc) + # + # #-----------------------# + # # Doublets + # #-----------------------# + # + # if(! "doublet_tbl" %in% names(input_hpc)) + # target_chunk_undefined_remove_doublets_scDblFinder(input_hpc) + # + # #-----------------------# + # # SCT + # #-----------------------# + # + # if(! "sct_matrix" %in% names(input_hpc)) + # target_chunk_undefined_normalise_abundance_seurat_SCT(input_hpc) + # + # #-----------------------# # Close pipeline #-----------------------# diff --git a/man/alive_identification.Rd b/man/alive_identification.Rd index 78af40ef..a23ce2e9 100644 --- a/man/alive_identification.Rd +++ b/man/alive_identification.Rd @@ -6,7 +6,7 @@ \usage{ alive_identification( input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, annotation_label_transfer_tbl = NULL, annotation_column = NULL, assay = NULL diff --git a/man/annotation_label_transfer.Rd b/man/annotation_label_transfer.Rd index 912fcc9a..af60b378 100644 --- a/man/annotation_label_transfer.Rd +++ b/man/annotation_label_transfer.Rd @@ -6,7 +6,7 @@ \usage{ annotation_label_transfer( input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, reference_azimuth = NULL, assay = NULL ) diff --git a/man/cell_cycle_scoring.Rd b/man/cell_cycle_scoring.Rd index e42fc21e..4e15e765 100644 --- a/man/cell_cycle_scoring.Rd +++ b/man/cell_cycle_scoring.Rd @@ -6,7 +6,7 @@ \usage{ cell_cycle_scoring( input_read_RNA_assay, - empty_droplets_tbl, + empty_droplets_tbl = NULL, gene_nomenclature, assay = NULL ) diff --git a/man/create_pseudobulk.Rd b/man/create_pseudobulk.Rd index e61c2daf..e5b1c8a7 100644 --- a/man/create_pseudobulk.Rd +++ b/man/create_pseudobulk.Rd @@ -7,11 +7,11 @@ create_pseudobulk( input_read_RNA_assay, sample_names_vec, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, - doublet_identification_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + annotation_label_transfer_tbl = NULL, + doublet_identification_tbl = NULL, x = c(), external_path, assays = NULL diff --git a/man/doublet_identification.Rd b/man/doublet_identification.Rd index 879c3010..fad26396 100644 --- a/man/doublet_identification.Rd +++ b/man/doublet_identification.Rd @@ -6,8 +6,8 @@ \usage{ doublet_identification( input_read_RNA_assay, - empty_droplets_tbl, - alive_identification_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, assay = NULL ) } diff --git a/man/non_batch_variation_removal.Rd b/man/non_batch_variation_removal.Rd index c747c3b0..c1f2af70 100644 --- a/man/non_batch_variation_removal.Rd +++ b/man/non_batch_variation_removal.Rd @@ -6,9 +6,9 @@ \usage{ non_batch_variation_removal( input_read_RNA_assay, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, assay = NULL, factors_to_regress = NULL, external_path diff --git a/man/preprocessing_output.Rd b/man/preprocessing_output.Rd index 5b7721a6..3426b53e 100644 --- a/man/preprocessing_output.Rd +++ b/man/preprocessing_output.Rd @@ -6,11 +6,11 @@ \usage{ preprocessing_output( input_read_RNA_assay, - empty_droplets_tbl, - non_batch_variation_removal_S, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, + empty_droplets_tbl = NULL, + non_batch_variation_removal_S = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + annotation_label_transfer_tbl = NULL, doublet_identification_tbl ) } diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 51aac2f0..32cc03ff 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -609,7 +609,6 @@ file_list |> # Remove doublets remove_doublets_scDblFinder(target_input = "data_object") |> - normalise_abundance_seurat_SCT(factors_to_regress = c( "subsets_Mito_percent", "subsets_Ribo_percent", From 67714bfca2472ffd623e21f56311e65aa58e2e15 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Fri, 30 Aug 2024 06:08:44 +0300 Subject: [PATCH 051/145] fixed bug --- R/functions.R | 30 +++++----- R/modules_grammar_hpc.R | 121 ---------------------------------------- 2 files changed, 14 insertions(+), 137 deletions(-) diff --git a/R/functions.R b/R/functions.R index 2050a004..930fc8c8 100644 --- a/R/functions.R +++ b/R/functions.R @@ -689,9 +689,6 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #Fix GChecks empty_droplet = NULL .cell <- NULL - subsets_Ribo_percent <- NULL - subsets_Mito_percent <- NULL - G2M.Score = NULL # Your code for non_batch_variation_removal function here class_input = input_read_RNA_assay |> class() @@ -719,8 +716,9 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # Filtering dead if(alive_identification_tbl |> is.null() |> not()) - input_read_RNA_assay = input_read_RNA_assay |> - left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> + input_read_RNA_assay = + input_read_RNA_assay |> + left_join(alive_identification_tbl |> select(.cell, alive, any_of(factors_to_regress)), by = ".cell") |> filter(alive) # attach cell cycle @@ -742,18 +740,18 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # Normalise RNA normalized_rna <- + input_read_RNA_assay |> Seurat::SCTransform( - input_read_RNA_assay, - assay=assay, - return.only.var.genes=FALSE, - residual.features = NULL, - vars.to.regress = factors_to_regress, - vst.flavor = "v2", - scale_factor=2186, - conserve.memory=T, - min_cells=0, - ) |> - GetAssayData(assay="SCT") + assay=assay, + return.only.var.genes=FALSE, + residual.features = NULL, + vars.to.regress = factors_to_regress, + vst.flavor = "v2", + scale_factor=2186, + conserve.memory=T, + min_cells=0, + ) |> + GetAssayData(assay="SCT") if (class_input == "SingleCellExperiment") { diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index fbd78f03..22c165e3 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -199,19 +199,6 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N } -target_chunk_undefined_remove_empty_DropletUtils = function(input_hpc){ - - input_hpc |> - hpc_iterate( - target_output = "empty_tbl", - user_function = (function(x) x |> as_tibble() |> select(.cell) |> mutate(empty_droplet = FALSE)) |> quote() , - x = "data_object" |> is_target(), - packages = c("dplyr", "tidySingleCellExperiment", "tidyseurat") - ) - -} - - # Define the generic function #' @export remove_dead_scuttle <- function(input_hpc, @@ -246,19 +233,6 @@ remove_dead_scuttle.HPCell = function( } -#' @importFrom dplyr mutate -target_chunk_undefined_remove_dead_scuttle = function(input_hpc){ - - input_hpc |> - hpc_iterate( - target_output = "alive_tbl", - user_function = (function(x) x |> as_tibble() |> select(.cell) |> mutate(alive = TRUE)) |> quote() , - x = "data_object" |> is_target(), - packages = c("dplyr", "tidySingleCellExperiment", "tidyseurat") - ) - -} - # Define the generic function #' @export @@ -280,18 +254,6 @@ score_cell_cycle_seurat.HPCell = function(input_hpc, target_input = "data_object } -target_chunk_undefined_score_cell_cycle_seurat = function(input_hpc, target_input = "data_object"){ - - input_hpc |> - hpc_iterate( - target_output = "cell_cycle_tbl", - user_function = function(x) NULL , - x = "read_file_list" |> is_target() - ) - -} - - # Define the generic function #' @export remove_doublets_scDblFinder <- function( @@ -318,18 +280,6 @@ remove_doublets_scDblFinder.HPCell = function( } -target_chunk_undefined_remove_doublets_scDblFinder = function(input_hpc){ - - input_hpc |> - hpc_iterate( - target_output = "doublet_tbl", - user_function = (function(x) x |> as_tibble() |> select(.cell) |> mutate(scDblFinder.class="singlet")) |> quote() , - x = "data_object" |> is_target(), - packages = c("dplyr", "tidySingleCellExperiment", "tidyseurat") - ) - -} - # Define the generic function #' @export annotate_cell_type <- function(input_hpc, azimuth_reference = NULL, target_input = "data_object", target_output = "annotation_tbl",...) { @@ -360,19 +310,6 @@ annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL, target } -target_chunk_undefined_annotate_cell_type = function(input_hpc){ - - input_hpc |> - hpc_iterate( - target_output = "annotation_tbl", - user_function = function(x) NULL , - x = read_file_list |> quote() - ) - - -} - - # Define the generic function #' @export normalise_abundance_seurat_SCT <- function(input_hpc, target_input = "data_object", target_output = "sct_matrix", ...) { @@ -396,18 +333,6 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = ) -} - -target_chunk_undefined_normalise_abundance_seurat_SCT = function(input_hpc){ - - input_hpc |> - hpc_iterate( - target_output = "sct_matrix", - user_function = function(x) NULL , - x = read_file_list |> quote() - ) - - } # Define the generic function @@ -582,52 +507,6 @@ evaluate_hpc <- function(input_hpc) { #' @export evaluate_hpc.HPCell = function(input_hpc) { - # #-----------------------# - # # Empty droplets - # #-----------------------# - # - # if(! "empty_tbl" %in% names(input_hpc)) - # target_chunk_undefined_remove_empty_DropletUtils(input_hpc) - # - # #-----------------------# - # # Annotate cell type - # #-----------------------# - # - # if( - # !("annotation_tbl" %in% names(input_hpc) | - # ( "alive_tbl" %in% names(input_hpc) & !is.null(input_hpc$remove_dead_scuttle$group_by)) - # )) - # target_chunk_undefined_annotate_cell_type(input_hpc) - # - # #-----------------------# - # # Remove dead - # #-----------------------# - # - # if(! "alive_tbl" %in% names(input_hpc)) - # target_chunk_undefined_remove_dead_scuttle(input_hpc) - # - # - # #-----------------------# - # # score cell cycle - # #-----------------------# - # if(! "cell_cycle_tbl" %in% names(input_hpc)) - # target_chunk_undefined_score_cell_cycle_seurat(input_hpc) - # - # #-----------------------# - # # Doublets - # #-----------------------# - # - # if(! "doublet_tbl" %in% names(input_hpc)) - # target_chunk_undefined_remove_doublets_scDblFinder(input_hpc) - # - # #-----------------------# - # # SCT - # #-----------------------# - # - # if(! "sct_matrix" %in% names(input_hpc)) - # target_chunk_undefined_normalise_abundance_seurat_SCT(input_hpc) - # - # #-----------------------# # Close pipeline #-----------------------# From b6c6e2bc9d6f3dd9900b58d658acc004e0c23279 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Fri, 30 Aug 2024 07:02:11 +0300 Subject: [PATCH 052/145] still a bug with SCT filtering --- R/functions.R | 6 ++---- R/modules_grammar_hpc.R | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/R/functions.R b/R/functions.R index 930fc8c8..ad361c43 100644 --- a/R/functions.R +++ b/R/functions.R @@ -718,8 +718,7 @@ non_batch_variation_removal <- function(input_read_RNA_assay, if(alive_identification_tbl |> is.null() |> not()) input_read_RNA_assay = input_read_RNA_assay |> - left_join(alive_identification_tbl |> select(.cell, alive, any_of(factors_to_regress)), by = ".cell") |> - filter(alive) + left_join(alive_identification_tbl |> select(.cell, alive, any_of(factors_to_regress)), by = ".cell") # attach cell cycle if(cell_cycle_score_tbl |> is.null() |> not()) @@ -868,8 +867,7 @@ preprocessing_output <- function(input_read_RNA_assay, input_read_RNA_assay = input_read_RNA_assay |> left_join( - cell_cycle_score_tbl |> - select(.cell, any_of(factors_to_regress)), + cell_cycle_score_tbl , by=".cell" ) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 22c165e3..9618d9b8 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -396,7 +396,7 @@ get_single_cell.HPCell = function(input_hpc, target_input = "data_object", targe user_function = preprocessing_output |> quote() , input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = "empty_tbl" |> is_target() , - non_batch_variation_removal_S = sct_matrix |> quote(), + non_batch_variation_removal_S = "sct_matrix" |> is_target(), alive_identification_tbl = "alive_tbl" |> is_target(), cell_cycle_score_tbl = "cell_cycle_tbl" |> is_target(), annotation_label_transfer_tbl = "annotation_tbl" |> is_target(), From 39d532d4bf13bae9d13b793dcbebac4bb67bb063 Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 24 Oct 2024 14:04:28 +1100 Subject: [PATCH 053/145] update pipeline --- R/functions.R | 4 +- R/modules_grammar_hpc.R | 2 +- R/tranform_assay.R | 2 + tests/testthat/test-census-samples.R | 223 --------------------------- 4 files changed, 5 insertions(+), 226 deletions(-) delete mode 100644 tests/testthat/test-census-samples.R diff --git a/R/functions.R b/R/functions.R index fc16dc90..2b8179ed 100644 --- a/R/functions.R +++ b/R/functions.R @@ -224,8 +224,8 @@ annotation_label_transfer <- function(input_read_RNA_assay, "predicted.celltype.l2.score", "predicted.celltype.l3.score" ) - ), matches("umap|UMAP")) |> - nest(azimuth_scores_celltype = c(ends_with("score"), matches("umap|UMAP"))) |> + )) |> + nest(azimuth_scores_celltype = c(ends_with("score"))) |> dplyr::rename(azimuth_predicted.celltype.l1 = predicted.celltype.l1, azimuth_predicted.celltype.l2 = predicted.celltype.l2, azimuth_predicted.celltype.l3 = predicted.celltype.l3)}, diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 70c56fe4..a381144a 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -94,7 +94,7 @@ initialise_hpc <- function(input_hpc, error = "continue", format = "qs", debug = d, # Set the target you want to debug. - #cue = tar_cue(mode = "never"), # Force skip non-debugging outdated targets. + cue = tar_cue(mode = "never"), # Force skip non-debugging outdated targets. controller = crew_controller_group ( readRDS("temp_computing_resources.rds") ), packages = c("HPCell", "tidySingleCellExperiment"), trust_object_timestamps = TRUE diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 5a8ed922..8b2235f0 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -70,6 +70,8 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, #assay(input_read_RNA_assay) = assay(input_read_RNA_assay) |> transform_fx() input_read_RNA_assay = input_read_RNA_assay |> transform_fx() + if (length(colnames(input_read_RNA_assay)) == 0) return(NULL) + input_read_RNA_assay |> save_experiment_data(dir = file_name, container_type = data_container_type ) diff --git a/tests/testthat/test-census-samples.R b/tests/testthat/test-census-samples.R deleted file mode 100644 index ba18a168..00000000 --- a/tests/testthat/test-census-samples.R +++ /dev/null @@ -1,223 +0,0 @@ -# test census-20-samples -------------------------------------------------- -library(glue) -library(dplyr) -library(arrow) -library(SingleCellExperiment) -library(tibble) -library(SummarizedExperiment) -library(CuratedAtlasQueryR) -library(glue) -library(purrr) -library(zellkonverter) -library(tidyr) -library(ggplot2) -library(plotly) -library(targets) -library(stringr) -directory = "~/cellxgene_curated/census_samples/anndata" -store = "~/scratch/Census/census_reanalysis/census-run-samples" -# files <- dir(glue("{directory}"), full.names = T) -# # results <- purrr::map_dfr(files, function(file_path) { -# # data <- zellkonverter::readH5AD(file_path, use_hdf5 = TRUE, reader = "R", verbose = TRUE) -# # -# # cell_number <- length(colnames(data)) -# # -# # -# # file_size <- file.info(file_path)$size / 1024^3 -# # -# # # nFeature_threshold -# # -# # tibble(file_name = file_path, -# # cell_number = cell_number, -# # file_size = file_size) -# # }) -# -# #results <- readRDS(glue("{store}/sample_tiers.rds")) -# results <- tar_read(results, store = glue("{store}/sample_tiers_dataframe_targets")) -# -# tiers_dataframe <- results |> -# mutate(file_name = file_name, -# file_size = round(file_size, 3), -# tier = case_when(cell_number < 500 ~ "tier_1", -# cell_number >= 500 & cell_number < 1000 ~ "tier_2", -# cell_number >= 1000 & cell_number < 10000 ~ "tier_3", -# cell_number >= 10000 ~ "tier_4"), -# # tier = case_when(cell_number < 6000 ~ "tier_1", -# # cell_number > 6000 & cell_number <= 10000 ~ "tier_2", -# # cell_number > 10000 & cell_number < 20000 ~ "tier_3", -# # cell_number > 20000 & cell_number < 40000 ~ "tier_4", -# # cell_number > 40000 ~ "tier_5"), -# set_names = basename(file_name) |> stringr::str_remove("\\.h5ad$")) -# -# result_directory = "/vast/projects/cellxgene_curated/metadata_cellxgenedp_Apr_2024" -# samples <- read_parquet("~/cellxgene_curated/census_samples/census_samples_to_download_groups.parquet") -# sample_meta <- tar_read(metadata_dataset_id_common_sample_columns, store = glue("{result_directory}/_targets")) -# samples = samples |> left_join(get_metadata() |> select(dataset_id, contains("norm")) |> -# distinct() |> filter(!is.na(x_normalization)) |> -# as_tibble(), by = "dataset_id") -# -# -# df <- samples |> left_join(sample_meta, by = "dataset_id") |> distinct(dataset_id, sample_2, x_normalization, x_approximate_distribution) |> -# mutate(transform_method = case_when(str_like(x_normalization, "C%") ~ "log", -# x_normalization == "none" ~ "log", -# x_normalization == "normalized" ~ "log", -# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "log", -# is.na(x_normalization) & x_approximate_distribution == "NORMAL" ~ "NORMAL", -# is.na(x_normalization) & x_approximate_distribution == "COUNT" ~ "COUNT", -# str_like(x_normalization, "%canpy%") ~ "log1p", -# TRUE ~ x_normalization)) |> -# -# mutate(method_to_apply = case_when(transform_method %in% c("log","LogNormalization","LogNormalize","log-normalization") ~ "exp", -# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "exp", -# str_like(transform_method, "Counts%") ~ "exp", -# str_like(transform_method, "%log2%") ~ "exp", -# transform_method %in% c("log1p", "log1p, base e", "Scanpy", -# "scanpy.api.pp.normalize_per_cell method, scaling factor 10000") ~ "expm1", -# transform_method == "log1p, base 2" ~ "expm1", -# transform_method == "NORMAL" ~ "exp", -# transform_method == "COUNT" ~ "identity" -# ) ) |> -# mutate(comment = case_when(str_like(x_normalization, "Counts%") ~ "a checkpoint for max value of Assay must <= 50", -# is.na(x_normalization) & is.na(x_approximate_distribution) ~ "round negative value to 0", -# x_normalization == "normalized" ~ "round negative value to 0" -# )) |> -# mutate(transformation_function = map( -# method_to_apply, -# ~ ( function(data) { -# assay_name <- data@assays |> names() |> magrittr::extract2(1) -# counts <- assay(data, assay_name) -# density_est <- density(counts |> HPCell:::get_count_per_gene_df() |> pull(counts) ) -# mode_value <- density_est$x[which.max(density_est$y)] -# if (mode_value < 0 ) counts <- counts + abs(mode_value) -# -# # Scale max counts to 20 to avoid any downstream failure -# if ((.x == "exp") && (max(counts) > 20)) { -# scale_factor = 20 / max(counts) -# counts <- counts * scale_factor} -# -# counts <- transform_method(counts) -# # round counts to avoid potential substraction error due to different digits print out -# counts <- counts |> round(5) -# majority_gene_counts = names(which.max(table(as.vector(counts)))) |> as.numeric() -# if (majority_gene_counts != 0) { -# counts <- counts - majority_gene_counts -# } -# -# # Avoid downstream failures negative counts -# if((counts[,1:min(10000, ncol(counts))] |> min()) < 0) -# counts[counts < 0] <- 0 -# -# col_sums <- colSums(counts) -# # Drop all zero cells -# data <- data[, col_sums > 0] -# -# # Avoid downstream binding error -# rowData(data) = NULL -# -# # Assign counts back to data -# assay(data, assay_name) <- counts -# -# data -# -# }) |> -# # Meta programming, replacing the transformation programmatically -# substitute( env = list(transform_method = as.name(.x))) |> -# # Evaluate back to a working function -# eval() -# )) -# -# -# files <- results |> mutate(sample_2 = basename(file_name) |> stringr::str_remove("\\.h5ad$")) |> -# left_join(df, by = "sample_2") |> left_join(tiers_dataframe, by = c("sample_2"= "set_names")) |> -# select(-file_name.y, -cell_number.y, -file_size.y) |> rename(file_name = file_name.x, -# cell_number = cell_number.x, -# file_size = file_size.x) - -#files |> saveRDS("~/scratch/Census/census_reanalysis/census-run-samples/final_run/files.rds") -files <- readRDS("~/scratch/Census/census_reanalysis/census-run-samples/final_run/files.rds") - -# Run 1000 samples per run. Save log and result in the corresponding store -setwd("~/scratch/Census/run13/") - -file_list = files |> slice(12001:13000) - -file_list |> pull(file_name) |> - initialise_hpc( - gene_nomenclature = "ensembl", - data_container_type = "anndata", - store = "~/scratch/Census/run13/", - tier = file_list |> pull(tier), - computing_resources = list( - crew_controller_slurm( - name = "tier_1", - script_lines = "#SBATCH --mem 35G", - slurm_log_output=NULL, - slurm_log_error=NULL, - slurm_cpus_per_task = 1, - workers = 200, - tasks_max = 1, - verbose = T - ), - - crew_controller_slurm( - name = "tier_2", - script_lines = "#SBATCH --mem 60G", - slurm_cpus_per_task = 1, - slurm_log_output=NULL, - slurm_log_error=NULL, - workers = 50, - tasks_max = 1, - verbose = T - ), - crew_controller_slurm( - name = "tier_3", - script_lines = "#SBATCH --mem 90G", - slurm_cpus_per_task = 1, - slurm_log_output=NULL, - slurm_log_error=NULL, - workers = 25, - tasks_max = 1, - verbose = T - ), - crew_controller_slurm( - name = "tier_4", - script_lines = "#SBATCH --mem 100G", - slurm_cpus_per_task = 1, - slurm_log_output=NULL, - slurm_log_error=NULL, - workers = 14, - tasks_max = 1, - verbose = T - ) - ) - - ) |> - #tranform_assay(fx = purrr::map(1:20, ~identity), target_output = "sce_transformed") |> - tranform_assay(fx = file_list |> - pull(transformation_function), - target_output = "sce_transformed") |> - - # Remove empty outliers based on RNA count threshold per cell - remove_empty_threshold(target_input = "sce_transformed", RNA_feature_threshold = 200) |> - - # Remove empty outliers - #remove_empty_DropletUtils(target_input = "sce_transformed") |> - - # Remove dead cells - remove_dead_scuttle(target_input = "sce_transformed") |> - - # Score cell cycle - score_cell_cycle_seurat(target_input = "sce_transformed") |> - - # Remove doublets - remove_doublets_scDblFinder(target_input = "sce_transformed") |> - - # Annotation - annotate_cell_type(target_input = "sce_transformed", azimuth_reference = "pbmcref") |> - - normalise_abundance_seurat_SCT( - factors_to_regress = c("subsets_Mito_percent", "subsets_Ribo_percent", "G2M.Score"), - target_input = "sce_transformed" - ) - - From d5edd06eaa3d7a42c8c3de36383e835e45af7b9b Mon Sep 17 00:00:00 2001 From: stemangiola Date: Fri, 25 Oct 2024 18:03:20 +1100 Subject: [PATCH 054/145] fix pipeline --- .Rbuildignore | 4 +- DESCRIPTION | 2 +- NAMESPACE | 2 + R/functions.R | 2 +- R/modules_grammar_hpc.R | 49 ++++++++------- R/tranform_assay.R | 132 ++++++++++++++++++++++++++++++++++----- man/initialise_hpc.Rd | 5 +- man/transform_utility.Rd | 7 ++- 8 files changed, 161 insertions(+), 42 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index ec9271d1..c47772ae 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -10,4 +10,6 @@ pipeline_stores ^data/theme_multipanel\.rda$ ^inst/rmd/.*\\.html$ ^[^/]*\.r$ -^tests$ \ No newline at end of file +^tests$ +_targets +target_framework \ No newline at end of file diff --git a/DESCRIPTION b/DESCRIPTION index 92f5de2f..f1fd0fec 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.5 +Version: 0.3.7 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", diff --git a/NAMESPACE b/NAMESPACE index e5559cd2..873cfaf3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -17,6 +17,7 @@ export(annotate_cell_type) export(annotation_label_transfer) export(calculate_pseudobulk) export(cell_cycle_scoring) +export(census_harmonise_anndata_counts) export(clean_cellxgene_cell_types) export(convert_gene_names) export(create_pseudobulk) @@ -113,6 +114,7 @@ importFrom(Seurat,ScaleData) importFrom(Seurat,VariableFeatures) importFrom(Seurat,as.Seurat) importFrom(Seurat,as.SingleCellExperiment) +importFrom(SeuratObject,RenameAssays) importFrom(SingleCellExperiment,"altExp<-") importFrom(SingleCellExperiment,SingleCellExperiment) importFrom(SingleCellExperiment,altExp) diff --git a/R/functions.R b/R/functions.R index ad361c43..9f8aa47d 100644 --- a/R/functions.R +++ b/R/functions.R @@ -593,7 +593,7 @@ doublet_identification <- function(input_read_RNA_assay, #' @importFrom tibble as_tibble #' @importFrom Seurat CellCycleScoring #' @importFrom Seurat as.Seurat -#' @importFrom Seurat RenameAssays +#' @importFrom SeuratObject RenameAssays #' @importFrom Seurat NormalizeData #' @importFrom EnsDb.Hsapiens.v86 EnsDb.Hsapiens.v86 #' @importFrom SingleCellExperiment SingleCellExperiment diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 9618d9b8..a43f2bd0 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -46,7 +46,11 @@ initialise_hpc <- function(input_hpc, debug_step = NULL, RNA_assay_name = "RNA", gene_nomenclature = "symbol", - data_container_type) { + data_container_type, + verbosity = targets::tar_config_get("reporter_make"), + error = NULL, + update = "thorough" + ) { # Capture all arguments including defaults args_list <- as.list(environment()) @@ -67,7 +71,6 @@ initialise_hpc <- function(input_hpc, input_hpc |> as.list() |> saveRDS("input_file.rds") gene_nomenclature |> saveRDS("temp_gene_nomenclature.rds") data_container_type |> saveRDS("data_container_type.rds") - computing_resources |> saveRDS("temp_computing_resources.rds") tiers = tier |> get_positions() @@ -85,21 +88,21 @@ initialise_hpc <- function(input_hpc, tar_option_set( memory = "transient", - garbage_collection = TRUE, + #garbage_collection = TRUE, storage = "worker", retrieval = "worker", - #error = "continue", - format = "qs", + error = e, + # format = "qs", debug = d, # Set the target you want to debug. - # cue = tar_cue(mode = "never") # Force skip non-debugging outdated targets. + cue = tar_cue(mode = u), # Force skip non-debugging outdated targets. controller = crew_controller_group ( readRDS("temp_computing_resources.rds") ), packages = c("HPCell") ) - + target_list = list( ) } |> - substitute(env = list(d = debug_step)) |> + substitute(env = list(d = debug_step, e = error, u = update)) |> tar_script_append2(script = glue("{store}.R"), append = FALSE) @@ -523,24 +526,24 @@ evaluate_hpc.HPCell = function(input_hpc) { tar_make( callr_function = my_callr_function, - reporter = "verbose_positives", script = glue("{input_hpc$initialisation$store}.R"), - store = input_hpc$initialisation$store + store = input_hpc$initialisation$store, + reporter = input_hpc$initialisation$verbosity ) - # Example usage: - c( - "input_file.rds", - "temp_computing_resources.rds", - "temp_debug_step.rds", - "sample_names.rds", - "total_RNA_count_check.rds", - "temp_group_by.rds", - "factors_to_regress.rds", - "pseudobulk_group_by.rds", - "temp_gene_nomenclature.rds" - ) |> - remove_files_safely() + # # Example usage: + # c( + # "input_file.rds", + # "temp_computing_resources.rds", + # "temp_debug_step.rds", + # "sample_names.rds", + # "total_RNA_count_check.rds", + # "temp_group_by.rds", + # "factors_to_regress.rds", + # "pseudobulk_group_by.rds", + # "temp_gene_nomenclature.rds" + # ) |> + # remove_files_safely() # If get_single_cell is called then return the object if(input_hpc$last_call |> is.null() |> not()) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index b18ceb4a..8ea7eae8 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -11,11 +11,11 @@ tranform_assay.HPCell = function( input_hpc, # This might be carrying the environment - fx = input_hpc$initialisation$input_hpc |> map(~identity), + fx = input_hpc$initialisation$input_hpc |> map(~"identity"), target_input = "data_object", target_output = "sce_transformed", ... - ) { +) { fx |> saveRDS("temp_fx.rds") @@ -23,26 +23,108 @@ tranform_assay.HPCell = function( # Track the file hpc_single("transform_file", "temp_fx.rds", format = "file") |> - + hpc_iterate( target_output = "transform", user_function = readRDS |> quote() , - file = "transform_file" |> is_target() + file = "transform_file" |> is_target() # , # iteration = "list", # deployment = "main" ) |> - + hpc_iterate( target_output = target_output, user_function = transform_utility |> quote() , - input_read_RNA_assay = as.name(target_input), - transform_fx = transform |> quote() , + input_read_RNA_assay = "target_input" |> is_target(), + transform_fx = "transform" |> is_target() , external_path = glue("{input_hpc$initialisation$store}/external") |> as.character() ) } +#' Harmonize Counts Data in a SingleCellExperiment Object +#' +#' This function harmonizes the counts data in a \code{SingleCellExperiment} object by adjusting negative values, +#' scaling counts to avoid downstream failures, applying a transformation method, and removing cells with zero counts. +#' +#' @param data A \code{SingleCellExperiment} object containing assays with counts data. +#' @param transform_method A function or the name of a function (as a character string) to transform the counts data (e.g., \code{"log1p"}, \code{"exp"}). +#' +#' @return The modified \code{SingleCellExperiment} object with harmonized counts. +#' @examples +#' \dontrun{ +#' library(SingleCellExperiment) +#' # Using a function object +#' transformed_sce <- census_harmonise_anndata_counts(sce, log1p) +#' # Using a function name as a character string +#' transformed_sce <- census_harmonise_anndata_counts(sce, "exp") +#' } +#' +#' @export +census_harmonise_anndata_counts <- function(data, transform_method) { + # Convert transform_method to a function if it is a character string + transform_function <- match.fun(transform_method) + + # Get the name of the first assay in the data object + assay_name <- names(assays(data))[1] + + # Extract the counts matrix from the assay + counts <- assay(data, assay_name) + + # Compute the density estimate of the counts + density_est <- density(as.matrix(counts)) + + # Find the mode (peak) value of the counts + mode_value <- density_est$x[which.max(density_est$y)] + + # If the mode value is negative, shift counts to make the mode zero + if (mode_value < 0) { + counts <- counts + abs(mode_value) + } + + # Scale counts to a maximum of 20 to avoid downstream failures + # Check if the transformation method is not 'identity' and counts exceed 20 + if (!identical(transform_function, identity) && (max(counts) > 20)) { + scale_factor <- 20 / max(counts) + counts <- counts * scale_factor + } + + # Apply the transformation method to counts + counts <- transform_function(counts) + + # Round counts to avoid potential subtraction errors due to floating-point precision + counts <- round(counts, 5) + + # Find the most frequent count value (mode) in the counts + majority_gene_counts <- as.numeric(names(which.max(table(as.vector(counts))))) + + # Subtract the mode value from counts if it is not zero + if (majority_gene_counts != 0) { + counts <- counts - majority_gene_counts + } + + # Replace negative counts with zero to avoid downstream failures + if (min(counts[, seq_len(min(10000, ncol(counts)))]) < 0) { + counts[counts < 0] <- 0 + } + + # Assign the modified counts back to the data object + assay(data, assay_name) <- counts + + # Calculate the column sums (total counts per cell) + col_sums <- colSums(counts) + + # Remove cells with zero total counts + data <- data[, col_sums > 0] + + # Remove row data to avoid downstream binding errors + rowData(data) <- NULL + + # Return the modified data object + data +} + #' Apply a transformation to an assay and save as HDF5 #' #' This function applies a specified transformation to the assay of a @@ -60,19 +142,41 @@ tranform_assay.HPCell = function( #' @importFrom HDF5Array saveHDF5SummarizedExperiment #' #' @export -transform_utility = function(input_read_RNA_assay, transform_fx, external_path) { +transform_utility = function(input_read_RNA_assay, transform_fx, external_path, data_container_type) { + #input_read_RNA_assay = input_read_RNA_assay |> read_data_container(container_type = data_container_type) dir.create(external_path, showWarnings = FALSE, recursive = TRUE) + file_name = glue("{external_path}/{digest(input_read_RNA_assay)}") - assay(input_read_RNA_assay) = assay(input_read_RNA_assay) |> transform_fx() + #assay(input_read_RNA_assay) = assay(input_read_RNA_assay) |> transform_fx() + + input_read_RNA_assay = input_read_RNA_assay |> census_harmonise_anndata_counts(transform_fx) input_read_RNA_assay |> - saveHDF5SummarizedExperiment( - dir = file_name, - replace=TRUE, - as.sparse=TRUE - ) + + save_experiment_data(dir = file_name, + + container_type = data_container_type ) + + extension <- switch(data_container_type, + + "sce_rds" = ".rds", + + "seurat_rds" = ".rds", + + "seurat_h5" = ".h5Seurat", + + "anndata" = ".h5ad", + + "sce_hdf5" = "") + + file_name = paste0(file_name, extension) + + # Return data as target instead of file_name pointer + + input_read_RNA_assay } + diff --git a/man/initialise_hpc.Rd b/man/initialise_hpc.Rd index 910847d4..e9e413a9 100644 --- a/man/initialise_hpc.Rd +++ b/man/initialise_hpc.Rd @@ -12,7 +12,10 @@ initialise_hpc( debug_step = NULL, RNA_assay_name = "RNA", gene_nomenclature = "symbol", - data_container_type + data_container_type, + verbosity = targets::tar_config_get("reporter_make"), + error = NULL, + update = "thorough" ) } \arguments{ diff --git a/man/transform_utility.Rd b/man/transform_utility.Rd index ba2bfcfa..650db1ce 100644 --- a/man/transform_utility.Rd +++ b/man/transform_utility.Rd @@ -4,7 +4,12 @@ \alias{transform_utility} \title{Apply a transformation to an assay and save as HDF5} \usage{ -transform_utility(input_read_RNA_assay, transform_fx, external_path) +transform_utility( + input_read_RNA_assay, + transform_fx, + external_path, + data_container_type +) } \arguments{ \item{input_read_RNA_assay}{A SummarizedExperiment object to be transformed.} From 27632eb5097a6b6a3376ed605ed4f45a54315404 Mon Sep 17 00:00:00 2001 From: stemangiola Date: Fri, 25 Oct 2024 18:04:05 +1100 Subject: [PATCH 055/145] add man --- man/census_harmonise_anndata_counts.Rd | 30 +++++++++++++++++++ man/clean_cellxgene_cell_types.Rd | 27 +++++++++++++++++ man/eliminate_random_effects.Rd | 21 +++++++++++++ man/reference_annotation_to_consensus.Rd | 38 ++++++++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 man/census_harmonise_anndata_counts.Rd create mode 100644 man/clean_cellxgene_cell_types.Rd create mode 100644 man/eliminate_random_effects.Rd create mode 100644 man/reference_annotation_to_consensus.Rd diff --git a/man/census_harmonise_anndata_counts.Rd b/man/census_harmonise_anndata_counts.Rd new file mode 100644 index 00000000..17fd2d82 --- /dev/null +++ b/man/census_harmonise_anndata_counts.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/tranform_assay.R +\name{census_harmonise_anndata_counts} +\alias{census_harmonise_anndata_counts} +\title{Harmonize Counts Data in a SingleCellExperiment Object} +\usage{ +census_harmonise_anndata_counts(data, transform_method) +} +\arguments{ +\item{data}{A \code{SingleCellExperiment} object containing assays with counts data.} + +\item{transform_method}{A function or the name of a function (as a character string) to transform the counts data (e.g., \code{"log1p"}, \code{"exp"}).} +} +\value{ +The modified \code{SingleCellExperiment} object with harmonized counts. +} +\description{ +This function harmonizes the counts data in a \code{SingleCellExperiment} object by adjusting negative values, +scaling counts to avoid downstream failures, applying a transformation method, and removing cells with zero counts. +} +\examples{ +\dontrun{ +library(SingleCellExperiment) +# Using a function object +transformed_sce <- census_harmonise_anndata_counts(sce, log1p) +# Using a function name as a character string +transformed_sce <- census_harmonise_anndata_counts(sce, "exp") +} + +} diff --git a/man/clean_cellxgene_cell_types.Rd b/man/clean_cellxgene_cell_types.Rd new file mode 100644 index 00000000..b250cd17 --- /dev/null +++ b/man/clean_cellxgene_cell_types.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{clean_cellxgene_cell_types} +\alias{clean_cellxgene_cell_types} +\title{Clean and Standardize Cell Type Names} +\usage{ +clean_cellxgene_cell_types(x) +} +\arguments{ +\item{x}{A character vector of cell type names to be cleaned and standardized.} +} +\value{ +A character vector of cleaned and standardized cell type names. +} +\description{ +Cleans and standardizes a vector of cell type names by applying a series of string transformations to improve consistency. +This function is particularly useful for preprocessing cell type labels in biological datasets where consistent naming conventions are important. +} +\examples{ +cell_types <- c("CD4+ T-cells", "NK cells", "Blast-cells", "Terminally differentiated macrophage") +cleaned_cell_types <- clean_cellxgene_cell_types(cell_types) +print(cleaned_cell_types) + +# Output: +# [1] "cd4 t" "nk" "" "macrophage" + +} diff --git a/man/eliminate_random_effects.Rd b/man/eliminate_random_effects.Rd new file mode 100644 index 00000000..a1bbf256 --- /dev/null +++ b/man/eliminate_random_effects.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/HPCell.R +\name{eliminate_random_effects} +\alias{eliminate_random_effects} +\title{HPCell Package Functions} +\usage{ +eliminate_random_effects(formula) +} +\arguments{ +\item{formula}{An object of class \code{formula}, representing a mixed-effects model formula.} +} +\value{ +A formula object with random effects parts removed. +} +\description{ +Functions for the HPCell package. +Eliminate Random Effects from a Formula +} +\examples{ +eliminate_random_effects(~ age_days * sex + (1 | file_id) + ethnicity_simplified + assay_simplified + .aggregated_cells + (1 + age_days * sex | tissue)) +} diff --git a/man/reference_annotation_to_consensus.Rd b/man/reference_annotation_to_consensus.Rd new file mode 100644 index 00000000..c9f382f1 --- /dev/null +++ b/man/reference_annotation_to_consensus.Rd @@ -0,0 +1,38 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{reference_annotation_to_consensus} +\alias{reference_annotation_to_consensus} +\title{reference_annotation_to_consensus} +\usage{ +reference_annotation_to_consensus(azimuth_input, monaco_input, blueprint_input) +} +\arguments{ +\item{azimuth_input}{A vector of cell type annotations from the Azimuth dataset.} + +\item{monaco_input}{A vector of cell type annotations from the Monaco dataset.} + +\item{blueprint_input}{A vector of cell type annotations from the Blueprint dataset.} +} +\value{ +A vector of consensus cell type annotations, merging inputs from the three datasets. +} +\description{ +This function takes cell type annotations from multiple datasets (Azimuth, Monaco, Blueprint) and harmonizes them into a consensus annotation. The function utilizes predefined mappings between cell type labels in these datasets to generate standardized cell types across references. +} +\note{ +This function is designed to harmonize specific cell types, especially T cells, B cells, monocytic cells, and innate lymphoid cells (ILCs), across reference datasets. +} +\examples{ +# Example usage: +tibble( + azimuth_predicted.celltype.l2 = c("CD8 TEM", "NK", "CD4 Naive"), + monaco_first.labels.fine = c("Effector memory CD8 T cells", "Natural killer cells", "Naive CD4 T cells"), + blueprint_first.labels.fine = c("CD8+ Tem", "NK cells", "Naive B-cells") +) \%>\% + mutate(consensus = reference_annotation_to_consensus( + azimuth_predicted.celltype.l2, monaco_first.labels.fine, blueprint_first.labels.fine)) + +} +\seealso{ +\code{\link[dplyr]{mutate}}, \code{\link[stringr]{str_detect}}, \code{\link[tidyr]{expand_grid}} +} From 44e27f1eb5c2ed318976a09729a450ffcb940c91 Mon Sep 17 00:00:00 2001 From: stemangiola Date: Fri, 25 Oct 2024 18:04:20 +1100 Subject: [PATCH 056/145] add man --- man/hpc_report.Rd | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 man/hpc_report.Rd diff --git a/man/hpc_report.Rd b/man/hpc_report.Rd new file mode 100644 index 00000000..3265a3e3 --- /dev/null +++ b/man/hpc_report.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/factories.R +\name{hpc_report} +\alias{hpc_report} +\title{Add HPC step to pipeline} +\usage{ +hpc_report(input_hpc, target_output = NULL, rmd_path = NULL, ...) +} +\arguments{ +\item{input_hpc}{The input HPC object.} + +\item{target_output}{The output target name (default: NULL).} + +\item{...}{Additional arguments to pass to the internal functions.} + +\item{user_function}{A custom function provided by the user (default: NULL).} +} +\description{ +This function adds a new step to the HPC pipeline by appending the appropriate +targets to the target script. It allows the user to specify the input and output +targets, as well as a custom user function to be applied. +} From 4d4461034ce328e2320c882d9afbc944a01b5741 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Sat, 26 Oct 2024 18:33:14 +1100 Subject: [PATCH 057/145] update reports --- R/functions.R | 8 +- inst/rmd/Doublet_identification_report.Rmd | 77 +++--- inst/rmd/Empty_droplet_report.Rmd | 290 ++++++++++++++------- tests/testthat/test_single_functions.R | 38 ++- 4 files changed, 283 insertions(+), 130 deletions(-) diff --git a/R/functions.R b/R/functions.R index d82e227c..85274b0d 100644 --- a/R/functions.R +++ b/R/functions.R @@ -373,7 +373,11 @@ alive_identification <- function(input_read_RNA_assay, } } - + input_read_RNA_assay <- input_read_RNA_assay %>% + AddMetaData( + metadata = PercentageFeatureSet(input_read_RNA_assay, pattern = "^MT-", assay = assay), + col.name = "percent.mt" + ) # Returns a named vector of IDs # Matches the gene id’s row by row and inserts NA when it can’t find gene names @@ -1053,8 +1057,6 @@ create_pseudobulk <- function(input_read_RNA_assay, #' @importFrom SummarizedExperiment rowData #' @importFrom SummarizedExperiment rowData<- #' -#' -#' #' @export #' pseudobulk_merge <- function(pseudobulk_list, external_path, ...) { diff --git a/inst/rmd/Doublet_identification_report.Rmd b/inst/rmd/Doublet_identification_report.Rmd index fd53e390..4445f8d3 100644 --- a/inst/rmd/Doublet_identification_report.Rmd +++ b/inst/rmd/Doublet_identification_report.Rmd @@ -4,15 +4,15 @@ author: "SS" date: "2023-12-05" output: html_document params: - data_object: "data_object" - doublet_tbl: "doublet_tbl" - annotation_tbl: "annotation_tbl" - sample_names: "sample_names" + data_object: "NA" + doublet_tbl: "NA" + annotation_tbl: "NA" + sample_names: "NA" --- ## Introduction This report contains UMAP representation of cell clusters and visualization of the distribution of doublets across processed samples. -```{r, include=FALSE} +```{r, warning=FALSE, message=FALSE, echo=FALSE} library(purrr) library(dplyr) library(tidyr) @@ -26,12 +26,26 @@ library(patchwork) library(tibble) library(scran) library(magrittr) -sample_column <- "orig.ident" +library(dplyr) +library(tidyr) +library(purrr) +# library(sccomp) +library(ggrepel) +library(Seurat) +library(glue) +library(scDblFinder) +library(Seurat) +library(tidyseurat) +library(tidySingleCellExperiment) +library(patchwork) +library(tibble) +library(scran) +library(purrr) +#sample_column <- "orig.ident" cell_ann_col <- "seurat_annotations" ``` ```{r, include=FALSE} -library(purrr) calc_UMAP <- function(input_seurat) { assay_name <- input_seurat@assays |> names() |> extract2(1) @@ -59,25 +73,11 @@ calc_UMAP <- function(input_seurat) { return(x) } -calc_UMAP_dbl_report <- map(data_object, calc_UMAP) +calc_UMAP_dbl_report <- map(params$data_object, calc_UMAP) ``` ```{r, include=FALSE} -library(dplyr) -library(tidyr) -library(purrr) -# library(sccomp) -library(ggrepel) -library(Seurat) -library(glue) -library(scDblFinder) -library(Seurat) -library(tidyseurat) -library(tidySingleCellExperiment) -library(patchwork) -library(tibble) -library(scran) get_labels_clusters = function(.data, label_column, dim1, dim2){ @@ -232,22 +232,24 @@ get_labels_clusters = function(.data, label_column, dim1, dim2){ ```{r, echo = FALSE, warning=FALSE} # Joining info and returning a list of tibbles merged_combined_annotation_doublets <- list( - print(length(calc_UMAP_dbl_report)), - doublet_tbl, - annotation_tbl + calc_UMAP_dbl_report, + params$doublet_tbl, + params$annotation_tbl, + params$sample_name ) |> pmap( ~ ..1 |> - left_join(..2, by = ".cell") |> - left_join(..3, by = ".cell") + mutate(sample_column = ..4) |> + left_join(..2 |> mutate(sample_column = ..4), by = ".cell") |> + left_join(..3 |> mutate(sample_column = ..4), by = ".cell") ) |> enframe(name = "sample_id", value = "annotated_metadata") |> mutate( - sample_name = sample_names # Using the sample_names list you already have + sample_column = params$sample_name # Using the sample_names list you already have ) |> mutate(plot_by_doublet = map2( annotated_metadata, - sample_name, + sample_column, ~ { # Sample to not overwhelm the plotting merged_combined_annotation_doublets = .x |> @@ -277,7 +279,7 @@ merged_combined_annotation_doublets <- list( )) |> mutate(plot_by_cell_type = map2( annotated_metadata, - sample_name, + params$sample_name, ~ { # Sample to not overwhelm the plotting merged_combined_annotation_doublets = .x |> @@ -334,14 +336,14 @@ From this plot, we can infer: doublet_composition<- merged_combined_annotation_doublets |> mutate(doublet_composition = map2( annotated_metadata, - sample_name, + sample_column, ~ { #browser() .x|> - dplyr::select(!!sym(sample_column), scDblFinder.class)} + dplyr::select(sample_column, scDblFinder.class)} )) |> # table()|> - dplyr::select(sample_name, doublet_composition) |> + dplyr::select(sample_column, doublet_composition) |> deframe() # merged_combined_annotation_doublets <- @@ -352,17 +354,16 @@ doublet_composition<- merged_combined_annotation_doublets |> # ungroup() # ) -# calculate proportion and plot #calculate proportion and plot - merged_combined_annotation_doublets <- +merged_combined_annotation_doublets <- merged_combined_annotation_doublets |> mutate(doublet_composition_plot = map( annotated_metadata, ~ .x |> # browser() |> # create frequency column - dplyr::count(.data[[sample_column]], .data[[cell_ann_col]], scDblFinder.class, name= "count_class") |> - group_by(.data[[sample_column]], .data[[cell_ann_col]]) |> + dplyr::count(.data$sample_column, .data[[cell_ann_col]], scDblFinder.class, name= "count_class") |> + group_by(.data$sample_column, .data[[cell_ann_col]]) |> mutate(proportion = count_class/sum(count_class)) |> ungroup() |> @@ -377,7 +378,7 @@ doublet_composition<- merged_combined_annotation_doublets |> ggplot(aes(x = .data[[cell_ann_col]] , y = proportion, fill = scDblFinder.class)) + geom_bar(stat = "identity") + theme_bw() + - facet_wrap(~ orig.ident) + + facet_wrap(~ sample_column) + theme(axis.text.x=element_text(angle=70, hjust=1)) )) diff --git a/inst/rmd/Empty_droplet_report.Rmd b/inst/rmd/Empty_droplet_report.Rmd index daee294a..f95dd5a9 100644 --- a/inst/rmd/Empty_droplet_report.Rmd +++ b/inst/rmd/Empty_droplet_report.Rmd @@ -6,6 +6,8 @@ output: html_document params: empty_tbl: "NA" data_object: "NA" + alive_tbl: "NA" + sample_name: "NA" --- ```{r, warning=FALSE, message=FALSE, echo=FALSE} @@ -40,97 +42,63 @@ library(magrittr) library(qs) library(S4Vectors) -# Subsetting tissues in input data -# unique_tissues <- unique(input_seurat_abc@meta.data$Tissue) - -# assay = params$x1[[1]]@assays |> names() |> extract2(1) -# Subset 2 tissues (sample types) -# heart <- subset(input_seurat, subset = Tissue == "Heart") -# trachea <- subset(input_seurat, subset = Tissue == "Trachea") -# params$x1 <- c(heart, trachea) - -# # ma plot: mito is green, ribo is red -# col <- rep('black',ncol(empty_droplets_tbl)) -# col[rownames(empty_droplets_tbl) %in% mito_genes] <-'green' -# col[rownames(empty_droplets_tbl) %in% ribo_genes] <-'red' -# -# Process input data -# process_input <- function(input_seurat) { -# #browser() -# input<- input_seurat@meta.data |> -# tibble::rownames_to_column(var = '.cell') -# -# # grep('^MT-', rownames(input_seurat[['RNA']]), value=T) -# #define mito and ribo genes and add the plot: -# mito_genes <- grep('^MT-', rownames(input_seurat[[assay]]), value=T) -# ribo_genes <-grep('^RP(S|L)', rownames(input_seurat[[assay]]), value=T) -# -# col <- rep('cornflowerblue',ncol(input_seurat)) -# col[rownames(input_seurat) %in% mito_genes] <-'green' -# col[rownames(input_seurat) %in% ribo_genes] <-'red' -# col[rownames(input_seurat) %in% NA] <-'grey' -# sample_numbers = 1:length(list(input_seurat)) -# #sample_names <- unique(input$Tissue) -# } -# processed_input_list <- map(params$x1, process_input) - -# input <- input_seurat@meta.data |> -# tibble::rownames_to_column(var = '.cell') -# -# joined_data <- empty_droplets_tbl |> -# left_join(input |> dplyr::select(.cell, Tissue), by = '.cell') +# sample_column <- "orig.ident" + +# Calculate_UMAP +calc_UMAP <- function(input_seurat) { + assay_name <- input_seurat@assays |> names() |> extract2(1) + + # Check if variable features are already present, if not calculate them + if (length(VariableFeatures(input_seurat)) == 0) { + input_seurat <- FindVariableFeatures(input_seurat) + } -# Defining Tissue names -# sample_names <- sapply(1:length(params$x1), function(i) { -# #browser() -# return(params$x1[[i]][[i]]) -# }) -# - -# sample_names <- lapply(params$x1, function(seurat_obj) { -# unique(seurat_obj$Tissue) -# }) -# sample_names<- unlist(sample_names) -# -# sample_names <- sapply(1:length(params$x1), function(i) { -# return(params$x1[[i]][[1]][[1]]) -# }) -# sample_names + # Extract variable features using VariableFeatures() for Seurat v5 + var_genes <- VariableFeatures(input_seurat) -# Defining Tissue names -# sample_names <- lapply(params$x1, function(seurat_obj) { -# seurat_obj |> pull(params$x5) -# }) -# sample_names<- params$x4 -# sample_names<- unlist(sample_names) - -# process_input<- function(input_metadata) { -# input<- input_metadata |> -# # input_seurat@meta.data |> -# tibble::rownames_to_column(var = '.cell') -# return(input) -# } -#processed_input_list <- map(input_metadata, process_input) -#unique_samples_list <- map(input_metadata, ~ .x |> magrittr::extract2(sample_column) |> unique()) -#preprocessed_metadata_list -#sample_column<- "sampleName" - -sample_column <- "orig.ident" -# data_object <- map(data_object, ~ .x %>% extract2("orig.ident") |> -# rownames_to_column(var = ".cell")) + # Ensure that there are variable features before proceeding + if (length(var_genes) > 0) { + # Scale data and run PCA on variable genes + x <- ScaleData(input_seurat) |> + RunPCA(features = var_genes) |> + FindNeighbors(dims = 1:30) |> + FindClusters(resolution = 0.5) |> + RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> + as_tibble() + } else { + stop("No variable features available for UMAP calculation.") + } + + return(x) +} + +calc_UMAP_dbl_report <- map(data_object, calc_UMAP) + +extract_metadata <- function(seurat_obj, sample_name) { + seurat_obj@meta.data %>% + rownames_to_column(var = ".cell") %>% + mutate(sample = sample_name) +} + +meta_data_list <- map2(data_object, sample_name, ~ extract_metadata(.x, .y)) + +# Function to merge meta data with another processed tibble data +merge_meta <- function(meta_data, data_to_merge) { + left_join(meta_data, data_to_merge, by = ".cell") +} ``` ## Barcode rank plot -```{r echo=FALSE, message=FALSE, warning=FALSE} +```{r, echo=FALSE, message=FALSE, warning=FALSE, fig.width=12, fig.height=7} # names(empty_droplets_tbl_list) <- unique_samples_list # Process empty droplets data -empty_df <- function(input_metadata, empty_droplets_tbl) { +empty_df <- function(input_metadata, empty_droplets_tbl, sample_name) { # input <- input_metadata |> # # input_seurat@meta.data |> # tibble::rownames_to_column(var = '.cell') #browser() joined_data <- empty_droplets_tbl |> - left_join(input_metadata |> dplyr::select(.cell, !!sample_column), by = '.cell') + left_join(input_metadata |> dplyr::select(.cell), by = '.cell') # Create a data frame with plotting information plot_data <- data.frame( @@ -144,19 +112,18 @@ empty_df <- function(input_metadata, empty_droplets_tbl) { FDR = joined_data$FDR, Total = joined_data$Total, PValue = joined_data$PValue, - sample_name = joined_data |> extract2({{sample_column}}) + sample_name = sample_name ) return(plot_data) } - -# process_empty_droplet_list <- purrr::map2(input_meta_data_list, empty_droplets_tbl_list, empty_df) -process_empty_droplet_list <- purrr::map2(data_object, empty_tbl, empty_df) - +process_empty_droplet_list <- purrr::pmap( + list(meta_data_list, empty_tbl, sample_name), + ~ empty_df(..1, ..2, ..3) +) # Combined tibble with an identifier for each tissue/sample combined_df <- bind_rows(process_empty_droplet_list) - # mutate(tissue_id = factor(!!sample_column, labels = unique_samples_list)) # Generate plot plot <- ggplot(combined_df, aes(x = x, y = y)) + @@ -177,6 +144,75 @@ plot <- ggplot(combined_df, aes(x = x, y = y)) + print(plot) ``` +## Percentage of reads assigned to mitochondrial transcrips against library size + +- Scatter plot comparing mitochondrial content percentage to total count of RNA sequencing reads across different samples (in this case tissues) + +- The X-axis is on a logarithmic scale and represents the total count of RNA sequencing reads per cell, while the Y-axis shows the percentage of those reads that are mitochondrial. Each point on the plot represents a single cell. + +```{r, warning=FALSE, message=FALSE, echo=FALSE} + +merged_alive <- map2(meta_data_list, alive_tbl, merge_meta) +combined_merged_alive <- bind_rows(merged_alive) + +# Function to process and prepare data for mitochondrial plotting +plot_mito_data <- function(input_seurat, tissue_name, alive_identification) { + # Calculate per-cell mitochondrial QC metrics + mitochondrion <- alive_identification %>% + group_by(sample) %>% + mutate( + discard = as.logical(isOutlier(subsets_Mito_percent, type = "higher")), + threshold = as.numeric(attr(isOutlier(subsets_Mito_percent, type = "higher"), "threshold")["higher"]), + tissue_name = tissue_name + ) %>% + ungroup() + + # Prepare data frame for plotting + plot_mito <- mitochondrion %>% + dplyr::select( + tissue_name, + subsets_Mito_percent, + subsets_Mito_sum, + discard, + threshold, + high_mitochondrion = discard # Rename discard to high_mitochondrion for clarity + ) + + return(plot_mito) +} + +# Apply the function to a list of samples and combine all data +all_data <- lapply(seq_along(data_object), function(i) { + plot_mito_data(meta_data_list[[i]], sample_name[[i]], merged_alive[[i]]) +}) + +# Combine all data into a single tibble +combined_plot_mito_data <- bind_rows(all_data) + +# Function to plot mitochondrial content per tissue +plot_each_sample <- function(combined_plot_mito_data) { + num_tissues <- length(unique(combined_plot_mito_data$tissue_name)) + + ggplot(combined_plot_mito_data, aes(x = subsets_Mito_sum, y = subsets_Mito_percent)) + + facet_wrap(~ tissue_name) + + geom_point(aes(color = high_mitochondrion), alpha = 0.5) + + scale_x_log10() + + geom_hline(aes(yintercept = threshold), color = "red", linetype = "dashed") + + labs( + x = "Total count", + y = "Mitochondrial %", + title = paste("Percentage library size vs. library size with", num_tissues, "tissue types"), + color = "High mitochondrial percentage" + ) + + theme_minimal() +} + +# Plot all tissues +plot_each_sample(combined_plot_mito_data) + +``` + + ## Proportion of empty droplets - Number and proportion of cells (non-empty droplets), everything above knee is retained. ```{r, warning=FALSE, message=FALSE, echo=FALSE} @@ -255,11 +291,89 @@ plot_hist <- hist_p_val(combined_df) plot_hist ``` -## Percentage of reads assigned to mitochondrial transcrips against library size +## Rank vs total count across samples -- Scatter plot comparing mitochondrial content percentage to total count of RNA sequencing reads across different samples (in this case tissues) +Plots are shown for all barcodes, barcodes corresponding to empty droplets,and barcodes corresponding to large or small cells. Ranks are calculated from the entire set of barcodes in all plots, for ease of comparison between plots. All axes are on a log-scale. +```{r, warning=FALSE, message=FALSE, echo=FALSE} + +merged_empty <- map2(meta_data_list, empty_tbl, merge_meta) +combined_merged_empty <- bind_rows(merged_empty) + +# Define groups +all_barcodes <- combined_merged_empty + +empty_droplets <- combined_merged_empty |> + dplyr::filter(empty_droplet == TRUE) + +large_cells <- combined_merged_empty |> + dplyr::filter(nCount_RNA > 5000) + +small_cells <- combined_merged_empty |> + dplyr::filter(nCount_RNA <= 5000) + +plot_data <- bind_rows( + all_barcodes %>% mutate(group = "All barcodes"), + empty_droplets %>% mutate(group = "Empty droplets"), + large_cells %>% mutate(group = "Large cells"), + small_cells %>% mutate(group = "Small cells") +) + + +# Create a function for plotting +ggplot(plot_data, aes(x = rank, y = nCount_RNA)) + + geom_point(aes(color = group), alpha = 0.3) + # Default transparency + scale_color_manual(values = c( + "All barcodes" = "pink", # Default color for all barcodes + "Empty droplets" = "lightblue", # Color for empty droplets + "Large cells" = "purple", # Color for large cells + "Small cells" = "lightgrey" # Light silver for small cells + )) + + scale_x_log10() + + scale_y_log10() + + facet_wrap(~ sample) + # Facet by sample + labs(title = "Rank vs Total count across samples", x = "Rank", y = "Total count (nCount_RNA)") + + theme_minimal() + + theme(legend.position = "bottom") +``` + +## Mitochondrial gene expression and ribosomal protein expression across samples +- UMAP plots constructed from barcodes that were detected with EmptyDrops +- Each point represents a barcode and is colored based on its Mitochondrial/ Ribosomal percentage +```{r, warning=FALSE, message=FALSE, echo=FALSE} + +merge_umap_with_metadata <- function(umap_data, metadata, sample) { + umap_data |> + dplyr::select(.cell, umap_1, umap_2) |> + left_join(metadata, by = ".cell") |> + mutate(sample = sample) # Merge with metadata +} + +# Merge UMAP data with combined_merged_alive and add sample names +umap_merged_data <- map2(calc_UMAP_dbl_report, sample_name, ~ merge_umap_with_metadata(.x, combined_merged_alive, .y)) +combined_umap_merged <- bind_rows(umap_merged_data) + +# Plot for mitochondrial gene expression +plot_mito <- ggplot(combined_umap_merged, aes(x = umap_1, y = umap_2, color = subsets_Mito_percent)) + + geom_point(alpha = 0.6) + # Add transparency for better visualization + scale_color_gradient(low = "blue", high = "red") + + labs(title = "Mitochondrial Gene Expression", x = "UMAP1", y = "UMAP2") + + theme_minimal() + + facet_wrap(~ sample) + +# Plot for ribosomal gene expression +plot_ribo <- ggplot(combined_umap_merged, aes(x = umap_1, y = umap_2, color = subsets_Ribo_percent)) + + geom_point(alpha = 0.6) + # Add transparency for better visualization + scale_color_gradient(low = "blue", high = "red") + + labs(title = "Ribosomal Protein Expression", x = "UMAP1", y = "UMAP2") + + theme_minimal() + + facet_wrap(~ sample) + +combined_plot <- plot_mito + plot_ribo + +# Show the combined plot +combined_plot +``` -- The X-axis is on a logarithmic scale and represents the total count of RNA sequencing reads per cell, while the Y-axis shows the percentage of those reads that are mitochondrial. Each point on the plot represents a single cell. diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index ab40690d..40fd6cb3 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -626,7 +626,16 @@ input_hpc |> input_metadata <- list(data_object$data_object_cd8b54e4bde74e66@meta.data, data_object$data_object_054cd7cffa276f6d@meta.data) #Testing report - +InstallData("ifnb") +ifnb <- UpdateSeuratObject(ifnb) +ifnb.list <- SplitObject(ifnb, split.by = "stim") +file_paths <- c("~/HPCell/CTRL_seurat_tibble.rds", "~/HPCell/STIM_seurat_tibble.rds") + +input_hpc = + file_paths |> + magrittr::set_names(c("CTRL", "STIM")) + + input_hpc |> # Initialise pipeline characteristics initialise_hpc( @@ -644,6 +653,7 @@ input_hpc |> "subsets_Ribo_percent", "G2M.Score" )) |> + calculate_pseudobulk() |> hpc_report( "empty_report", rmd_path = "~/HPCell/inst/rmd/Empty_droplet_report.Rmd", @@ -666,3 +676,29 @@ input_hpc |> ) +## Test render empty droplet report +rmarkdown::render( + input = paste0(system.file(package = "HPCell"), "/rmd/Empty_droplet_report.Rmd"), + output_file = paste0(system.file(package = "HPCell"), "/Empty_droplet_report.html"), + params = list(empty_tbl = tar_read("empty_tbl", store = "~/HPCell/_targets"), + data_object = tar_read("data_object", store = "~/HPCell/_targets"), + alive_tbl = tar_read("alive_tbl", store = "~/HPCell/_targets")) +) + +## Test render doublet identification report +rmarkdown::render( + input = paste0(system.file(package = "HPCell"), "/rmd/Doublet_identification_report.Rmd"), + output_file = paste0(system.file(package = "HPCell"), "/Doublet_identification_report.html"), + params = list(data_object = tar_read("data_object", store = "~/HPCell/_targets"), + doublet_tbl = tar_read("doublet_tbl", store = "~/HPCell/_targets"), + annotation_tbl = tar_read("annotation_tbl", store = "~/HPCell/_targets"), + sample_names = tar_read("sample_names", store = "~/HPCell/_targets"))) + + +rmarkdown::render( + input = paste0(system.file(package = "HPCell"), "/rmd/Doublet_identification_report.Rmd"), + output_file = paste0(system.file(package = "HPCell"), "/Doublet_identification_report.html"), + params = list(data_object = tar_read("data_object", store = "~/HPCell/_targets"), + doublet_tbl = tar_read("doublet_tbl", store = "~/HPCell/_targets"), + annotation_tbl = tar_read("annotation_tbl", store = "~/HPCell/_targets"), + sample_names = tar_read("sample_names", store = "~/HPCell/_targets"))) \ No newline at end of file From 6332f9fc0e8ef37b8be789779e5a72a854a9acd4 Mon Sep 17 00:00:00 2001 From: stemangiola Date: Wed, 30 Oct 2024 13:42:44 +1100 Subject: [PATCH 058/145] update pipeline to work with HCA --- NAMESPACE | 13 +- R/functions.R | 290 +++++++++++++++- R/modules_grammar_hpc.R | 20 +- R/tranform_assay.R | 197 +++++------ R/utilities.R | 446 ++++++------------------- man/alive_identification.Rd | 2 +- man/annotation_label_transfer.Rd | 2 +- man/cell_cycle_scoring.Rd | 2 +- man/census_harmonise_anndata_counts.Rd | 30 -- man/compute_mode_delayedarray.Rd | 47 +++ man/empty_droplet_id.Rd | 4 +- man/empty_droplet_threshold.Rd | 4 +- man/initialise_hpc.Rd | 3 +- man/test_differential_abundance.Rd | 4 +- man/transform_utility.Rd | 2 +- 15 files changed, 572 insertions(+), 494 deletions(-) delete mode 100644 man/census_harmonise_anndata_counts.Rd create mode 100644 man/compute_mode_delayedarray.Rd diff --git a/NAMESPACE b/NAMESPACE index d054d00c..15b26f5d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -10,6 +10,8 @@ S3method(remove_dead_scuttle,HPCell) S3method(remove_doublets_scDblFinder,HPCell) S3method(remove_empty_DropletUtils,HPCell) S3method(remove_empty_DropletUtils,Seurat) +S3method(remove_empty_threshold,HPCell) +S3method(remove_empty_threshold,Seurat) S3method(score_cell_cycle_seurat,HPCell) S3method(tranform_assay,HPCell) export(alive_identification) @@ -17,8 +19,8 @@ export(annotate_cell_type) export(annotation_label_transfer) export(calculate_pseudobulk) export(cell_cycle_scoring) -export(census_harmonise_anndata_counts) export(clean_cellxgene_cell_types) +export(compute_mode_delayedarray) export(convert_gene_names) export(create_pseudobulk) export(delete_lines_with_word) @@ -60,8 +62,7 @@ export(reference_label_fine_id) export(remove_dead_scuttle) export(remove_doublets_scDblFinder) export(remove_empty_DropletUtils) -export(remove_empty_threshold.HPCell) -export(remove_empty_threshold.Seurat) +export(remove_empty_threshold) export(run_targets_pipeline) export(save_experiment_data) export(score_cell_cycle_seurat) @@ -73,6 +74,7 @@ export(tranform_assay) export(transform_utility) export(vector_to_code) exportMethods(test_differential_abundance) +import(DelayedArray) import(Seurat) import(SeuratObject) import(broom) @@ -91,6 +93,7 @@ import(tidySummarizedExperiment) import(tidyseurat) importFrom(AnnotationDbi,mapIds) importFrom(Azimuth,RunAzimuth) +importFrom(DelayedArray,blockApply) importFrom(DropletUtils,barcodeRanks) importFrom(DropletUtils,emptyDrops) importFrom(EnsDb.Hsapiens.v86,EnsDb.Hsapiens.v86) @@ -122,6 +125,7 @@ importFrom(Seurat,as.Seurat) importFrom(Seurat,as.SingleCellExperiment) importFrom(SeuratObject,RenameAssays) importFrom(SingleCellExperiment,"altExp<-") +importFrom(SingleCellExperiment,"reducedDim<-") importFrom(SingleCellExperiment,SingleCellExperiment) importFrom(SingleCellExperiment,altExp) importFrom(SingleR,SingleR) @@ -172,6 +176,7 @@ importFrom(magrittr,divide_by) importFrom(magrittr,extract2) importFrom(magrittr,not) importFrom(magrittr,set_names) +importFrom(methods,as) importFrom(methods,show) importFrom(purrr,compact) importFrom(purrr,imap) @@ -192,6 +197,7 @@ importFrom(scater,isOutlier) importFrom(scuttle,logNormCounts) importFrom(scuttle,perCellQCMetrics) importFrom(stats,as.formula) +importFrom(stats,density) importFrom(stats,model.matrix) importFrom(stats,terms) importFrom(stats,update) @@ -224,4 +230,5 @@ importFrom(tidyr,unite) importFrom(tidyr,unnest) importFrom(tidyselect,all_of) importFrom(tidyseurat,aggregate_cells) +importFrom(utils,capture.output) importMethodsFrom(ensembldb,genes) diff --git a/R/functions.R b/R/functions.R index 62543c8a..e7805e5f 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1,6 +1,276 @@ ## quiets concerns of R CMD check re: the .'s that appear in pipelines if(getRversion() >= "2.15.1") utils::globalVariables(c(".")) +#' Identify Empty Droplets in Single-Cell RNA-seq Data +#' +#' @description +#' `empty_droplet_id` distinguishes between empty and non-empty droplets using the DropletUtils package. +#' It excludes mitochondrial and ribosomal genes, calculates barcode ranks, and optionally filters input data +#' based on these criteria. The function returns a tibble containing log probabilities, FDR, and a classification +#' indicating whether cells are empty droplets. +#' +#' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. +#' @param filter_empty_droplets Logical value indicating whether to filter the input data. +#' +#' @return A tibble with columns: logProb, FDR, empty_droplet (classification of droplets). +#' +#' @importFrom AnnotationDbi mapIds +#' @importFrom stringr str_subset +#' @importFrom dplyr left_join mutate +#' @importFrom tidyr replace_na +#' @importFrom DropletUtils emptyDrops barcodeRanks +#' @importFrom S4Vectors metadata +#' @importFrom EnsDb.Hsapiens.v86 EnsDb.Hsapiens.v86 +#' @importFrom biomaRt useMart getBM +#' +#' @export +empty_droplet_id <- function(input_read_RNA_assay, + total_RNA_count_check = -Inf, + assay = NULL, + feature_nomenclature){ + + if(input_read_RNA_assay |> is.null()) return(NULL) + if(ncol(input_read_RNA_assay) == 0) return(NULL) + + #Fix GChecks + FDR = NULL + .cell = NULL + + # Get assay + if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) + + # Get counts + if (inherits(input_read_RNA_assay, "Seurat")) { + counts <- GetAssayData(input_read_RNA_assay, assay, slot = "counts") + } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { + counts <- assay(input_read_RNA_assay, assay) + } + + + significance_threshold = 0.001 + + # Genes to exclude + if (feature_nomenclature == "symbol") { + location <- mapIds( + EnsDb.Hsapiens.v86, + keys=rownames(input_read_RNA_assay), + column="SEQNAME", + keytype="SYMBOL" + ) + mitochondrial_genes = which(location=="MT") |> names() + ribosome_genes = rownames(input_read_RNA_assay) |> str_subset("^RPS|^RPL") + + } else if (feature_nomenclature == "ensembl") { + # all_genes are saved in data/all_genes.rda to avoid recursively accessing biomaRt backend for potential timeout error + data(ensembl_genes_biomart) + all_mitochondrial_genes <- ensembl_genes_biomart[grep("MT", ensembl_genes_biomart$chromosome_name), ] + all_ribosome_genes <- ensembl_genes_biomart[grep("^(RPL|RPS)", ensembl_genes_biomart$external_gene_name), ] + mitochondrial_genes <- all_mitochondrial_genes |> + filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) + ribosome_genes <- all_ribosome_genes |> + filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) + } + + + # if ("originalexp" %in% names(input_file@assays)) { + # barcode_ranks <- barcodeRanks(input_file@assays$originalexp@counts[!rownames(input_file@assays$originalexp@counts) %in% c(mitochondrial_genes, ribosome_genes),, drop=FALSE]) + # } else if ("RNA" %in% names(input_file@assays)) { + # barcode_ranks <- barcodeRanks(input_file@assays$RNA@counts[!rownames(input_file@assays$RNA@counts) %in% c(mitochondrial_genes, ribosome_genes),, drop=FALSE]) + # } + + + filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] + + n_expressed_genes_non_zero = (filtered_counts > 0) |> colSums() + + filter_empty_droplets = n_expressed_genes_non_zero |> min() < 200 + + if(!filter_empty_droplets) + return( input_read_RNA_assay |> + as_tibble() |> + select(.cell) |> + mutate( empty_droplet = FALSE)) + + quantile_expressed_genes = n_expressed_genes_non_zero |> quantile(0.05) + + # Check if empty droplets have been identified + # nFeature_name <- paste0("nFeature_", assay) + + #if (any(input_read_RNA_assay[[nFeature_name]] < total_RNA_count_check)) { + # filter_empty_droplets <- "TRUE" + # } + # else { + # filter_empty_droplets <- "FALSE" + # } + + # Attempt to run emptyDrops() and handle potential errors + tryCatch({ + # WE CANNOT USE AMBIENT PARAMETER BECAUSE WITH PERCULIAR DATASETS WITH + # cells with more zeros have also more total RNA counts dysfunction stalls + # for example for this sample + #.cell dataset_id sample_id + #AAACCCAAGCTAATCC___eec804b9-2ae5-44f0-a1b5-d721e21257de eec804b9-2ae5-44f0-a1b5-d721e21257de 485c0dac47c6bd0b91fd3ae9d7de7385 + + emptyDrops(filtered_counts) |> + as_tibble(rownames = ".cell") |> + mutate(empty_droplet = FDR >= significance_threshold) |> + replace_na(list(empty_droplet = TRUE)) |> + mutate(filter_empty_method = "emptyDrops") + + }, error = function(e) { + # Check if the error message matches the specific error + if (grepl("no counts available to estimate the ambient profile", e$message)) { + # You can also print a message if you like + message("Error encountered: ", e$message) + message("Setting do_filter to FALSE.") + + # Return NULL or an empty object as appropriate + input_read_RNA_assay |> + as_tibble() |> + select(.cell) |> + mutate( empty_droplet = n_expressed_genes_non_zero < 200) |> + mutate(filter_empty_method = "expressed_genes_more_than_200") + } else { + # For other errors, re-throw the error + stop(e) + } + }) + + + # barcode ranks + # Calculate bar-codes ranks + # barcode_ranks <- barcodeRanks(filtered_counts) + # + # barcode_table <- barcode_table |> + # left_join( + # barcode_ranks |> + # as_tibble(rownames = ".cell") |> + # mutate( + # knee = metadata(barcode_ranks)$knee, + # inflection = metadata(barcode_ranks)$inflection + # ) + # ) + + + # barcode_table |> saveRDS(output_path_result) + + # # Plot bar-codes ranks + # plot_barcode_ranks = + # barcode_table %>% + # ggplot2::ggplot(aes(rank, total)) + + # geom_point(aes(color = empty_droplet, size = empty_droplet )) + + # geom_line(aes(rank, fitted), color="purple") + + # geom_hline(aes(yintercept = knee), color="dodgerblue") + + # geom_hline(aes(yintercept = inflection), color="forestgreen") + + # scale_x_log10() + + # scale_y_log10() + + # scale_color_manual(values = c("black", "#e11f28")) + + # scale_size_discrete(range = c(0, 2)) + + # theme_bw() + + # plot_barcode_ranks |> saveRDS(output_path_plot_rds) + + # ggsave( + # output_path_plot_pdf, + # plot = plot_barcode_ranks, + # useDingbats=FALSE, + # units = c("mm"), + # width = 183/2 , + # height = 183/2, + # limitsize = FALSE + # ) + +} + +#' Identify Empty Droplets in Single-Cell RNA-seq Data +#' +#' @description +#' `empty_droplet_threshold` distinguishes between empty and non-empty droplets by threshold. +#' It excludes mitochondrial and ribosomal genes, and filters input data +#' based on defined values of `nCount_RNA` and `nFeature_RNA` +#' The function returns a tibble containing RNA count, RNA feature count indicating whether cells are empty droplets. +#' +#' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. +#' @param filter_empty_droplets Logical value indicating whether to filter the input data. +#' @param RNA_feature_threshold An optional integer for the number of feature count. Default is 200 +#' +#' @return A tibble with columns: Cell, nFeature_RNA, empty_droplet (classification of droplets). +#' +#' @importFrom AnnotationDbi mapIds +#' @importFrom stringr str_subset +#' @importFrom dplyr left_join mutate +#' @importFrom tidyr replace_na +#' @importFrom DropletUtils emptyDrops barcodeRanks +#' @importFrom S4Vectors metadata +#' @importFrom EnsDb.Hsapiens.v86 EnsDb.Hsapiens.v86 +#' @importFrom biomaRt useMart getBM +#' +#' @export +empty_droplet_threshold<- function(input_read_RNA_assay, + total_RNA_count_check = -Inf, + assay = NULL, + feature_nomenclature, + RNA_feature_threshold = 200){ + if(input_read_RNA_assay |> is.null()) return(NULL) + if(ncol(input_read_RNA_assay) == 0) return(NULL) + + #Fix GChecks + FDR = NULL + .cell = NULL + + # Get assay + if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) + + # Check if empty droplets have been identified + nFeature_name <- paste0("nFeature_", assay) + + filter_empty_droplets <- "TRUE" + + significance_threshold = 0.001 + # Genes to exclude + if (feature_nomenclature == "symbol") { + location <- mapIds( + EnsDb.Hsapiens.v86, + keys=rownames(input_read_RNA_assay), + column="SEQNAME", + keytype="SYMBOL" + ) + mitochondrial_genes = which(location=="MT") |> names() + ribosome_genes = rownames(input_read_RNA_assay) |> str_subset("^RPS|^RPL") + + } else if (feature_nomenclature == "ensembl") { + # all_genes are saved in data/all_genes.rda to avoid recursively accessing biomaRt backend for potential timeout error + data(ensembl_genes_biomart) + all_mitochondrial_genes <- ensembl_genes_biomart[grep("MT", ensembl_genes_biomart$chromosome_name), ] + all_ribosome_genes <- ensembl_genes_biomart[grep("^(RPL|RPS)", ensembl_genes_biomart$external_gene_name), ] + + mitochondrial_genes <- all_mitochondrial_genes |> + filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) + ribosome_genes <- all_ribosome_genes |> + filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) + } + + # Get counts + if (inherits(input_read_RNA_assay, "Seurat")) { + counts <- GetAssayData(input_read_RNA_assay, assay, slot = "counts") + } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { + counts <- assay(input_read_RNA_assay, assay) + } + filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] + + # filter based on nCount_RNA and nFeature_RNA + result <- colSums(filtered_counts > 0 ) |> enframe(name = ".cell", value = "nFeature_RNA") |> + #left_join(colSums(filtered_counts) |> enframe(name = ".cell", value = "nCount_RNA"), by = ".cell") |> + mutate(empty_droplet = nFeature_RNA < RNA_feature_threshold) + + # Discard samples with nFeature_RNA density mode < threshold, avoid potential downstream error + density_est = result |> pull(nFeature_RNA) |> density() + density_value = density_est$x[which.max(density_est$y)] + if (density_value < RNA_feature_threshold) return(NULL) + + result +} + #' Cell Type Annotation Transfer #' #' @description @@ -35,7 +305,7 @@ if(getRversion() >= "2.15.1") utils::globalVariables(c(".")) #' @importFrom dplyr left_join #' @importFrom dplyr filter #' @importFrom magrittr extract2 -#' @importFrom SummarizedExperiment assay +#' @importFrom SummarizedExperiment assay #' @importFrom SummarizedExperiment assay<- #' @importFrom Azimuth RunAzimuth #' @import Seurat @@ -45,7 +315,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, empty_droplets_tbl = NULL, reference_azimuth = NULL, assay = NULL, - gene_nomenclature + feature_nomenclature ){ # Fix github checks empty_droplet = NULL @@ -53,6 +323,8 @@ annotation_label_transfer <- function(input_read_RNA_assay, delta.next = NULL .cell = NULL + if(input_read_RNA_assay |> is.null()) return(NULL) + if(ncol(input_read_RNA_assay) == 0) return(NULL) # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) @@ -84,7 +356,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, } blueprint <- celldex::BlueprintEncodeData( - ensembl = gene_nomenclature == "ensembl" + ensembl = feature_nomenclature == "ensembl" #legacy = TRUE ) @@ -119,7 +391,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, gc() MonacoImmuneData <- celldex::MonacoImmuneData( - ensembl = gene_nomenclature == "ensembl" + ensembl = feature_nomenclature == "ensembl" #legacy = TRUE ) @@ -277,7 +549,7 @@ alive_identification <- function(input_read_RNA_assay, annotation_label_transfer_tbl = NULL, annotation_column = NULL, assay = NULL, - gene_nomenclature) { + feature_nomenclature) { # Fix GCHECK notes empty_droplet = NULL @@ -330,7 +602,7 @@ alive_identification <- function(input_read_RNA_assay, # Returns a named vector of IDs # Matches the gene id’s row by row and inserts NA when it can’t find gene names - if (gene_nomenclature == "symbol") { + if (feature_nomenclature == "symbol") { location <- mapIds( EnsDb.Hsapiens.v86, keys=rownames(input_read_RNA_assay), @@ -583,7 +855,7 @@ doublet_identification <- function(input_read_RNA_assay, #' @export cell_cycle_scoring <- function(input_read_RNA_assay, empty_droplets_tbl = NULL, - gene_nomenclature, + feature_nomenclature, assay = NULL){ #Fix GCHECK empty_droplet = NULL @@ -609,14 +881,14 @@ cell_cycle_scoring <- function(input_read_RNA_assay, new.assay.name = assay) } - if (gene_nomenclature == "ensembl") { + if (feature_nomenclature == "ensembl") { s.features_tidy = Seurat::cc.genes$s.genes |> convert_gene_names(current_nomenclature = "symbol") |> filter(stringr::str_detect(gene_id, "ENSG*")) |> dplyr::pull(gene_id) g2m.features_tidy = Seurat::cc.genes$g2m.genes |> convert_gene_names(current_nomenclature = "symbol") |> filter(stringr::str_detect(gene_id, "ENSG*")) |> dplyr::pull(gene_id) - } else if (gene_nomenclature == "symbol") { + } else if (feature_nomenclature == "symbol") { s.features_tidy = Seurat::cc.genes$s.genes g2m.features_tidy = Seurat::cc.genes$g2m.genes } diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 1131c0a9..07543814 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -49,7 +49,8 @@ initialise_hpc <- function(input_hpc, data_container_type, verbosity = targets::tar_config_get("reporter_make"), error = NULL, - update = "thorough" + update = "thorough", + garbage_collection = 0 ) { # Capture all arguments including defaults @@ -88,7 +89,7 @@ initialise_hpc <- function(input_hpc, tar_option_set( memory = "transient", - #garbage_collection = TRUE, + garbage_collection = g, storage = "worker", retrieval = "worker", error = e, @@ -103,7 +104,7 @@ initialise_hpc <- function(input_hpc, target_list = list( ) } |> - substitute(env = list(d = debug_step, e = error, u = update)) |> + substitute(env = list(d = debug_step, e = error, u = update, g = garbage_collection)) |> tar_script_append2(script = glue("{store}.R"), append = FALSE) @@ -199,12 +200,13 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N user_function = empty_droplet_id |> quote() , input_read_RNA_assay = target_input |> is_target(), total_RNA_count_check = total_RNA_count_check, - gene_nomenclacture = input$initialisation$gene_nomenclacture + feature_nomenclature = "gene_nomenclature" |> is_target() ) } -emove_empty_threshold <- function(input_hpc, RNA_feature_threshold = NULL, target_input = "data_object", target_output = "empty_tbl", ...) { +#' @export +remove_empty_threshold <- function(input_hpc, RNA_feature_threshold = NULL, target_input = "data_object", target_output = "empty_tbl", ...) { UseMethod("remove_empty_threshold") } @@ -231,7 +233,7 @@ remove_empty_threshold.HPCell = function(input_hpc, RNA_feature_threshold = NULL user_function = empty_droplet_threshold |> quote() , input_read_RNA_assay = target_input |> is_target(), RNA_feature_threshold = RNA_feature_threshold, - gene_nomenclature = input_hpc$initialisation$gene_nomenclature + feature_nomenclature = "gene_nomenclature" |> is_target() ) @@ -277,7 +279,7 @@ remove_dead_scuttle.HPCell = function( empty_droplets_tbl = target_empty_droplets |> safe_as_name() , annotation_label_transfer_tbl = target_annotation |> safe_as_name() , annotation_column = group_by, - gene_nomenclature = input_hpc$initialisation$gene_nomenclature + feature_nomenclature = "gene_nomenclature" |> is_target() ) } @@ -298,7 +300,7 @@ score_cell_cycle_seurat.HPCell = function(input_hpc, target_input = "data_object user_function = cell_cycle_scoring |> quote() , input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = "empty_tbl" |> is_target() , - gene_nomenclature = input_hpc$initialisation$gene_nomenclature + feature_nomenclature = "gene_nomenclature" |> is_target() ) } @@ -355,7 +357,7 @@ annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL, target input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = "empty_tbl" |> is_target() , reference_azimuth = reference_read |> quote(), - gene_nomenclature = input_hpc$initialisation$gene_nomenclature + feature_nomenclature = "gene_nomenclature" |> is_target() ) } diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 91cbff92..ba47aa6a 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -36,46 +36,80 @@ tranform_assay.HPCell = function( hpc_iterate( target_output = target_output, user_function = transform_utility |> quote() , - input_read_RNA_assay = "target_input" |> is_target(), + input_read_RNA_assay = "data_object" |> is_target(), transform_fx = "transform" |> is_target() , external_path = glue("{input_hpc$initialisation$store}/external") |> as.character(), - data_container_type = input_hpc$initialisation$data_container_type + container_type = "data_container_type" |> is_target() ) } -#' Harmonize Counts Data in a SingleCellExperiment Object +#' Apply a transformation to an assay and save as HDF5 #' -#' This function harmonizes the counts data in a \code{SingleCellExperiment} object by adjusting negative values, -#' scaling counts to avoid downstream failures, applying a transformation method, and removing cells with zero counts. +#' This function applies a specified transformation to the assay of a +#' SummarizedExperiment object and saves the transformed object in HDF5 format. #' -#' @param data A \code{SingleCellExperiment} object containing assays with counts data. -#' @param transform_method A function or the name of a function (as a character string) to transform the counts data (e.g., \code{"log1p"}, \code{"exp"}). +#' @param input_read_RNA_assay A SummarizedExperiment object to be transformed. +#' @param transform_fx A function to apply to the assay of the SummarizedExperiment object. +#' @param external_path A character string specifying the directory path to save the transformed object. +#' @param data_container_type A character vector specifying the output file type. Ideally it should match to the input file type. +#' @return The function does not return an object. It saves the transformed SummarizedExperiment object to the specified path. #' -#' @return The modified \code{SingleCellExperiment} object with harmonized counts. -#' @examples -#' \dontrun{ -#' library(SingleCellExperiment) -#' # Using a function object -#' transformed_sce <- census_harmonise_anndata_counts(sce, log1p) -#' # Using a function name as a character string -#' transformed_sce <- census_harmonise_anndata_counts(sce, "exp") -#' } +#' @importFrom SummarizedExperiment assay +#' @importFrom SummarizedExperiment assay<- +#' @importFrom SummarizedExperiment assays +#' @importFrom SummarizedExperiment rowData +#' @importFrom SummarizedExperiment rowData<- +#' @importFrom SingleCellExperiment reducedDim<- +#' @importFrom dplyr select +#' @importFrom glue glue +#' @importFrom digest digest +#' @importFrom stats density +#' @importFrom stats which.max #' #' @export -census_harmonise_anndata_counts <- function(data, transform_method) { +transform_utility = function(input_read_RNA_assay, transform_fx, external_path, container_type) { + + numer_of_cells_to_sample = 5e3 + + if(ncol(input_read_RNA_assay) == 0) return(NULL) + + # strip metadata that we don't need + input_read_RNA_assay = + input_read_RNA_assay |> + select(.cell, observation_joinid, observation_originalid, donor_id, dataset_id, sample_id, cell_type) + + # Remove reduced dimensions + reducedDim(input_read_RNA_assay) = NULL + + # Remove row data to avoid downstream binding errors + rowData(input_read_RNA_assay) <- NULL + + # Clear memory + gc() + + dir.create(external_path, showWarnings = FALSE, recursive = TRUE) + # Convert transform_method to a function if it is a character string - transform_function <- match.fun(transform_method) + transform_function <- match.fun(transform_fx) # Get the name of the first assay in the data object - assay_name <- names(assays(data))[1] + assay_name <- names(assays(input_read_RNA_assay))[1] # Extract the counts matrix from the assay - counts <- assay(data, assay_name) + counts <- assay(input_read_RNA_assay, assay_name) + + # This is to avoid memory explosion + set.seed(42) + counts_light_for_checks = counts[,sample(seq_len(ncol(counts)), size = min(numer_of_cells_to_sample, ncol(counts))),drop=FALSE] + + # Compute the density estimate of the counts. This needs ~13Gb to run for 5000+ cell datasets - # Compute the density estimate of the counts - density_est <- density(as.matrix(counts)) + density_est <- counts_light_for_checks |> as.matrix() |> density() + + # Clear memory + gc() # Find the mode (peak) value of the counts mode_value <- density_est$x[which.max(density_est$y)] @@ -85,12 +119,17 @@ census_harmonise_anndata_counts <- function(data, transform_method) { counts <- counts + abs(mode_value) } - # Scale counts to a maximum of 20 to avoid downstream failures + # Scale counts to a maximum of 20 to avoid downstream failures. + # This Check needs ~13Gb to run for 5000+ cell datasets # Check if the transformation method is not 'identity' and counts exceed 20 - if (!identical(transform_function, identity) && (max(counts) > 20)) { + if (!identical(transform_function, identity) ) { + if(max(counts) > 20){ scale_factor <- 20 / max(counts) counts <- counts * scale_factor - } + }} + + # Clear memory + gc() # Apply the transformation method to counts counts <- transform_function(counts) @@ -99,7 +138,7 @@ census_harmonise_anndata_counts <- function(data, transform_method) { counts <- round(counts, 5) # Find the most frequent count value (mode) in the counts - majority_gene_counts <- as.numeric(names(which.max(table(as.vector(counts))))) + majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks)$mode # Subtract the mode value from counts if it is not zero if (majority_gene_counts != 0) { @@ -107,88 +146,56 @@ census_harmonise_anndata_counts <- function(data, transform_method) { } # Replace negative counts with zero to avoid downstream failures - if (min(counts[, seq_len(min(10000, ncol(counts)))]) < 0) { + if (min(counts_light_for_checks) < 0) { counts[counts < 0] <- 0 } - # Assign the modified counts back to the data object - assay(data, assay_name) <- counts + # Clear memory + gc() - # Calculate the column sums (total counts per cell) - col_sums <- colSums(counts) + # Assign the modified counts back to the data object + assay(input_read_RNA_assay, assay_name) <- counts # Remove cells with zero total counts - data <- data[, col_sums > 0] + input_read_RNA_assay <- input_read_RNA_assay[, colSums(counts) > 0] - # Remove row data to avoid downstream binding errors - rowData(data) <- NULL + if (ncol(input_read_RNA_assay) == 0) return(NULL) # Return the modified data object - data -} - -#' Apply a transformation to an assay and save as HDF5 -#' -#' This function applies a specified transformation to the assay of a -#' SummarizedExperiment object and saves the transformed object in HDF5 format. -#' -#' @param input_read_RNA_assay A SummarizedExperiment object to be transformed. -#' @param transform_fx A function to apply to the assay of the SummarizedExperiment object. -#' @param external_path A character string specifying the directory path to save the transformed object. -#' @param data_container_type A character vector specifying the output file type. Ideally it should match to the input file type. -#' @return The function does not return an object. It saves the transformed SummarizedExperiment object to the specified path. -#' -#' @importFrom SummarizedExperiment assay assay<- -#' @importFrom glue glue -#' @importFrom tools digest -#' @importFrom HDF5Array saveHDF5SummarizedExperiment -#' -#' @export -transform_utility = function(input_read_RNA_assay, transform_fx, external_path, data_container_type) { - - #input_read_RNA_assay = input_read_RNA_assay |> read_data_container(container_type = data_container_type) - - dir.create(external_path, showWarnings = FALSE, recursive = TRUE) - - file_name = glue("{external_path}/{digest(input_read_RNA_assay)}") - - if (length(colnames(input_read_RNA_assay)) == 0) return(NULL) - - input_read_RNA_assay = input_read_RNA_assay |> census_harmonise_anndata_counts(transform_fx) - input_read_RNA_assay |> - save_experiment_data(dir = file_name, - - container_type = data_container_type ) - - extension <- switch(data_container_type, - - "sce_rds" = ".rds", - - "seurat_rds" = ".rds", - - "seurat_h5" = ".h5Seurat", - - "anndata" = ".h5ad", - - "sce_hdf5" = "") - - file_name = paste0(file_name, extension) - - # Return data as target instead of file_name pointer + save_experiment_data( + dir = glue("{external_path}/{digest(input_read_RNA_assay)}"), + container_type = container_type + ) - input_read_RNA_assay - + # extension <- switch(container_type, + # + # "sce_rds" = ".rds", + # "seurat_rds" = ".rds", + # + # "seurat_h5" = ".h5Seurat", + # + # "anndata" = ".h5ad", + # + # "sce_hdf5" = "") + + # file_name = paste0(file_name, extension) + # + # # Return data as target instead of file_name pointer + # + # input_read_RNA_assay + # + # + # extension <- switch(container_type, + # "sce_rds" = ".rds", + # "seurat_rds" = ".rds", + # "seurat_h5" = ".h5Seurat", + # "anndata" = ".h5ad", + # "sce_hdf5" = "") + # file_name = paste0(file_name, extension) - extension <- switch(data_container_type, - "sce_rds" = ".rds", - "seurat_rds" = ".rds", - "seurat_h5" = ".h5Seurat", - "anndata" = ".h5ad", - "sce_hdf5" = "") - file_name = paste0(file_name, extension) # Return data as target instead of file_name pointer - input_read_RNA_assay + } diff --git a/R/utilities.R b/R/utilities.R index f6fd92f1..4e3837c3 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -76,11 +76,12 @@ save_experiment_data <- function(data, } switch(container_type, - "anndata" = zellkonverter::writeH5AD(data, - paste0(dir, ".h5ad"), - compression = "gzip"), - "sce_rds" = saveRDS(data, paste0(dir, ".rds")), - "seurat_rds" = saveRDS(data, paste0(dir, ".rds")), + "anndata" = { + zellkonverter::writeH5AD(data, paste0(dir, ".h5ad"), compression = "gzip") + read_data_container(paste0(dir, ".h5ad"), "anndata") + }, + "sce_rds" = data, + "seurat_rds" = data, "sce_hdf5" = saveHDF5SummarizedExperiment(data, dir, replace = TRUE, @@ -134,336 +135,10 @@ get_count_per_gene_df <- function(counts) { counts_tidy } -#' Identify Empty Droplets in Single-Cell RNA-seq Data -#' -#' @description -#' `empty_droplet_threshold` distinguishes between empty and non-empty droplets by threshold. -#' It excludes mitochondrial and ribosomal genes, and filters input data -#' based on defined values of `nCount_RNA` and `nFeature_RNA` -#' The function returns a tibble containing RNA count, RNA feature count indicating whether cells are empty droplets. -#' -#' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. -#' @param filter_empty_droplets Logical value indicating whether to filter the input data. -#' @param RNA_feature_threshold An optional integer for the number of feature count. Default is 200 -#' -#' @return A tibble with columns: Cell, nFeature_RNA, empty_droplet (classification of droplets). -#' -#' @importFrom AnnotationDbi mapIds -#' @importFrom stringr str_subset -#' @importFrom dplyr left_join mutate -#' @importFrom tidyr replace_na -#' @importFrom DropletUtils emptyDrops barcodeRanks -#' @importFrom S4Vectors metadata -#' @importFrom EnsDb.Hsapiens.v86 EnsDb.Hsapiens.v86 -#' @importFrom biomaRt useMart getBM -#' -#' @export -empty_droplet_threshold<- function(input_read_RNA_assay, - total_RNA_count_check = -Inf, - assay = NULL, - gene_nomenclature, - RNA_feature_threshold = 200){ - #Fix GChecks - FDR = NULL - .cell = NULL - - # Get assay - if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - - # Check if empty droplets have been identified - nFeature_name <- paste0("nFeature_", assay) - - filter_empty_droplets <- "TRUE" - - significance_threshold = 0.001 - # Genes to exclude - if (gene_nomenclature == "symbol") { - location <- mapIds( - EnsDb.Hsapiens.v86, - keys=rownames(input_read_RNA_assay), - column="SEQNAME", - keytype="SYMBOL" - ) - mitochondrial_genes = which(location=="MT") |> names() - ribosome_genes = rownames(input_read_RNA_assay) |> str_subset("^RPS|^RPL") - - } else if (gene_nomenclature == "ensembl") { - # all_genes are saved in data/all_genes.rda to avoid recursively accessing biomaRt backend for potential timeout error - data(ensembl_genes_biomart) - all_mitochondrial_genes <- ensembl_genes_biomart[grep("MT", ensembl_genes_biomart$chromosome_name), ] - all_ribosome_genes <- ensembl_genes_biomart[grep("^(RPL|RPS)", ensembl_genes_biomart$external_gene_name), ] - - mitochondrial_genes <- all_mitochondrial_genes |> - filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) - ribosome_genes <- all_ribosome_genes |> - filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) - } - - # Get counts - if (inherits(input_read_RNA_assay, "Seurat")) { - counts <- GetAssayData(input_read_RNA_assay, assay, slot = "counts") - } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - counts <- assay(input_read_RNA_assay, assay) - } - filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] - - # filter based on nCount_RNA and nFeature_RNA - result <- colSums(filtered_counts > 0 ) |> enframe(name = ".cell", value = "nFeature_RNA") |> - #left_join(colSums(filtered_counts) |> enframe(name = ".cell", value = "nCount_RNA"), by = ".cell") |> - mutate(empty_droplet = nFeature_RNA < RNA_feature_threshold) - - # Discard samples with nFeature_RNA density mode < threshold, avoid potential downstream error - density_est = result |> pull(nFeature_RNA) |> density() - density_value = density_est$x[which.max(density_est$y)] - if (density_value < RNA_feature_threshold) return(NULL) - - result -} -#' Identify Empty Droplets in Single-Cell RNA-seq Data -#' -#' @description -#' `empty_droplet_id` distinguishes between empty and non-empty droplets using the DropletUtils package. -#' It excludes mitochondrial and ribosomal genes, calculates barcode ranks, and optionally filters input data -#' based on these criteria. The function returns a tibble containing log probabilities, FDR, and a classification -#' indicating whether cells are empty droplets. -#' -#' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. -#' @param filter_empty_droplets Logical value indicating whether to filter the input data. -#' -#' @return A tibble with columns: logProb, FDR, empty_droplet (classification of droplets). -#' -#' @importFrom AnnotationDbi mapIds -#' @importFrom stringr str_subset -#' @importFrom dplyr left_join mutate -#' @importFrom tidyr replace_na -#' @importFrom DropletUtils emptyDrops barcodeRanks -#' @importFrom S4Vectors metadata -#' @importFrom EnsDb.Hsapiens.v86 EnsDb.Hsapiens.v86 -#' @importFrom biomaRt useMart getBM -#' -#' @export -empty_droplet_id <- function(input_read_RNA_assay, - total_RNA_count_check = -Inf, - assay = NULL, - gene_nomenclature){ - #Fix GChecks - FDR = NULL - .cell = NULL - - # Get assay - if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - - # Check if empty droplets have been identified - nFeature_name <- paste0("nFeature_", assay) - - #if (any(input_read_RNA_assay[[nFeature_name]] < total_RNA_count_check)) { - filter_empty_droplets <- "TRUE" - # } - # else { - # filter_empty_droplets <- "FALSE" - # } - - significance_threshold = 0.001 - # Genes to exclude - if (gene_nomenclature == "symbol") { - location <- mapIds( - EnsDb.Hsapiens.v86, - keys=rownames(input_read_RNA_assay), - column="SEQNAME", - keytype="SYMBOL" - ) - mitochondrial_genes = which(location=="MT") |> names() - ribosome_genes = rownames(input_read_RNA_assay) |> str_subset("^RPS|^RPL") - - } else if (gene_nomenclature == "ensembl") { - # all_genes are saved in data/all_genes.rda to avoid recursively accessing biomaRt backend for potential timeout error - data(ensembl_genes_biomart) - all_mitochondrial_genes <- ensembl_genes_biomart[grep("MT", ensembl_genes_biomart$chromosome_name), ] - all_ribosome_genes <- ensembl_genes_biomart[grep("^(RPL|RPS)", ensembl_genes_biomart$external_gene_name), ] - - mitochondrial_genes <- all_mitochondrial_genes |> - filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) - ribosome_genes <- all_ribosome_genes |> - filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) - } - - # if ("originalexp" %in% names(input_file@assays)) { - # barcode_ranks <- barcodeRanks(input_file@assays$originalexp@counts[!rownames(input_file@assays$originalexp@counts) %in% c(mitochondrial_genes, ribosome_genes),, drop=FALSE]) - # } else if ("RNA" %in% names(input_file@assays)) { - # barcode_ranks <- barcodeRanks(input_file@assays$RNA@counts[!rownames(input_file@assays$RNA@counts) %in% c(mitochondrial_genes, ribosome_genes),, drop=FALSE]) - # } - - # Get counts - if (inherits(input_read_RNA_assay, "Seurat")) { - counts <- GetAssayData(input_read_RNA_assay, assay, slot = "counts") - } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - counts <- assay(input_read_RNA_assay, assay) - } - filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] - - # Calculate bar-codes ranks - barcode_ranks <- barcodeRanks(filtered_counts) - # Set the minimum total RNA per cell for ambient RNA - if(min(barcode_ranks$total) < 100) { lower = 100 } else { - lower = quantile(barcode_ranks$total, 0.05) - # write_lines( - # glue("{input_path} has supposely empty droplets with a lot of RNAm maybe a lot of ambient RNA? Please investigate"), - # file = glue("{dirname(output_path_result)}/warnings_emptyDrops.txt"), - # append = T - # ) - } - - # Remove genes from input - if ( - # If filter_empty_droplets - filter_empty_droplets == "TRUE") { - barcode_table <- filtered_counts |> - emptyDrops( test.ambient = TRUE, lower=lower) |> - as_tibble(rownames = ".cell") |> - mutate(empty_droplet = FDR >= significance_threshold) |> - replace_na(list(empty_droplet = TRUE)) - } - else { - barcode_table <- - input_read_RNA_assay |> - as_tibble() |> - select(.cell) |> - mutate( empty_droplet = FALSE) - } - - # barcode ranks - # barcode_table <- barcode_table |> - # left_join( - # barcode_ranks |> - # as_tibble(rownames = ".cell") |> - # mutate( - # knee = metadata(barcode_ranks)$knee, - # inflection = metadata(barcode_ranks)$inflection - # ) - # ) - - - # barcode_table |> saveRDS(output_path_result) - - # # Plot bar-codes ranks - # plot_barcode_ranks = - # barcode_table %>% - # ggplot2::ggplot(aes(rank, total)) + - # geom_point(aes(color = empty_droplet, size = empty_droplet )) + - # geom_line(aes(rank, fitted), color="purple") + - # geom_hline(aes(yintercept = knee), color="dodgerblue") + - # geom_hline(aes(yintercept = inflection), color="forestgreen") + - # scale_x_log10() + - # scale_y_log10() + - # scale_color_manual(values = c("black", "#e11f28")) + - # scale_size_discrete(range = c(0, 2)) + - # theme_bw() - - # plot_barcode_ranks |> saveRDS(output_path_plot_rds) - - # ggsave( - # output_path_plot_pdf, - # plot = plot_barcode_ranks, - # useDingbats=FALSE, - # units = c("mm"), - # width = 183/2 , - # height = 183/2, - # limitsize = FALSE - # ) - - barcode_table - # return(list(barcode_table, plot_barcode_ranks)) -} - -#' Identify Empty Droplets in Single-Cell RNA-seq Data -#' -#' @description -#' `empty_droplet_threshold` distinguishes between empty and non-empty droplets by threshold. -#' It excludes mitochondrial and ribosomal genes, and filters input data -#' based on defined values of `nCount_RNA` and `nFeature_RNA` -#' The function returns a tibble containing RNA count, RNA feature count indicating whether cells are empty droplets. -#' -#' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. -#' @param filter_empty_droplets Logical value indicating whether to filter the input data. -#' @param RNA_feature_threshold An optional integer for the number of feature count. Default is 200 -#' -#' @return A tibble with columns: Cell, nFeature_RNA, empty_droplet (classification of droplets). -#' -#' @importFrom AnnotationDbi mapIds -#' @importFrom stringr str_subset -#' @importFrom dplyr left_join mutate -#' @importFrom tidyr replace_na -#' @importFrom DropletUtils emptyDrops barcodeRanks -#' @importFrom S4Vectors metadata -#' @importFrom EnsDb.Hsapiens.v86 EnsDb.Hsapiens.v86 -#' @importFrom biomaRt useMart getBM -#' -#' @export -empty_droplet_threshold<- function(input_read_RNA_assay, - total_RNA_count_check = -Inf, - assay = NULL, - gene_nomenclature, - RNA_feature_threshold = 200){ - #Fix GChecks - FDR = NULL - .cell = NULL - - # Get assay - if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - - # Check if empty droplets have been identified - nFeature_name <- paste0("nFeature_", assay) - - filter_empty_droplets <- "TRUE" - - significance_threshold = 0.001 - # Genes to exclude - if (gene_nomenclature == "symbol") { - location <- mapIds( - EnsDb.Hsapiens.v86, - keys=rownames(input_read_RNA_assay), - column="SEQNAME", - keytype="SYMBOL" - ) - mitochondrial_genes = which(location=="MT") |> names() - ribosome_genes = rownames(input_read_RNA_assay) |> str_subset("^RPS|^RPL") - - } else if (gene_nomenclature == "ensembl") { - # all_genes are saved in data/all_genes.rda to avoid recursively accessing biomaRt backend for potential timeout error - data(ensembl_genes_biomart) - all_mitochondrial_genes <- ensembl_genes_biomart[grep("MT", ensembl_genes_biomart$chromosome_name), ] - all_ribosome_genes <- ensembl_genes_biomart[grep("^(RPL|RPS)", ensembl_genes_biomart$external_gene_name), ] - - mitochondrial_genes <- all_mitochondrial_genes |> - filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) - ribosome_genes <- all_ribosome_genes |> - filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) - } - - # Get counts - if (inherits(input_read_RNA_assay, "Seurat")) { - counts <- GetAssayData(input_read_RNA_assay, assay, slot = "counts") - } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - counts <- assay(input_read_RNA_assay, assay) - } - filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] - - # filter based on nCount_RNA and nFeature_RNA - result <- colSums(filtered_counts > 0 ) |> enframe(name = ".cell", value = "nFeature_RNA") |> - #left_join(colSums(filtered_counts) |> enframe(name = ".cell", value = "nCount_RNA"), by = ".cell") |> - mutate(empty_droplet = nFeature_RNA < RNA_feature_threshold) - - # Discard samples with nFeature_RNA density mode < threshold, avoid potential downstream error - density_est = result |> pull(nFeature_RNA) |> density() - density_value = density_est$x[which.max(density_est$y)] - if (density_value < RNA_feature_threshold) return(NULL) - - result -} #' Reference Label Fine Identification @@ -1453,7 +1128,7 @@ reference_annotation_to_consensus = function(azimuth_input, monaco_input, bluepr blueprint_fine |> str_detect("macrophage") & monaco_fine |> str_detect(" mono") ~ blueprint_fine, # This is because only blueprint has mac M1 M2 blueprint_fine |> str_detect("macrophage") & azimuth_pbmc |> str_detect(" mono") ~ blueprint_fine, # This is because only blueprint has mac M1 M2 - + blueprint_fine %in% myeloid_cells & monaco_fine %in% myeloid_cells ~ "monocytic", blueprint_fine %in% myeloid_cells & azimuth_pbmc %in% myeloid_cells ~ "monocytic", monaco_fine %in% myeloid_cells & azimuth_pbmc %in% myeloid_cells ~ "monocytic", @@ -2677,19 +2352,19 @@ add_missingh_genes_to_se = function(se, all_genes, missing_genes){ rownames(missing_matrix) = missing_genes colnames(missing_matrix) = colnames(se) - + new_se = SummarizedExperiment(assays = list(count = missing_matrix |> DelayedArray::DelayedArray() ), colData = colData(se)) - + empty_rowdata = DataFrame(matrix(NA, ncol = ncol(rowData(se)), nrow = length(missing_genes)), - row.names = missing_genes) + row.names = missing_genes) names(empty_rowdata) <- names(rowData(se)) rowData(new_se) = empty_rowdata se = SummarizedExperiment(assays = assays(se), colData = colData(se), rowData = rowData(se)) se = se |> rbind(new_se) - + se[all_genes,] } @@ -2912,7 +2587,7 @@ check_for_name_value_conflicts <- function(...) { if (is.null(arg_value)) next # Convert the argument value to a character string - # arg_value_as_char <- as.character(arg_value) + arg_value_as_char <- as.character(arg_value) # Check if the argument name matches any of the values in arg_value_as_char if (arg_name %in% c(arg_value)) { @@ -3072,3 +2747,100 @@ write_HDF5_array_safe = function(normalized_rna, name, directory){ ) } + + +#' Compute the Mode of a DelayedArray +#' +#' This function computes the mode (most frequent value) of a \code{DelayedArray} without loading the entire array into memory. It processes the array in blocks to maintain memory efficiency, making it suitable for large datasets. +#' +#' @param delayed_array A \code{DelayedArray} object for which the mode is to be computed. +#' +#' @return A list containing the following elements: +#' \describe{ +#' \item{\code{mode}}{Numeric vector of the most frequent value(s) in the array.} +#' \item{\code{frequency}}{Integer representing the count of the most frequent value(s).} +#' } +#' +#' @details +#' The function utilizes block processing via \code{blockApply()} from the \code{DelayedArray} package to avoid loading the entire array into memory. It computes partial frequency tables for each block and combines them to find the overall mode. +#' +#' @import DelayedArray +#' @importFrom DelayedArray blockApply +#' @importFrom methods as +#' @importFrom stats as.numeric +#' @importFrom utils capture.output +#' +#' @examples +#' \dontrun{ +#' # Load required packages +#' library(DelayedArray) +#' +#' # Create a DelayedArray from an in-memory matrix +#' set.seed(123) +#' n_rows <- 1000 +#' n_cols <- 1000 +#' matrix_data <- matrix(sample(0:5, n_rows * n_cols, replace = TRUE, +#' prob = c(0.5, 0.1, 0.1, 0.1, 0.1, 0.1)), +#' nrow = n_rows) +#' delayed_array <- DelayedArray(matrix_data) +#' +#' # Compute the mode +#' mode_result <- compute_mode_delayedarray(delayed_array) +#' +#' # Output the result +#' cat("Most frequent value(s):", paste(mode_result$mode, collapse = ", "), "\n") +#' cat("Frequency:", mode_result$frequency, "\n") +#' } +#' +#' @export +compute_mode_delayedarray <- function(delayed_array) { + # Compute the mode (most frequent value) of a DelayedArray without loading the entire array into memory. + + # Helper function to compute frequency table for a block + block_table <- function(block) { + counts_vector <- as.vector(block) + counts_table <- table(counts_vector) + return(counts_table) + } + + # Helper function to combine two frequency tables + combine_tables <- function(table1, table2) { + if (length(table1) == 0) return(table2) + if (length(table2) == 0) return(table1) + + # Get all unique values + all_names <- union(names(table1), names(table2)) + + # Align counts for all unique values + counts1 <- as.numeric(table1[all_names]) + counts2 <- as.numeric(table2[all_names]) + + # Replace NA with 0 + counts1[is.na(counts1)] <- 0 + counts2[is.na(counts2)] <- 0 + + # Sum counts + combined_counts <- counts1 + counts2 + names(combined_counts) <- all_names + + return(combined_counts) + } + + # Process the DelayedArray in blocks + block_tables <- blockApply(delayed_array, FUN = block_table) + + # Combine all partial frequency tables into a single table + freq_counts <- Reduce(f = combine_tables, x = block_tables) + + # Find the value(s) with the maximum count + max_count <- max(freq_counts) + most_frequent_values <- as.numeric(names(freq_counts)[freq_counts == max_count]) + + # Return the result as a list + result <- list( + mode = most_frequent_values, + frequency = max_count + ) + + return(result) +} diff --git a/man/alive_identification.Rd b/man/alive_identification.Rd index 8ddb047e..51d67206 100644 --- a/man/alive_identification.Rd +++ b/man/alive_identification.Rd @@ -10,7 +10,7 @@ alive_identification( annotation_label_transfer_tbl = NULL, annotation_column = NULL, assay = NULL, - gene_nomenclature + feature_nomenclature ) } \arguments{ diff --git a/man/annotation_label_transfer.Rd b/man/annotation_label_transfer.Rd index 196c2b9f..de7dd311 100644 --- a/man/annotation_label_transfer.Rd +++ b/man/annotation_label_transfer.Rd @@ -9,7 +9,7 @@ annotation_label_transfer( empty_droplets_tbl = NULL, reference_azimuth = NULL, assay = NULL, - gene_nomenclature + feature_nomenclature ) } \arguments{ diff --git a/man/cell_cycle_scoring.Rd b/man/cell_cycle_scoring.Rd index 4e15e765..f9570718 100644 --- a/man/cell_cycle_scoring.Rd +++ b/man/cell_cycle_scoring.Rd @@ -7,7 +7,7 @@ cell_cycle_scoring( input_read_RNA_assay, empty_droplets_tbl = NULL, - gene_nomenclature, + feature_nomenclature, assay = NULL ) } diff --git a/man/census_harmonise_anndata_counts.Rd b/man/census_harmonise_anndata_counts.Rd deleted file mode 100644 index 17fd2d82..00000000 --- a/man/census_harmonise_anndata_counts.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/tranform_assay.R -\name{census_harmonise_anndata_counts} -\alias{census_harmonise_anndata_counts} -\title{Harmonize Counts Data in a SingleCellExperiment Object} -\usage{ -census_harmonise_anndata_counts(data, transform_method) -} -\arguments{ -\item{data}{A \code{SingleCellExperiment} object containing assays with counts data.} - -\item{transform_method}{A function or the name of a function (as a character string) to transform the counts data (e.g., \code{"log1p"}, \code{"exp"}).} -} -\value{ -The modified \code{SingleCellExperiment} object with harmonized counts. -} -\description{ -This function harmonizes the counts data in a \code{SingleCellExperiment} object by adjusting negative values, -scaling counts to avoid downstream failures, applying a transformation method, and removing cells with zero counts. -} -\examples{ -\dontrun{ -library(SingleCellExperiment) -# Using a function object -transformed_sce <- census_harmonise_anndata_counts(sce, log1p) -# Using a function name as a character string -transformed_sce <- census_harmonise_anndata_counts(sce, "exp") -} - -} diff --git a/man/compute_mode_delayedarray.Rd b/man/compute_mode_delayedarray.Rd new file mode 100644 index 00000000..b6de67df --- /dev/null +++ b/man/compute_mode_delayedarray.Rd @@ -0,0 +1,47 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{compute_mode_delayedarray} +\alias{compute_mode_delayedarray} +\title{Compute the Mode of a DelayedArray} +\usage{ +compute_mode_delayedarray(delayed_array) +} +\arguments{ +\item{delayed_array}{A \code{DelayedArray} object for which the mode is to be computed.} +} +\value{ +A list containing the following elements: +\describe{ +\item{\code{mode}}{Numeric vector of the most frequent value(s) in the array.} +\item{\code{frequency}}{Integer representing the count of the most frequent value(s).} +} +} +\description{ +This function computes the mode (most frequent value) of a \code{DelayedArray} without loading the entire array into memory. It processes the array in blocks to maintain memory efficiency, making it suitable for large datasets. +} +\details{ +The function utilizes block processing via \code{blockApply()} from the \code{DelayedArray} package to avoid loading the entire array into memory. It computes partial frequency tables for each block and combines them to find the overall mode. +} +\examples{ +\dontrun{ +# Load required packages +library(DelayedArray) + +# Create a DelayedArray from an in-memory matrix +set.seed(123) +n_rows <- 1000 +n_cols <- 1000 +matrix_data <- matrix(sample(0:5, n_rows * n_cols, replace = TRUE, + prob = c(0.5, 0.1, 0.1, 0.1, 0.1, 0.1)), + nrow = n_rows) +delayed_array <- DelayedArray(matrix_data) + +# Compute the mode +mode_result <- compute_mode_delayedarray(delayed_array) + +# Output the result +cat("Most frequent value(s):", paste(mode_result$mode, collapse = ", "), "\n") +cat("Frequency:", mode_result$frequency, "\n") +} + +} diff --git a/man/empty_droplet_id.Rd b/man/empty_droplet_id.Rd index 1362f176..54090638 100644 --- a/man/empty_droplet_id.Rd +++ b/man/empty_droplet_id.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utilities.R +% Please edit documentation in R/functions.R \name{empty_droplet_id} \alias{empty_droplet_id} \title{Identify Empty Droplets in Single-Cell RNA-seq Data} @@ -8,7 +8,7 @@ empty_droplet_id( input_read_RNA_assay, total_RNA_count_check = -Inf, assay = NULL, - gene_nomenclature + feature_nomenclature ) } \arguments{ diff --git a/man/empty_droplet_threshold.Rd b/man/empty_droplet_threshold.Rd index 63582e74..bbd45098 100644 --- a/man/empty_droplet_threshold.Rd +++ b/man/empty_droplet_threshold.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utilities.R +% Please edit documentation in R/functions.R \name{empty_droplet_threshold} \alias{empty_droplet_threshold} \title{Identify Empty Droplets in Single-Cell RNA-seq Data} @@ -8,7 +8,7 @@ empty_droplet_threshold( input_read_RNA_assay, total_RNA_count_check = -Inf, assay = NULL, - gene_nomenclature, + feature_nomenclature, RNA_feature_threshold = 200 ) } diff --git a/man/initialise_hpc.Rd b/man/initialise_hpc.Rd index e9e413a9..55af86d7 100644 --- a/man/initialise_hpc.Rd +++ b/man/initialise_hpc.Rd @@ -15,7 +15,8 @@ initialise_hpc( data_container_type, verbosity = targets::tar_config_get("reporter_make"), error = NULL, - update = "thorough" + update = "thorough", + garbage_collection = 0 ) } \arguments{ diff --git a/man/test_differential_abundance.Rd b/man/test_differential_abundance.Rd index f3ad5392..7956a833 100644 --- a/man/test_differential_abundance.Rd +++ b/man/test_differential_abundance.Rd @@ -1,7 +1,7 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/modules_grammar_hpc.R -\name{test_differential_abundance,HPCell-method} -\alias{test_differential_abundance,HPCell-method} +\name{test_differential_abundance-HPCell-method} +\alias{test_differential_abundance-HPCell-method} \title{Test Differential Abundance for HPCell} \usage{ \S4method{test_differential_abundance}{HPCell}( diff --git a/man/transform_utility.Rd b/man/transform_utility.Rd index 18a20d24..7a50dc40 100644 --- a/man/transform_utility.Rd +++ b/man/transform_utility.Rd @@ -8,7 +8,7 @@ transform_utility( input_read_RNA_assay, transform_fx, external_path, - data_container_type + container_type ) } \arguments{ From df0f6d087cb0f4c1bdac800f4af946209b69b72c Mon Sep 17 00:00:00 2001 From: stemangiola Date: Fri, 1 Nov 2024 13:20:26 +1100 Subject: [PATCH 059/145] update functions --- DESCRIPTION | 2 +- NAMESPACE | 1 + R/functions.R | 213 +++++++++++++++++++++------------------- R/modules_grammar_hpc.R | 20 ++-- R/utilities.R | 68 +++++++++++++ man/initialise_hpc.Rd | 3 +- 6 files changed, 191 insertions(+), 116 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 98f26149..ea2b33e6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.7 +Version: 0.3.8 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", diff --git a/NAMESPACE b/NAMESPACE index 15b26f5d..139238b3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -77,6 +77,7 @@ exportMethods(test_differential_abundance) import(DelayedArray) import(Seurat) import(SeuratObject) +import(SingleCellExperiment) import(broom) import(crew) import(crew.cluster) diff --git a/R/functions.R b/R/functions.R index e7805e5f..7158ca61 100644 --- a/R/functions.R +++ b/R/functions.R @@ -288,6 +288,8 @@ empty_droplet_threshold<- function(input_read_RNA_assay, #' #' @importFrom celldex BlueprintEncodeData #' @importFrom celldex MonacoImmuneData +#' +#' # Seurat #' @importFrom Seurat CreateAssayObject #' @importFrom Seurat SCTransform #' @importFrom Seurat CreateSeuratObject @@ -295,6 +297,8 @@ empty_droplet_threshold<- function(input_read_RNA_assay, #' @importFrom Seurat FindTransferAnchors #' @importFrom Seurat MapQuery #' @importFrom Seurat as.SingleCellExperiment +#' @import Seurat +#' #' @importFrom scuttle logNormCounts #' @importFrom SingleR SingleR #' @importFrom tibble as_tibble @@ -305,10 +309,14 @@ empty_droplet_threshold<- function(input_read_RNA_assay, #' @importFrom dplyr left_join #' @importFrom dplyr filter #' @importFrom magrittr extract2 -#' @importFrom SummarizedExperiment assay +#' @importFrom SummarizedExperiment assay #' @importFrom SummarizedExperiment assay<- #' @importFrom Azimuth RunAzimuth -#' @import Seurat +#' @importFrom stringr str_detect +#' @importFrom tidyr nest +#' @importFrom S4Vectors cbind +#' @importFrom S4Vectors Assays +#' @importFrom S4Vectors RenameAssays #' #' @export annotation_label_transfer <- function(input_read_RNA_assay, @@ -329,26 +337,30 @@ annotation_label_transfer <- function(input_read_RNA_assay, # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) + # TEMPORARY FOR SOME REASON THE MIN COUNTS IS NOT 0 FOR SOME SAMPLES + input_read_RNA_assay = check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY(input_read_RNA_assay, assay) + + if (!is.null(empty_droplets_tbl)) { - filtered_counts = + input_read_RNA_assay = input_read_RNA_assay |> left_join(empty_droplets_tbl, by=".cell") |> dplyr::filter(!empty_droplet) - } else if (is.null(empty_droplets_tbl)) {return(NULL)} + } # SingleR if (inherits(input_read_RNA_assay, "Seurat")) { sce = - filtered_counts |> + input_read_RNA_assay |> as.SingleCellExperiment() |> logNormCounts(assay.type = assay) } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")){ sce = # Filter empty - filtered_counts|> + input_read_RNA_assay|> logNormCounts(assay.type = assay) } - + # This because an error is num cell = 1 if(ncol(input_read_RNA_assay)==1){ input_read_RNA_assay = S4Vectors::cbind(input_read_RNA_assay, input_read_RNA_assay) @@ -389,7 +401,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, rm(blueprint) gc() - + MonacoImmuneData <- celldex::MonacoImmuneData( ensembl = feature_nomenclature == "ensembl" #legacy = TRUE @@ -430,20 +442,7 @@ annotation_label_transfer <- function(input_read_RNA_assay, rm(MonacoImmuneData) gc() - # Convert SCE to SE to calculate SCT - if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> - as("dgCMatrix") - input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, - counts = assay) - - # Rename assay - assay_name_old = input_read_RNA_assay |> Assays() |> _[[1]] - input_read_RNA_assay = input_read_RNA_assay |> - RenameAssays( - assay.name = assay_name_old, - new.assay.name = assay) - } + # If not immune cells if(nrow(data_annotated) == 0){ @@ -463,28 +462,37 @@ annotation_label_transfer <- function(input_read_RNA_assay, } else if (!is.null(reference_azimuth)) { - #print("Start Seurat") + library(Seurat) # !!! If this is not here gives error, but this has to go for Bioconductor - # Reading input + # Convert SCE to SE to calculate SCT + if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { + + assay(input_read_RNA_assay, assay) <- + assay(input_read_RNA_assay, assay) |> + as("dgCMatrix") + + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, counts = assay) + + # Rename assay + assay_name_old = input_read_RNA_assay |> Assays() |> _[[1]] + input_read_RNA_assay = input_read_RNA_assay |> + RenameAssays( + assay.name = assay_name_old, + new.assay.name = assay) + } - if (!is.null(empty_droplets_tbl)) { - input_read_RNA_assay = - input_read_RNA_assay |> - # Filter empty - left_join(empty_droplets_tbl, by = ".cell") |> - filter(!empty_droplet) - } else if (is.null(empty_droplets_tbl)) {return(NULL)} + options(future.globals.maxSize = 16 * 1024^3) - library(Seurat) azimuth_annotation = - tryCatch({input_read_RNA_assay |> RenameAssays(assay.name = assay, - new.assay.name = "RNA") |> + tryCatch({ + + if(ncol(input_read_RNA_assay)<200) k.weight = 25 + else k.weight = 50 + + input_read_RNA_assay |> RenameAssays(assay.name = assay, new.assay.name = "RNA") |> Azimuth::RunAzimuth(reference = reference_azimuth, assay = "RNA", umap.name = "refUMAP") |> - SCTransform(assay = "RNA") |> - ScaleData(assay = "SCT") |> - RunPCA(assay = "SCT") |> as_tibble() |> - select(.cell, any_of( + dplyr::select(.cell, any_of( c( "predicted.celltype.l1", "predicted.celltype.l2", @@ -497,17 +505,20 @@ annotation_label_transfer <- function(input_read_RNA_assay, nest(azimuth_scores_celltype = c(ends_with("score"))) |> dplyr::rename(azimuth_predicted.celltype.l1 = predicted.celltype.l1, azimuth_predicted.celltype.l2 = predicted.celltype.l2, - azimuth_predicted.celltype.l3 = predicted.celltype.l3)}, - error = function(e) { - print(e) - input_read_RNA_assay |> as_tibble() |> select(.cell) - }) + azimuth_predicted.celltype.l3 = predicted.celltype.l3) + }, + error = function(e) { + if(!str_detect(e$message, "Please set k.weight to be smaller than the number of anchors|Number of anchor cells is less than k.weight|number of items to replace is not a multiple of replacement length")) + stop("HPCell says: Seurat Azimuth failed, probably for the small number of cells, which is .", ncol(input_read_RNA_assay), " Please investigate -> ", e$message) + print(e) + input_read_RNA_assay |> as_tibble() |> dplyr::select(.cell) + }) # Save - modified_data <- data_annotated |> + data_annotated |> left_join(azimuth_annotation, by = dplyr::join_by(.cell) ) - return(modified_data) + } } @@ -556,7 +567,7 @@ alive_identification <- function(input_read_RNA_assay, detected = NULL .cell = NULL high_mitochondrion = NULL - + if( !is.null(annotation_column) && !annotation_column %in% colnames(as_tibble(input_read_RNA_assay[1,1])) @@ -567,10 +578,10 @@ alive_identification <- function(input_read_RNA_assay, if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) if (!is.null(empty_droplets_tbl)) { - input_read_RNA_assay = - input_read_RNA_assay |> - left_join(empty_droplets_tbl, by=".cell") |> - dplyr::filter(!empty_droplet) + input_read_RNA_assay = + input_read_RNA_assay |> + left_join(empty_droplets_tbl, by=".cell") |> + dplyr::filter(!empty_droplet) } else if (is.null(empty_droplets_tbl)) {return(NULL)} # Calculate nFeature_RNA and nCount_RNA if not exist in the data @@ -610,7 +621,7 @@ alive_identification <- function(input_read_RNA_assay, keytype="SYMBOL" ) } - + which_mito = rownames(input_read_RNA_assay) |> str_which("^MT") @@ -682,20 +693,20 @@ alive_identification <- function(input_read_RNA_assay, # Add cell type labels and determine high mitochondrion content, if annotation_label_transfer_tbl is provided if(annotation_column |> is.null() |> not()) { - if ( - inherits(annotation_label_transfer_tbl, "tbl_df") && - annotation_column %in% colnames(annotation_label_transfer_tbl) - ) { - - mitochondrion <- qc_metrics %>% - left_join(annotation_label_transfer_tbl, by = ".cell") - - ribosome = - ribosome |> - left_join(annotation_label_transfer_tbl, by = ".cell") - } - - + if ( + inherits(annotation_label_transfer_tbl, "tbl_df") && + annotation_column %in% colnames(annotation_label_transfer_tbl) + ) { + + mitochondrion <- qc_metrics %>% + left_join(annotation_label_transfer_tbl, by = ".cell") + + ribosome = + ribosome |> + left_join(annotation_label_transfer_tbl, by = ".cell") + } + + else if (annotation_column %in% colnames(as_tibble(input_read_RNA_assay[1,1]))) { mitochondrion <- @@ -707,8 +718,8 @@ alive_identification <- function(input_read_RNA_assay, ribosome |> left_join(input_read_RNA_assay |> select(.cell, all_of(annotation_column)), by = ".cell") } - - + + mitochondrion = mitochondrion %>% nest(data = -all_of(annotation_column)) @@ -731,7 +742,7 @@ alive_identification <- function(input_read_RNA_assay, mutate(high_mitochondrion = isOutlier(subsets_Mito_percent, type="higher"), high_mitochondrion = as.logical(high_mitochondrion)))) %>% unnest(cols = data) - + ribosome = ribosome |> mutate(data = map( @@ -748,7 +759,7 @@ alive_identification <- function(input_read_RNA_assay, mitochondrion |> left_join(ribosome, by=".cell") |> mutate(alive = !high_mitochondrion) # & !high_ribosome ) |> - + } @@ -788,7 +799,7 @@ doublet_identification <- function(input_read_RNA_assay, # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - + if (inherits(input_read_RNA_assay, "Seurat")) { input_read_RNA_assay <- input_read_RNA_assay |> # Filtering empty @@ -796,17 +807,17 @@ doublet_identification <- function(input_read_RNA_assay, } if (!is.null(empty_droplets_tbl)) { - - filter_empty_droplets <- input_read_RNA_assay |> - # Filtering empty - left_join(empty_droplets_tbl |> select(.cell, empty_droplet), by = ".cell") |> - filter(!empty_droplet) - - # Filtering dead - if(alive_identification_tbl |> is.null() |> not()) - input_read_RNA_assay = input_read_RNA_assay |> - left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> - filter(alive) + + filter_empty_droplets <- input_read_RNA_assay |> + # Filtering empty + left_join(empty_droplets_tbl |> select(.cell, empty_droplet), by = ".cell") |> + filter(!empty_droplet) + + # Filtering dead + if(alive_identification_tbl |> is.null() |> not()) + input_read_RNA_assay = input_read_RNA_assay |> + left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> + filter(alive) } else if (is.null(empty_droplets_tbl)) {return(NULL)} # Condition as scDblFinder only accept assay "counts" @@ -1109,18 +1120,18 @@ preprocessing_output <- function(input_read_RNA_assay, } } - + # Filtering dead if(alive_identification_tbl |> is.null() |> not()) input_read_RNA_assay = input_read_RNA_assay |> left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> filter(alive) - + # Filter doublets if(doublet_identification_tbl |> is.null() |> not()) - input_read_RNA_assay <- input_read_RNA_assay |> + input_read_RNA_assay <- input_read_RNA_assay |> left_join(doublet_identification_tbl |> select(.cell, scDblFinder.class), by = ".cell") |> filter(scDblFinder.class=="singlet") @@ -1139,7 +1150,7 @@ preprocessing_output <- function(input_read_RNA_assay, left_join(annotation_label_transfer_tbl, by = ".cell") } - + input_read_RNA_assay # # Filter Red blood cells and platelets # if (tolower(tissue) == "pbmc" & "predicted.celltype.l2" %in% c(rownames(annotation_label_transfer_tbl), colnames(annotation_label_transfer_tbl))) { @@ -1210,15 +1221,15 @@ create_pseudobulk <- function(input_read_RNA_assay, preprocessing_output_S = preprocessing_output( - input_read_RNA_assay, - empty_droplets_tbl, - non_batch_variation_removal_S = NULL, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, - doublet_identification_tbl - ) - + input_read_RNA_assay, + empty_droplets_tbl, + non_batch_variation_removal_S = NULL, + alive_identification_tbl, + cell_cycle_score_tbl, + annotation_label_transfer_tbl, + doublet_identification_tbl + ) + if(assays |> is.null()){ if(preprocessing_output_S |> is("Seurat")) @@ -1227,7 +1238,7 @@ create_pseudobulk <- function(input_read_RNA_assay, assays = preprocessing_output_S@assays |> names() } - + # Aggregate cells pseudobulk = preprocessing_output_S |> @@ -1302,7 +1313,7 @@ pseudobulk_merge <- function(pseudobulk_list, external_path, ...) { # Fix GCHECKS . = NULL - + # Select only common columns # investiagte common_columns, as data_source is not a common column in the pilot data common_columns = @@ -1331,7 +1342,7 @@ pseudobulk_merge <- function(pseudobulk_list, external_path, ...) { if(missing_genes |> length() == 0) return(.x) else .x |> add_missingh_genes_to_se(all_genes, missing_genes) - + }) |> purrr::map(~ .x |> dplyr::select(any_of(common_columns))) %>% @@ -1340,10 +1351,10 @@ pseudobulk_merge <- function(pseudobulk_list, external_path, ...) { file_name = glue("{external_path}/{digest(se)}") - + se = se |> - + saveHDF5SummarizedExperiment(dir = file_name, replace=TRUE, as.sparse=TRUE) # Return the pseudobulk data for this single sample @@ -1458,7 +1469,7 @@ map_test_differential_abundance = function( if(ncol(.x) > 2000) method = "glmmseq_glmmTMB" else method = "glmmSeq_lme4" - + # Test test_differential_abundance( .x, @@ -1470,7 +1481,7 @@ map_test_differential_abundance = function( .dispersion = dispersion, ... ) - }, + }, ... )) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 07543814..c6908690 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -50,7 +50,8 @@ initialise_hpc <- function(input_hpc, verbosity = targets::tar_config_get("reporter_make"), error = NULL, update = "thorough", - garbage_collection = 0 + garbage_collection = 0, + workspace_on_error = FALSE ) { # Capture all arguments including defaults @@ -98,13 +99,14 @@ initialise_hpc <- function(input_hpc, cue = tar_cue(mode = u), # Force skip non-debugging outdated targets. controller = crew_controller_group ( readRDS("temp_computing_resources.rds") ), packages = c("HPCell"), - trust_object_timestamps = TRUE + trust_object_timestamps = TRUE, + workspace_on_error = w ) target_list = list( ) } |> - substitute(env = list(d = debug_step, e = error, u = update, g = garbage_collection)) |> + substitute(env = list(d = debug_step, e = error, u = update, g = garbage_collection, w = workspace_on_error)) |> tar_script_append2(script = glue("{store}.R"), append = FALSE) @@ -340,23 +342,15 @@ annotate_cell_type <- function(input_hpc, azimuth_reference = NULL, target_input #' @export annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL, target_input = "data_object", target_output = "annotation_tbl", ...) { - - azimuth_reference |> saveRDS("input_reference.rds") - + input_hpc |> - - hpc_single( - target_output = "reference_read", - user_function = readRDS |> quote(), - file = "input_reference.rds" - ) |> hpc_iterate( target_output = target_output, user_function = annotation_label_transfer |> quote() , input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = "empty_tbl" |> is_target() , - reference_azimuth = reference_read |> quote(), + reference_azimuth = azimuth_reference, feature_nomenclature = "gene_nomenclature" |> is_target() ) diff --git a/R/utilities.R b/R/utilities.R index 4e3837c3..d619de77 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -2844,3 +2844,71 @@ compute_mode_delayedarray <- function(delayed_array) { return(result) } + +#' Check if All Assay Values are Greater Than Zero and Subtract One if True +#' +#' This function, `check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY`, checks if all values +#' in a specified assay of a `SingleCellExperiment` or `Seurat` object are greater than zero. +#' If all values are greater than zero, it subtracts one from each value. This operation is useful +#' in cases where a small adjustment to count data is necessary to standardise the minimum count value. +#' +#' For `SingleCellExperiment` objects, the function accesses the assay data using the `assay` function. +#' For `Seurat` objects, it retrieves the data using `GetAssayData` and updates it using `SetAssayData`. +#' This allows seamless handling of different object types in single-cell analysis workflows. +#' +#' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing the assay data. +#' @param assay_name A string specifying the name of the assay to be checked and potentially modified. +#' +#' @return The modified `SingleCellExperiment` or `Seurat` object, where one has been subtracted +#' from all values in the specified assay if all values were initially greater than zero. +#' If any values are zero or negative, the object is returned unmodified. +#' +#' @examples +#' # For SingleCellExperiment +#' # sce <- SingleCellExperiment(assays = list(RNA = matrix(1:9, 3, 3))) +#' # modified_sce <- check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY(sce, "RNA") +#' +#' # For Seurat +#' # seurat <- CreateSeuratObject(counts = matrix(1:9, 3, 3)) +#' # modified_seurat <- check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY(seurat, "RNA") +#' +#' @import SingleCellExperiment +#' @import Seurat +#' @importFrom SummarizedExperiment assay +#' +#' @noRd +check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY <- function(input_read_RNA_assay, assay_name) { + + # Check if object is SCE or Seurat + if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { + # For SingleCellExperiment + assay_data <- assay(input_read_RNA_assay, assay_name) + + # Check if all values are > 0 + if (min(assay_data) > 0) { + # Subtract 1 from each value + assay(input_read_RNA_assay, assay_name) <- assay_data - 1 + } else { + message("Not all values are greater than 0. No subtraction performed.") + } + + } else if (inherits(input_read_RNA_assay, "Seurat")) { + # For Seurat + assay_data <- GetAssayData(input_read_RNA_assay, assay = assay_name, slot = "data") + + # Check if all values are > 0 + if (min(assay_data) > 0) { + # Subtract 1 from each value + input_read_RNA_assay <- SetAssayData(input_read_RNA_assay, assay = assay_name, slot = "data", + new.data = assay_data - 1) + } else { + message("Not all values are greater than 0. No subtraction performed.") + } + + } else { + stop("The input object is neither a SingleCellExperiment nor a Seurat object.") + } + + # Return the modified object + return(input_read_RNA_assay) +} diff --git a/man/initialise_hpc.Rd b/man/initialise_hpc.Rd index 55af86d7..18b5a6d1 100644 --- a/man/initialise_hpc.Rd +++ b/man/initialise_hpc.Rd @@ -16,7 +16,8 @@ initialise_hpc( verbosity = targets::tar_config_get("reporter_make"), error = NULL, update = "thorough", - garbage_collection = 0 + garbage_collection = 0, + workspace_on_error ) } \arguments{ From 082aa6e64a4bf095df8ad554ae68d41be80908df Mon Sep 17 00:00:00 2001 From: myushen Date: Fri, 1 Nov 2024 14:50:42 +1100 Subject: [PATCH 060/145] fix transform calculation --- R/tranform_assay.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index ba47aa6a..e57ea407 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -105,7 +105,6 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, counts_light_for_checks = counts[,sample(seq_len(ncol(counts)), size = min(numer_of_cells_to_sample, ncol(counts))),drop=FALSE] # Compute the density estimate of the counts. This needs ~13Gb to run for 5000+ cell datasets - density_est <- counts_light_for_checks |> as.matrix() |> density() # Clear memory @@ -134,6 +133,9 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # Apply the transformation method to counts counts <- transform_function(counts) + # Apply the transformation method to 5000 cells + counts_light_for_checks <- transform_function(counts_light_for_checks) + # Round counts to avoid potential subtraction errors due to floating-point precision counts <- round(counts, 5) From 0b23615e9f86d4a0bc83a467c09ade21fed58d26 Mon Sep 17 00:00:00 2001 From: myushen Date: Fri, 1 Nov 2024 15:32:25 +1100 Subject: [PATCH 061/145] fix --- R/tranform_assay.R | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index e57ea407..ca12ca97 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -100,6 +100,21 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # Extract the counts matrix from the assay counts <- assay(input_read_RNA_assay, assay_name) + # Scale counts to a maximum of 20 to avoid downstream failures. + # This Check needs ~13Gb to run for 5000+ cell datasets + # Check if the transformation method is not 'identity' and counts exceed 20 + if (!identical(transform_function, identity) ) { + if(max(counts) > 20){ + scale_factor <- 20 / max(counts) + counts <- counts * scale_factor + }} + + # Clear memory + gc() + + # Apply the transformation method to counts + counts <- transform_function(counts) + # This is to avoid memory explosion set.seed(42) counts_light_for_checks = counts[,sample(seq_len(ncol(counts)), size = min(numer_of_cells_to_sample, ncol(counts))),drop=FALSE] @@ -118,24 +133,6 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, counts <- counts + abs(mode_value) } - # Scale counts to a maximum of 20 to avoid downstream failures. - # This Check needs ~13Gb to run for 5000+ cell datasets - # Check if the transformation method is not 'identity' and counts exceed 20 - if (!identical(transform_function, identity) ) { - if(max(counts) > 20){ - scale_factor <- 20 / max(counts) - counts <- counts * scale_factor - }} - - # Clear memory - gc() - - # Apply the transformation method to counts - counts <- transform_function(counts) - - # Apply the transformation method to 5000 cells - counts_light_for_checks <- transform_function(counts_light_for_checks) - # Round counts to avoid potential subtraction errors due to floating-point precision counts <- round(counts, 5) From db97d7456d502b7f0373288ea30c947884b64235 Mon Sep 17 00:00:00 2001 From: stemangiola Date: Mon, 4 Nov 2024 15:50:25 +1100 Subject: [PATCH 062/145] fix temporary fix --- R/utilities.R | 12 ++++++++---- man/initialise_hpc.Rd | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/R/utilities.R b/R/utilities.R index d619de77..3c6531b4 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -2884,10 +2884,12 @@ check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY <- function(input_rea # For SingleCellExperiment assay_data <- assay(input_read_RNA_assay, assay_name) + my_min = min(assay_data) + # Check if all values are > 0 - if (min(assay_data) > 0) { + if (my_min > 0) { # Subtract 1 from each value - assay(input_read_RNA_assay, assay_name) <- assay_data - 1 + assay(input_read_RNA_assay, assay_name) <- assay_data - my_min } else { message("Not all values are greater than 0. No subtraction performed.") } @@ -2896,11 +2898,13 @@ check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY <- function(input_rea # For Seurat assay_data <- GetAssayData(input_read_RNA_assay, assay = assay_name, slot = "data") + my_min = min(assay_data) + # Check if all values are > 0 - if (min(assay_data) > 0) { + if (my_min > 0) { # Subtract 1 from each value input_read_RNA_assay <- SetAssayData(input_read_RNA_assay, assay = assay_name, slot = "data", - new.data = assay_data - 1) + new.data = assay_data - my_min) } else { message("Not all values are greater than 0. No subtraction performed.") } diff --git a/man/initialise_hpc.Rd b/man/initialise_hpc.Rd index 18b5a6d1..ed73b43b 100644 --- a/man/initialise_hpc.Rd +++ b/man/initialise_hpc.Rd @@ -17,7 +17,7 @@ initialise_hpc( error = NULL, update = "thorough", garbage_collection = 0, - workspace_on_error + workspace_on_error = FALSE ) } \arguments{ From 8900f1b78c3ac734fa0e58ff0146ac3a6adc3e28 Mon Sep 17 00:00:00 2001 From: stemangiola Date: Wed, 13 Nov 2024 17:00:47 +1100 Subject: [PATCH 063/145] typo --- R/tranform_assay.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index ba47aa6a..785a91ff 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -1,13 +1,13 @@ # Define the generic function #' @export -tranform_assay <- function(input_hpc, fx = input_hpc$initialisation$input_hpc |> map(~identity), target_input = "data_object", target_output = "sce_transformed", ...) { - UseMethod("tranform_assay") +transform_assay <- function(input_hpc, fx = input_hpc$initialisation$input_hpc |> map(~identity), target_input = "data_object", target_output = "sce_transformed", ...) { + UseMethod("transform_assay") } #' @importFrom purrr map #' #' @export -tranform_assay.HPCell = function( +transform_assay.HPCell = function( input_hpc, # This might be carrying the environment From f61b7aa025bafb4c0304f39e037bd2e552421f86 Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 14 Nov 2024 10:48:23 +1100 Subject: [PATCH 064/145] rename assay names for consistency --- NAMESPACE | 5 +++-- R/tranform_assay.R | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 139238b3..fe8edbc6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -13,7 +13,7 @@ S3method(remove_empty_DropletUtils,Seurat) S3method(remove_empty_threshold,HPCell) S3method(remove_empty_threshold,Seurat) S3method(score_cell_cycle_seurat,HPCell) -S3method(tranform_assay,HPCell) +S3method(transform_assay,HPCell) export(alive_identification) export(annotate_cell_type) export(annotation_label_transfer) @@ -70,7 +70,7 @@ export(se_add_dispersion) export(split_summarized_experiment) export(target_append) export(test_differential_abundance_hpc) -export(tranform_assay) +export(transform_assay) export(transform_utility) export(vector_to_code) exportMethods(test_differential_abundance) @@ -131,6 +131,7 @@ importFrom(SingleCellExperiment,SingleCellExperiment) importFrom(SingleCellExperiment,altExp) importFrom(SingleR,SingleR) importFrom(SummarizedExperiment,"assay<-") +importFrom(SummarizedExperiment,"assays<-") importFrom(SummarizedExperiment,"colData<-") importFrom(SummarizedExperiment,"rowData<-") importFrom(SummarizedExperiment,SummarizedExperiment) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 1dbc5a5c..811090f2 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -58,7 +58,7 @@ transform_assay.HPCell = function( #' #' @importFrom SummarizedExperiment assay #' @importFrom SummarizedExperiment assay<- -#' @importFrom SummarizedExperiment assays +#' @importFrom SummarizedExperiment assays assays<- #' @importFrom SummarizedExperiment rowData #' @importFrom SummarizedExperiment rowData<- #' @importFrom SingleCellExperiment reducedDim<- @@ -75,6 +75,9 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, if(ncol(input_read_RNA_assay) == 0) return(NULL) + # Rename assay names to for consistency + if (names(assays(input_read_RNA_assay)) != "X") names(assays(input_read_RNA_assay)) <- "X" + # strip metadata that we don't need input_read_RNA_assay = input_read_RNA_assay |> From 646299958ba5566b99792cbf5750a4fb1a72b53c Mon Sep 17 00:00:00 2001 From: stemangiola Date: Thu, 14 Nov 2024 20:24:13 +1100 Subject: [PATCH 065/145] add idle time < inf --- Pipeline_benchmarking_script.R | 3 ++- R_scripts/de_parallel.R | 9 ++++++--- tests/testthat/test_single_functions.R | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Pipeline_benchmarking_script.R b/Pipeline_benchmarking_script.R index 5e719527..12855b99 100644 --- a/Pipeline_benchmarking_script.R +++ b/Pipeline_benchmarking_script.R @@ -45,7 +45,8 @@ for(core in Cores) { slurm_memory_gigabytes_per_cpu = 20, slurm_cpus_per_task = 1, workers = total_workers, - verbose = FALSE + verbose = FALSE, + seconds_idle = 30 ) # Time and run your pipeline function time_taken <- system.time({ diff --git a/R_scripts/de_parallel.R b/R_scripts/de_parallel.R index a1038983..82f5326b 100644 --- a/R_scripts/de_parallel.R +++ b/R_scripts/de_parallel.R @@ -20,7 +20,8 @@ se |> slurm_memory_gigabytes_per_cpu = 5, slurm_cpus_per_task = 2, workers = 200, - verbose = T + verbose = T, + seconds_idle = 30 ) ) @@ -357,7 +358,8 @@ slurm = crew.cluster::crew_controller_slurm( slurm_memory_gigabytes_per_cpu = 5, slurm_cpus_per_task = 1, workers = 200, - verbose = T + verbose = T, + seconds_idle = 30 ) @@ -488,7 +490,8 @@ se = slurm_memory_gigabytes_per_cpu = 5, slurm_cpus_per_task = 1, workers = 200, - verbose = T + verbose = T, + seconds_idle = 30 ) ) diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 1790d2f4..f53e5f7a 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -510,7 +510,8 @@ computing_resources = crew_controller_local(workers = 8) #resource_tuned_slurm slurm_cpus_per_task = 1, workers = 50, tasks_max = 5, - verbose = T + verbose = T, + seconds_idle = 30 ), crew_controller_slurm( name = "tier_2", @@ -518,7 +519,8 @@ computing_resources = crew_controller_local(workers = 8) #resource_tuned_slurm slurm_cpus_per_task = 1, workers = 50, tasks_max = 5, - verbose = T + verbose = T, + seconds_idle = 30 ) ) From 07ef147a637c057ef6e1f26f744b642be21215a8 Mon Sep 17 00:00:00 2001 From: stemangiola Date: Thu, 14 Nov 2024 20:27:15 +1100 Subject: [PATCH 066/145] do not skip if empty is null --- R/functions.R | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/R/functions.R b/R/functions.R index 7158ca61..caa6a202 100644 --- a/R/functions.R +++ b/R/functions.R @@ -582,7 +582,7 @@ alive_identification <- function(input_read_RNA_assay, input_read_RNA_assay |> left_join(empty_droplets_tbl, by=".cell") |> dplyr::filter(!empty_droplet) - } else if (is.null(empty_droplets_tbl)) {return(NULL)} + } # Calculate nFeature_RNA and nCount_RNA if not exist in the data nFeature_name <- paste0("nFeature_", assay) @@ -818,7 +818,7 @@ doublet_identification <- function(input_read_RNA_assay, input_read_RNA_assay = input_read_RNA_assay |> left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> filter(alive) - } else if (is.null(empty_droplets_tbl)) {return(NULL)} + } # Condition as scDblFinder only accept assay "counts" if (!"counts" %in% (SummarizedExperiment::assays(filter_empty_droplets) |> names())){ @@ -909,7 +909,7 @@ cell_cycle_scoring <- function(input_read_RNA_assay, filtered_counts <- input_read_RNA_assay |> left_join(empty_droplets_tbl, by = ".cell") |> dplyr::filter(!empty_droplet) - } else if (is.null(empty_droplets_tbl)) {return(NULL)} + } counts <- filtered_counts |> # Normalise needed @@ -982,7 +982,7 @@ non_batch_variation_removal <- function(input_read_RNA_assay, filtered_counts <- input_read_RNA_assay_transform |> left_join(empty_droplets_tbl, by = ".cell") |> dplyr::filter(!empty_droplet) - } else if (is.null(empty_droplets_tbl)) {return(NULL)} + } counts = filtered_counts |> @@ -1103,9 +1103,7 @@ preprocessing_output <- function(input_read_RNA_assay, input_read_RNA_assay |> left_join(empty_droplets_tbl, by = ".cell") |> filter(!empty_droplet) - } else if (empty_droplets_tbl |> is.null()) { - return(NULL) - } + } # Add normalisation if(!is.null(non_batch_variation_removal_S)){ From fc51637afb0a33d1f5c2c6a6acf28f7c1447d569 Mon Sep 17 00:00:00 2001 From: stemangiola Date: Thu, 14 Nov 2024 20:29:20 +1100 Subject: [PATCH 067/145] typo --- NAMESPACE | 4 ++-- tests/testthat/test_single_functions.R | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 139238b3..bc94d333 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -13,7 +13,7 @@ S3method(remove_empty_DropletUtils,Seurat) S3method(remove_empty_threshold,HPCell) S3method(remove_empty_threshold,Seurat) S3method(score_cell_cycle_seurat,HPCell) -S3method(tranform_assay,HPCell) +S3method(transform_assay,HPCell) export(alive_identification) export(annotate_cell_type) export(annotation_label_transfer) @@ -70,7 +70,7 @@ export(se_add_dispersion) export(split_summarized_experiment) export(target_append) export(test_differential_abundance_hpc) -export(tranform_assay) +export(transform_assay) export(transform_utility) export(vector_to_code) exportMethods(test_differential_abundance) diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index f53e5f7a..d7933a3d 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -566,7 +566,7 @@ file_list |> ) |> # ONLY APPLICABLE TO SCE FOR NOW - tranform_assay(fx = file_list |> purrr::map(~identity), target_output = "sce_transformed") |> + transform_assay(fx = file_list |> purrr::map(~identity), target_output = "sce_transformed") |> # hpc_report( # "empty_report", From dfb080dffdacccb647916866bc96403b3ec3209f Mon Sep 17 00:00:00 2001 From: stemangiola Date: Thu, 14 Nov 2024 20:29:44 +1100 Subject: [PATCH 068/145] move step --- R/modules_grammar_hpc.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index c6908690..7ab0c4b4 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -61,7 +61,6 @@ initialise_hpc <- function(input_hpc, if(input_hpc |> names() |> is.null()) input_hpc = input_hpc |> set_names(seq_len(length(input_hpc))) - input_hpc |> names() |> saveRDS("sample_names.rds") # Optionally, you can evaluate the arguments if they are expressions args_list <- lapply(args_list, eval, envir = parent.frame()) @@ -71,6 +70,8 @@ initialise_hpc <- function(input_hpc, data_file_names = glue("{store}/{names(input_hpc)}.rds") input_hpc |> as.list() |> saveRDS("input_file.rds") + input_hpc |> names() |> saveRDS("sample_names.rds") + gene_nomenclature |> saveRDS("temp_gene_nomenclature.rds") data_container_type |> saveRDS("data_container_type.rds") computing_resources |> saveRDS("temp_computing_resources.rds") From 67d29b66d706d62ffa29bc63e29d197eca861cce Mon Sep 17 00:00:00 2001 From: stemangiola Date: Thu, 14 Nov 2024 20:34:01 +1100 Subject: [PATCH 069/145] drop this filter, it does not make sense. The next steps can be robust --- R/functions.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/functions.R b/R/functions.R index caa6a202..e03e1f18 100644 --- a/R/functions.R +++ b/R/functions.R @@ -263,10 +263,10 @@ empty_droplet_threshold<- function(input_read_RNA_assay, #left_join(colSums(filtered_counts) |> enframe(name = ".cell", value = "nCount_RNA"), by = ".cell") |> mutate(empty_droplet = nFeature_RNA < RNA_feature_threshold) - # Discard samples with nFeature_RNA density mode < threshold, avoid potential downstream error - density_est = result |> pull(nFeature_RNA) |> density() - density_value = density_est$x[which.max(density_est$y)] - if (density_value < RNA_feature_threshold) return(NULL) + # # Discard samples with nFeature_RNA density mode < threshold, avoid potential downstream error + # density_est = result |> pull(nFeature_RNA) |> density() + # density_value = density_est$x[which.max(density_est$y)] + # if (density_value < RNA_feature_threshold) return(NULL) result } From 7a037857788999f87cd864966d92b812ad0725a0 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Mon, 18 Nov 2024 15:21:35 +1100 Subject: [PATCH 070/145] report tests passed --- R/functions.R | 13 +- inst/rmd/Doublet_identification_report.Rmd | 2 +- inst/rmd/Empty_droplet_report.Rmd | 20 +- inst/rmd/pseudobulk_analysis_report.Rmd | 217 +++++++++++++++++---- man/create_pseudobulk.Rd | 10 +- tests/testthat/test_single_functions.R | 47 +++-- 6 files changed, 239 insertions(+), 70 deletions(-) diff --git a/R/functions.R b/R/functions.R index 85274b0d..54399bbf 100644 --- a/R/functions.R +++ b/R/functions.R @@ -839,7 +839,7 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #' @export preprocessing_output <- function(input_read_RNA_assay, empty_droplets_tbl, - non_batch_variation_removal_S, + non_batch_variation_removal_S = NULL, alive_identification_tbl, cell_cycle_score_tbl, annotation_label_transfer_tbl, @@ -955,15 +955,14 @@ preprocessing_output <- function(input_read_RNA_assay, #' @importFrom HDF5Array saveHDF5SummarizedExperiment #' #' @export - # Create pseudobulk for each sample create_pseudobulk <- function(input_read_RNA_assay, sample_names_vec, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, - doublet_identification_tbl , + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + annotation_label_transfer_tbl = NULL, + doublet_identification_tbl = NULL, x = c() , external_path, assays = NULL) { #Fix GChecks diff --git a/inst/rmd/Doublet_identification_report.Rmd b/inst/rmd/Doublet_identification_report.Rmd index 4445f8d3..4acc619f 100644 --- a/inst/rmd/Doublet_identification_report.Rmd +++ b/inst/rmd/Doublet_identification_report.Rmd @@ -12,7 +12,7 @@ params: ## Introduction This report contains UMAP representation of cell clusters and visualization of the distribution of doublets across processed samples. -```{r, warning=FALSE, message=FALSE, echo=FALSE} +```{r setup, include=FALSE} library(purrr) library(dplyr) library(tidyr) diff --git a/inst/rmd/Empty_droplet_report.Rmd b/inst/rmd/Empty_droplet_report.Rmd index f95dd5a9..d0e70d13 100644 --- a/inst/rmd/Empty_droplet_report.Rmd +++ b/inst/rmd/Empty_droplet_report.Rmd @@ -10,7 +10,7 @@ params: sample_name: "NA" --- -```{r, warning=FALSE, message=FALSE, echo=FALSE} +```{r setup, include=FALSE} library(HPCell) library(readr) library(dplyr) @@ -72,7 +72,7 @@ calc_UMAP <- function(input_seurat) { return(x) } -calc_UMAP_dbl_report <- map(data_object, calc_UMAP) +calc_UMAP_dbl_report <- map(params$data_object, calc_UMAP) extract_metadata <- function(seurat_obj, sample_name) { seurat_obj@meta.data %>% @@ -80,7 +80,7 @@ extract_metadata <- function(seurat_obj, sample_name) { mutate(sample = sample_name) } -meta_data_list <- map2(data_object, sample_name, ~ extract_metadata(.x, .y)) +meta_data_list <- map2(params$data_object, params$sample_name, ~ extract_metadata(.x, .y)) # Function to merge meta data with another processed tibble data merge_meta <- function(meta_data, data_to_merge) { @@ -118,7 +118,7 @@ empty_df <- function(input_metadata, empty_droplets_tbl, sample_name) { } process_empty_droplet_list <- purrr::pmap( - list(meta_data_list, empty_tbl, sample_name), + list(meta_data_list, params$empty_tbl, params$sample_name), ~ empty_df(..1, ..2, ..3) ) @@ -152,7 +152,7 @@ print(plot) ```{r, warning=FALSE, message=FALSE, echo=FALSE} -merged_alive <- map2(meta_data_list, alive_tbl, merge_meta) +merged_alive <- map2(meta_data_list, params$alive_tbl, merge_meta) combined_merged_alive <- bind_rows(merged_alive) # Function to process and prepare data for mitochondrial plotting @@ -182,8 +182,8 @@ plot_mito_data <- function(input_seurat, tissue_name, alive_identification) { } # Apply the function to a list of samples and combine all data -all_data <- lapply(seq_along(data_object), function(i) { - plot_mito_data(meta_data_list[[i]], sample_name[[i]], merged_alive[[i]]) +all_data <- lapply(seq_along(params$data_object), function(i) { + plot_mito_data(meta_data_list[[i]], params$sample_name[[i]], merged_alive[[i]]) }) # Combine all data into a single tibble @@ -196,7 +196,7 @@ plot_each_sample <- function(combined_plot_mito_data) { ggplot(combined_plot_mito_data, aes(x = subsets_Mito_sum, y = subsets_Mito_percent)) + facet_wrap(~ tissue_name) + geom_point(aes(color = high_mitochondrion), alpha = 0.5) + - scale_x_log10() + + #scale_x_log10() + geom_hline(aes(yintercept = threshold), color = "red", linetype = "dashed") + labs( x = "Total count", @@ -212,7 +212,6 @@ plot_each_sample(combined_plot_mito_data) ``` - ## Proportion of empty droplets - Number and proportion of cells (non-empty droplets), everything above knee is retained. ```{r, warning=FALSE, message=FALSE, echo=FALSE} @@ -339,7 +338,7 @@ ggplot(plot_data, aes(x = rank, y = nCount_RNA)) + ## Mitochondrial gene expression and ribosomal protein expression across samples - UMAP plots constructed from barcodes that were detected with EmptyDrops - Each point represents a barcode and is colored based on its Mitochondrial/ Ribosomal percentage -```{r, warning=FALSE, message=FALSE, echo=FALSE} +```{r, warning=FALSE, message=FALSE, echo=FALSE, fig.length = 2, fig.width=30} merge_umap_with_metadata <- function(umap_data, metadata, sample) { umap_data |> @@ -350,6 +349,7 @@ merge_umap_with_metadata <- function(umap_data, metadata, sample) { # Merge UMAP data with combined_merged_alive and add sample names umap_merged_data <- map2(calc_UMAP_dbl_report, sample_name, ~ merge_umap_with_metadata(.x, combined_merged_alive, .y)) + combined_umap_merged <- bind_rows(umap_merged_data) # Plot for mitochondrial gene expression diff --git a/inst/rmd/pseudobulk_analysis_report.Rmd b/inst/rmd/pseudobulk_analysis_report.Rmd index fecb69a5..2478a4de 100644 --- a/inst/rmd/pseudobulk_analysis_report.Rmd +++ b/inst/rmd/pseudobulk_analysis_report.Rmd @@ -4,15 +4,18 @@ author: "SS" date: "2024-01-24" output: html_document params: - x1: "NA" - x2: "NA" - x3: "NA" + data_object: "NA" + empty_tbl: "NA" + alive_tbl: "NA" + cell_cycle_tbl: "NA" + annotation_tbl: "NA" + doublet_tbl: "NA" + sample_name: "NA" --- -```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} +```{r setup, include=FALSE} library(ggplot2) library(stringr) -library(tidyverse) library(tidybulk) library(tidyseurat) #library(tidysc) @@ -33,39 +36,187 @@ library(magrittr) library(here) ``` +Calculate pseudobulk for all samples +```{r} +preprocessing_output <- function(input_read_RNA_assay, + empty_droplets_tbl, + alive_identification_tbl, + cell_cycle_score_tbl, + annotation_label_transfer_tbl, + doublet_identification_tbl){ + + if(!is.null(empty_droplets_tbl)) + input_read_RNA_assay = + input_read_RNA_assay |> + left_join(empty_droplets_tbl, by = ".cell") |> + filter(!empty_droplet) + + input_read_RNA_assay <- input_read_RNA_assay |> + + # Filter dead cells + left_join( + alive_identification_tbl |> + select(.cell, any_of(c("alive", "subsets_Mito_percent", "subsets_Mito_sum", "subsets_Ribo_percent", "high_mitochondrion", "high_ribosome"))), + by = ".cell" + ) |> + filter(alive) |> + + # Filter doublets + left_join(doublet_identification_tbl |> select(.cell, scDblFinder.class), by = ".cell") |> + filter(scDblFinder.class=="singlet") + + # Add cell cycle + if(!is.null(cell_cycle_score_tbl)) + input_read_RNA_assay <- input_read_RNA_assay |> + left_join( + cell_cycle_score_tbl, + by=".cell" + ) + + # Attach annotation + if (inherits(annotation_label_transfer_tbl, "tbl_df")){ + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(annotation_label_transfer_tbl, by = ".cell") + } + + + input_read_RNA_assay + # # Filter Red blood cells and platelets + # if (tolower(tissue) == "pbmc" & "predicted.celltype.l2" %in% c(rownames(annotation_label_transfer_tbl), colnames(annotation_label_transfer_tbl))) { + # filtered_data <- filter(processed_data, !predicted.celltype.l2 %in% c("Eryth", "Platelet")) + # } else { + # filtered_data <- processed_data + # } +} + + + + +preprocessing_output_S <- pmap( + list(params$data_object, params$empty_tbl, params$alive_tbl, params$cell_cycle_tbl, params$annotation_tbl, params$doublet_tbl), + ~ preprocessing_output(..1, ..2, ..3, ..4, ..5, ..6) +) +``` + + +Create pseudobulk +```{r} +create_pseudobulk <- function(preprocessing_output_S, assays = NULL, sample_name){ + #browser() + if(assays |> is.null()){ + if(preprocessing_output_S |> is("Seurat")) + assays = Seurat::Assays(preprocessing_output_S) + else if(preprocessing_output_S |> is("SingleCellExperiment")) + assays = preprocessing_output_S@assays |> names() + + } + pseudobulk = + preprocessing_output_S |> + + # Add sample + mutate(sample_hpc = sample_name) |> + + # Aggregate + #aggregate_cells(c(sample_hpc, any_of(x)), slot = "data", assays = assays) + tidySingleCellExperiment::aggregate_cells(c(sample_hpc), slot = "data", assays = assays) + + if(pseudobulk |> is("data.frame")) + pseudobulk = pseudobulk |> + as_SummarizedExperiment(.sample, .feature, any_of(assays)) + + rowData(pseudobulk)$feature_name = rownames(pseudobulk) + + pseudobulk |> + pivot_longer(cols = assays, names_to = "data_source", values_to = "count") |> + filter(!count |> is.na()) |> + + # Some manipulation to get unique feature because RNA and ADT + # both can have same name genes + rename(symbol = .feature) |> + mutate(data_source = stringr::str_remove(data_source, "abundance_")) |> + unite(".feature", c(symbol, data_source), remove = FALSE) |> + + # Covert + as_SummarizedExperiment( + .sample = .sample, + .transcript = .feature, + .abundance = count + ) +} + +pseudobulk_list <- map2(preprocessing_output_S, params$sample_name, ~ create_pseudobulk(.x, sample_name = .y)) + +``` + ```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} -# Load data -# pseudobulk <- do.call(cbind, params$x1) -pseudobulk <- params$x1 -#metadata_clinical_sample <- readRDS(params$metadata_path) -library(ggplot2) -# pseudobulk <- params$x1 -# Extract the proportion of variance explained by each principal component -# var_explained <- my_pca$sdev^2 -# var_explained <- var_explained / sum(var_explained) -# cum_var_explained <- cumsum(var_explained) +pseudobulk_merge <- function(pseudobulk_list) { + + + # Fix GCHECKS + . = NULL + + # Select only common columns + common_columns = + pseudobulk_list |> + purrr::map(~ .x |> as_tibble() |> colnames()) |> + unlist() |> + table() %>% + .[.==max(.)] |> + names() + + # All genes + all_genes = + pseudobulk_list |> + purrr::map(~ .x |> rownames()) |> + unlist() |> + unique() |> + as.character() + + + se <- pseudobulk_list |> + + # Add missing genes + purrr::map(~{ + + missing_genes = all_genes |> setdiff(rownames(.x)) + + if(missing_genes |> length() == 0) return(.x) + else + .x |> add_missingh_genes_to_se(all_genes, missing_genes) + + }) |> + + purrr::map(~ .x |> dplyr::select(any_of(common_columns))) %>% + + do.call(S4Vectors::cbind, .) + + + return(se) +} +merged_pseudobulk <- pseudobulk_merge(pseudobulk_list) -# Find the number of components that explain at least 90% of the variance -# num_components <- which(cum_var_explained >= 0.9)[1] ``` ```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} #pbmc_pseudobulk from sce: -pbmc_pseudobulk <- - pseudobulk %>% - # filter(data_source == assay) |> - #separate( .sample, c("single_cell_rna_id", "batch1"), "__" , remove=FALSE) |> +pbmc_pseudobulk <- + merged_pseudobulk %>% + # filter(data_source == assay) |> + #separate( .sample, c("single_cell_rna_id", "batch1"), "__" , remove=FALSE) |> #left_join(metadata_clinical_sample |> tidybulk::pivot_sample(sample)) |> tidybulk::identify_abundant() %>% - tidybulk::scale_abundance(method = "TMMwsp") - -data_for_pca = - pbmc_pseudobulk |> - keep_abundant() |> - keep_variable(.abundance = "count_scaled", top=500) |> - dplyr::select(-TMM, -multiplier, -count_scaled) |> - tidybulk::scale_abundance(method = "TMMwsp") + tidybulk::scale_abundance(method = "TMMwsp") + +# Prepare data for PCA for each element of the list +data_for_pca <- + pbmc_pseudobulk %>% + keep_abundant() %>% + keep_variable(.abundance = "count_scaled", top = 500) %>% + dplyr::select(-TMM, -multiplier, -count_scaled) %>% + tidybulk::scale_abundance(method = "TMMwsp") + + ``` ## Checking that the input counts don't have global sequencing-depth effect @@ -82,7 +233,7 @@ data_for_pca |> metadata = data_for_pca |> pivot_sample() |> - dplyr::select(any_of(params$x2), .sample, alive, any_of(params$x3), .aggregated_cells) + dplyr::select(.sample, alive, .aggregated_cells) metadata = as.data.frame(metadata) rownames(metadata) = metadata$`.sample` @@ -152,10 +303,10 @@ The distance of the points from the origin (where PC1 and PC2 both equal zero) i # asp = 1) # x -x<- ggplot(my_pca$metadata, aes(x = my_pca$rotated[, "PC1"], y = my_pca$rotated[, "PC2"], color = my_pca$metadata[[params$x2]])) + +x<- ggplot(my_pca$metadata, aes(x = my_pca$rotated[, "PC1"], y = my_pca$rotated[, "PC2"], color = my_pca$metadata |> rownames())) + geom_point() + theme_minimal() + - labs(title = "PCA Plot Colored by Tissue Type", + labs(title = "PCA Plot Colored by sample Type", x = "Principal Component 1", y = "Principal Component 2") + scale_color_discrete(name = "Tissue Type") @@ -170,7 +321,7 @@ x data_for_pca |> tidybulk::reduce_dimensions(method="PCA") |> tidybulk::pivot_sample() |> -ggplot(aes(PC1, PC2, color=data_for_pca[[params$x3]])) + +ggplot(aes(PC1, PC2, color=data_for_pca$.aggregated_cells)) + geom_point() + theme_bw() + theme( diff --git a/man/create_pseudobulk.Rd b/man/create_pseudobulk.Rd index e61c2daf..e5b1c8a7 100644 --- a/man/create_pseudobulk.Rd +++ b/man/create_pseudobulk.Rd @@ -7,11 +7,11 @@ create_pseudobulk( input_read_RNA_assay, sample_names_vec, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, - doublet_identification_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + annotation_label_transfer_tbl = NULL, + doublet_identification_tbl = NULL, x = c(), external_path, assays = NULL diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 40fd6cb3..d7e72740 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -571,10 +571,11 @@ input_hpc |> hpc_report( "empty_report", - rmd_path = "~/HPCell/inst/rmd/Empty_droplet_Report_HPC.Rmd", + rmd_path = "~/HPCell/inst/rmd/Empty_droplet_report.Rmd", empty_tbl = "empty_tbl" |> is_target(), - sample_names = "sample_names" |> is_target(), - data_object = "data_object" |> is_target() + data_object = "data_object" |> is_target(), + alive_tbl = "alive_tbl" |> is_target(), + sample_name = "sample_names" |> is_target() ) |> # ONLY APPLICABLE TO SCE FOR NOW @@ -624,7 +625,12 @@ input_hpc |> input_metadata <- list(data_object$data_object_cd8b54e4bde74e66@meta.data, data_object$data_object_054cd7cffa276f6d@meta.data) - +library(HPCell) +library(targets) +library(Seurat) +library(SeuratData) +library(crew) +library(crew.cluster) #Testing report InstallData("ifnb") ifnb <- UpdateSeuratObject(ifnb) @@ -653,12 +659,13 @@ input_hpc |> "subsets_Ribo_percent", "G2M.Score" )) |> - calculate_pseudobulk() |> hpc_report( "empty_report", rmd_path = "~/HPCell/inst/rmd/Empty_droplet_report.Rmd", empty_tbl = "empty_tbl" |> is_target(), - data_object = "data_object" |> is_target() + data_object = "data_object" |> is_target(), + alive_tbl = "alive_tbl" |> is_target(), + sample_name = "sample_names" |> is_target() ) |> hpc_report( "doublet_report", @@ -672,9 +679,18 @@ input_hpc |> "Technical_variation_report", rmd_path = "~/HPCell/inst/rmd/Technical_variation_report_hpc.Rmd", data_object = "data_object" |> is_target(), - empty_tbl = "empty_tbl" |> is_target() + empty_tbl = "empty_tbl" |> is_target(), + sample_name = "sample_names" |> is_target() ) +## Test technical variation report +rmarkdown::render( + input = paste0(system.file(package = "HPCell"), "/rmd/Technical_variation_report_hpc.Rmd"), + output_file = paste0(system.file(package = "HPCell"), "/Technical_variation_report_hpc.html"), + params = list(data_object = tar_read("data_object", store = "~/HPCell/_targets"), + empty_tbl = tar_read("empty_tbl", store = "~/HPCell/_targets"), + sample_name = tar_read("sample_names", store = "~/HPCell/_targets") + )) ## Test render empty droplet report rmarkdown::render( @@ -682,8 +698,9 @@ rmarkdown::render( output_file = paste0(system.file(package = "HPCell"), "/Empty_droplet_report.html"), params = list(empty_tbl = tar_read("empty_tbl", store = "~/HPCell/_targets"), data_object = tar_read("data_object", store = "~/HPCell/_targets"), - alive_tbl = tar_read("alive_tbl", store = "~/HPCell/_targets")) -) + alive_tbl = tar_read("alive_tbl", store = "~/HPCell/_targets"), + sample_name = tar_read("sample_names", store = "~/HPCell/_targets") +)) ## Test render doublet identification report rmarkdown::render( @@ -694,11 +711,13 @@ rmarkdown::render( annotation_tbl = tar_read("annotation_tbl", store = "~/HPCell/_targets"), sample_names = tar_read("sample_names", store = "~/HPCell/_targets"))) - rmarkdown::render( - input = paste0(system.file(package = "HPCell"), "/rmd/Doublet_identification_report.Rmd"), - output_file = paste0(system.file(package = "HPCell"), "/Doublet_identification_report.html"), + input = paste0(system.file(package = "HPCell"), "/rmd/pseudobulk_analysis_report.Rmd"), + output_file = paste0(system.file(package = "HPCell"), "/pseudobulk_analysis_report.html"), params = list(data_object = tar_read("data_object", store = "~/HPCell/_targets"), - doublet_tbl = tar_read("doublet_tbl", store = "~/HPCell/_targets"), + empty_tbl = tar_read("empty_tbl" , store = "~/HPCell/_targets"), + alive_tbl = tar_read("alive_tbl", store = "~/HPCell/_targets"), + cell_cycle_tbl = tar_read("cell_cycle_tbl", store = "~/HPCell/_targets"), annotation_tbl = tar_read("annotation_tbl", store = "~/HPCell/_targets"), - sample_names = tar_read("sample_names", store = "~/HPCell/_targets"))) \ No newline at end of file + doublet_tbl = tar_read("doublet_tbl", store = "~/HPCell/_targets"), + sample_name = tar_read("sample_names", store = "~/HPCell/_targets"))) From 34ff8f79c22fecce80023238fe08c768ebbc2f74 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 18 Nov 2024 16:54:26 +1100 Subject: [PATCH 071/145] fix estimated counts in transform function --- R/tranform_assay.R | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 811090f2..cae361a0 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -131,23 +131,25 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # Find the mode (peak) value of the counts mode_value <- density_est$x[which.max(density_est$y)] - # If the mode value is negative, shift counts to make the mode zero + # If the mode value is negative, shift counts and counts used for estimation to make the mode zero if (mode_value < 0) { counts <- counts + abs(mode_value) + counts_light_for_checks_shifted <- counts_light_for_checks + abs(mode_value) } # Round counts to avoid potential subtraction errors due to floating-point precision counts <- round(counts, 5) # Find the most frequent count value (mode) in the counts - majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks)$mode + majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks_shifted)$mode # Subtract the mode value from counts if it is not zero if (majority_gene_counts != 0) { counts <- counts - majority_gene_counts } - # Replace negative counts with zero to avoid downstream failures + # Replace negative counts with zero to avoid downstream failures. + # Use counts_light_for_checks here instead of the shifted value if (min(counts_light_for_checks) < 0) { counts[counts < 0] <- 0 } From 2e4baf9805ef4c9b8536b9ffda319a1f79a0f8f3 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 18 Nov 2024 17:17:26 +1100 Subject: [PATCH 072/145] fix --- R/tranform_assay.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index cae361a0..a9330d88 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -134,14 +134,14 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # If the mode value is negative, shift counts and counts used for estimation to make the mode zero if (mode_value < 0) { counts <- counts + abs(mode_value) - counts_light_for_checks_shifted <- counts_light_for_checks + abs(mode_value) - } + counts_light_for_checks_apply_mode <- counts_light_for_checks + abs(mode_value) + } else {counts_light_for_checks_apply_mode <- counts_light_for_checks} # Round counts to avoid potential subtraction errors due to floating-point precision counts <- round(counts, 5) # Find the most frequent count value (mode) in the counts - majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks_shifted)$mode + majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks_apply_mode)$mode # Subtract the mode value from counts if it is not zero if (majority_gene_counts != 0) { @@ -149,7 +149,7 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, } # Replace negative counts with zero to avoid downstream failures. - # Use counts_light_for_checks here instead of the shifted value + # Use counts_light_for_checks here instead of the potential shifted value if (min(counts_light_for_checks) < 0) { counts[counts < 0] <- 0 } From c8a3b1df908928165f2732f75219149388e292e0 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 18 Nov 2024 20:04:01 +1100 Subject: [PATCH 073/145] round estimated counts --- R/tranform_assay.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index a9330d88..cabee0a1 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -139,6 +139,7 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # Round counts to avoid potential subtraction errors due to floating-point precision counts <- round(counts, 5) + counts_light_for_checks_apply_mode <- round(counts_light_for_checks_apply_mode, 5) # Find the most frequent count value (mode) in the counts majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks_apply_mode)$mode From bb5fd17a40e9be4542b79bbe1bb3cd2fb07a6e97 Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 19 Nov 2024 15:46:20 +1100 Subject: [PATCH 074/145] metacell module prototype --- NAMESPACE | 2 + R/functions.R | 135 ++++++++++++++++++++++++++++++++++++++++ R/modules_grammar_hpc.R | 24 +++++++ man/cluster_metacell.Rd | 31 +++++++++ 4 files changed, 192 insertions(+) create mode 100644 man/cluster_metacell.Rd diff --git a/NAMESPACE b/NAMESPACE index fe8edbc6..2fbea3ee 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,6 +2,7 @@ S3method(annotate_cell_type,HPCell) S3method(calculate_pseudobulk,HPCell) +S3method(cluster_metacell,HPCell) S3method(evaluate_hpc,HPCell) S3method(get_single_cell,HPCell) S3method(normalise_abundance_seurat_SCT,HPCell) @@ -20,6 +21,7 @@ export(annotation_label_transfer) export(calculate_pseudobulk) export(cell_cycle_scoring) export(clean_cellxgene_cell_types) +export(cluster_metacell) export(compute_mode_delayedarray) export(convert_gene_names) export(create_pseudobulk) diff --git a/R/functions.R b/R/functions.R index caa6a202..9d4368b9 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1056,6 +1056,141 @@ non_batch_variation_removal <- function(input_read_RNA_assay, } +#' Metacell Clustering +#' +#' @description +#' This function processes single-cell RNA sequencing data to cluster cells into metacells, +#' a higher resolution of clustering that groups cells sharing similar gene expression patterns. +#' +#' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing RNA assay data. +#' @param empty_droplets_tbl A tibble identifying empty droplets. +#' @param alive_identification_tbl A tibble from alive cell identification. +#' @param cell_cycle_score_tbl A tibble from cell cycle scoring. +#' @param assay assay used, default = "RNA" +#' +#' @return A tibble with column 'cell' and 'membership' indicating which metacell cluster each cell belongs to. +#' +#' @importFrom dplyr left_join filter +#' @importFrom Seurat NormalizeData FindVariableFeatures ScaleData RunPCA RunUMAP +#' @importFrom SummarizedExperiment assay assay<- +#' @importFrom magrittr extract2 +#' @export +cluster_metacell <- function(input_read_RNA_assay, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + assay = NULL){ + #Fix GChecks + empty_droplet = NULL + .cell <- NULL + + # Metacell config + gamma = 50 # the requested graining level. + k_knn = 30 # the number of neighbors considered to build the knn network. + nb_var_genes = 2000 # number of the top variable genes to use for dimensionality reduction + nb_pc = 50 # the number of principal components to use. + + # Your code for non_batch_variation_removal function here + class_input = input_read_RNA_assay |> class() + + # Get assay + if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) + + if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { + assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") + + input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, + counts = assay) + + # Rename assay + assay_name_old = DefaultAssay(input_read_RNA_assay) + input_read_RNA_assay_transform = input_read_RNA_assay |> + RenameAssays( + assay.name = assay_name_old, + new.assay.name = assay) + } + + # avoid small number of cells + if (!is.null(empty_droplets_tbl)) { + input_read_RNA_assay_transform <- input_read_RNA_assay_transform |> + left_join(empty_droplets_tbl, by = ".cell") |> + dplyr::filter(!empty_droplet) + } + + if (!is.null(alive_identification_tbl)) { + input_read_RNA_assay_transform = + input_read_RNA_assay_transform |> + left_join( + alive_identification_tbl , + by=".cell" + ) + } + + if(!is.null(cell_cycle_score_tbl)) + input_read_RNA_assay_transform = input_read_RNA_assay_transform |> + + left_join( + cell_cycle_score_tbl , + by=".cell" + ) + + + # Normalise RNA + # (To Do: Let users decide the normalisation factors OR supercell factors by ellipsis) + normalized_rna <- + input_read_RNA_assay |> + NormalizeData(normalization.method = "LogNormalize") |> + FindVariableFeatures(nfeatures = 2000) |> + ScaleData() |> + RunPCA(npcs = 50, verbose = F) |> + RunUMAP(reduction = "pca", dims = c(1:30), n.neighbors = 30, verbose = F) + + + MC <- SuperCell::SCimplify(Seurat::GetAssayData(normalized_rna, slot = "data"), # single-cell log-normalized gene expression data + k.knn = k_knn, + gamma = gamma, + n.var.genes = nb_var_genes, + n.pc = nb_pc, + genes.use = Seurat::VariableFeatures(normalized_rna) + ) + + # MC.GE <- supercell_GE(Seurat::GetAssayData(normalized_rna, slot = "counts"), + # MC$membership, + # mode = "sum") + # + # # Construct the object using metacell + # colnames(MC.GE) <- as.character(1:ncol(MC.GE)) + # MC.seurat <- CreateSeuratObject(counts = MC.GE, + # meta.data = data.frame(size = as.vector(table(MC$membership))) + # ) + # MC.seurat[[annotation_label]] <- MC$annotation + # + # # save single-cell membership to metacells in the MC.seurat object + # MC.seurat@misc$cell_membership <- data.frame(row.names = names(MC$membership), membership = MC$membership) + # MC.seurat@misc$var_features <- MC$genes.use + # + # # Save the PCA components and genes used in SCimplify + # PCA.res <- irlba::irlba(scale(Matrix::t(se.data@assays$RNA@data[MC$genes.use, ])), nv = nb_pc) + # pca.x <- PCA.res$u %*% diag(PCA.res$d) + # rownames(pca.x) <- colnames(se.data@assays$RNA@data) + # MC.seurat@misc$sc.pca <- CreateDimReducObject( + # embeddings = pca.x, + # loadings = PCA.res$v, + # key = "PC_", + # assay = "RNA" + # ) + # + # MC.seurat[["RNA"]] <- as(object = MC.seurat[["RNA"]], Class = "Assay") + + # Return a tibble showing which cell belongs to which metacell cluster + metacell_classification <- tibble(cell = MC$membership |> names(), + membership = MC$membership) + + metacell_classification + +} + + #' Preprocessing Output #' #' @description diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 7ab0c4b4..b1d09386 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -380,6 +380,30 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = ) +} + +# Define the generic function +#' @export +cluster_metacell <- function(input_hpc, target_input = "data_object", target_output = "metacell_classification_tbl", ...) { + UseMethod("cluster_metacell") +} + +#' @export +cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", target_output = "metacell_classification_tbl", ...) { + + input_hpc |> + hpc_iterate( + target_output = target_output, + user_function = metacell_clustering |> quote() , + input_read_RNA_assay = target_input |> is_target(), + empty_droplets_tbl = "empty_tbl" |> is_target() , + alive_identification_tbl = "alive_tbl" |> is_target(), + cell_cycle_score_tbl = "cell_cycle_tbl" |> is_target(), + external_path = glue("{input_hpc$initialisation$store}/external"), + ... + ) + + } # Define the generic function diff --git a/man/cluster_metacell.Rd b/man/cluster_metacell.Rd new file mode 100644 index 00000000..6cc8e24b --- /dev/null +++ b/man/cluster_metacell.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{cluster_metacell} +\alias{cluster_metacell} +\title{Metacell Clustering} +\usage{ +cluster_metacell( + input_hpc, + target_input = "data_object", + target_output = "metacell_classification_tbl", + ... +) +} +\arguments{ +\item{input_read_RNA_assay}{A \code{SingleCellExperiment} or \code{Seurat} object containing RNA assay data.} + +\item{empty_droplets_tbl}{A tibble identifying empty droplets.} + +\item{alive_identification_tbl}{A tibble from alive cell identification.} + +\item{cell_cycle_score_tbl}{A tibble from cell cycle scoring.} + +\item{assay}{assay used, default = "RNA"} +} +\value{ +A tibble with column 'cell' and 'membership' indicating which metacell cluster each cell belongs to. +} +\description{ +This function processes single-cell RNA sequencing data to cluster cells into metacells, +a higher resolution of clustering that groups cells sharing similar gene expression patterns. +} From 83fb26e5d7155db187c83d94d4bf4aacca47e864 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Mon, 25 Nov 2024 01:38:12 +1100 Subject: [PATCH 075/145] functional reports --- tests/testthat/test_single_functions.R | 66 ++++++++------------------ 1 file changed, 19 insertions(+), 47 deletions(-) diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index d7e72740..777f1bbd 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -568,15 +568,25 @@ input_hpc |> # ) ) |> - hpc_report( - "empty_report", - rmd_path = "~/HPCell/inst/rmd/Empty_droplet_report.Rmd", + "pseudo_bulk_report", + rmd_path = "~/HPCell/inst/rmd/pseudobulk_analysis_report.Rmd", + data_object = "data_object" |> is_target(), empty_tbl = "empty_tbl" |> is_target(), - data_object = "data_object" |> is_target(), - alive_tbl = "alive_tbl" |> is_target(), + alive_tbl = "alive_tbl" |> is_target(), + cell_cycle_tbl = "cell_cycle_tbl" |> is_target(), + annotation_tbl = "annotation_tbl" |> is_target(), + doublet_tbl = "doublet_tbl" |> is_target(), sample_name = "sample_names" |> is_target() - ) |> + )|> + hpc_report( + "doublet_id_report", + rmd_path = "~/HPCell/inst/rmd/Doublet_identification_report.Rmd", + data_object = "data_object" |> is_target(), + doublet_tbl = "doublet_tbl" |> is_target(), + annotation_tbl = "annotation_tbl" |> is_target(), + sample_names = "sample_names" |> is_target() + ) # ONLY APPLICABLE TO SCE FOR NOW tranform_assay(fx = input_hpc |> purrr::map(~identity), target_output = "sce_transformed") |> @@ -624,14 +634,15 @@ input_hpc |> get_single_cell(target_input = "data_object") -input_metadata <- list(data_object$data_object_cd8b54e4bde74e66@meta.data, data_object$data_object_054cd7cffa276f6d@meta.data) +## Report testing + library(HPCell) library(targets) library(Seurat) library(SeuratData) library(crew) library(crew.cluster) -#Testing report + InstallData("ifnb") ifnb <- UpdateSeuratObject(ifnb) ifnb.list <- SplitObject(ifnb, split.by = "stim") @@ -682,42 +693,3 @@ input_hpc |> empty_tbl = "empty_tbl" |> is_target(), sample_name = "sample_names" |> is_target() ) - -## Test technical variation report -rmarkdown::render( - input = paste0(system.file(package = "HPCell"), "/rmd/Technical_variation_report_hpc.Rmd"), - output_file = paste0(system.file(package = "HPCell"), "/Technical_variation_report_hpc.html"), - params = list(data_object = tar_read("data_object", store = "~/HPCell/_targets"), - empty_tbl = tar_read("empty_tbl", store = "~/HPCell/_targets"), - sample_name = tar_read("sample_names", store = "~/HPCell/_targets") - )) - -## Test render empty droplet report -rmarkdown::render( - input = paste0(system.file(package = "HPCell"), "/rmd/Empty_droplet_report.Rmd"), - output_file = paste0(system.file(package = "HPCell"), "/Empty_droplet_report.html"), - params = list(empty_tbl = tar_read("empty_tbl", store = "~/HPCell/_targets"), - data_object = tar_read("data_object", store = "~/HPCell/_targets"), - alive_tbl = tar_read("alive_tbl", store = "~/HPCell/_targets"), - sample_name = tar_read("sample_names", store = "~/HPCell/_targets") -)) - -## Test render doublet identification report -rmarkdown::render( - input = paste0(system.file(package = "HPCell"), "/rmd/Doublet_identification_report.Rmd"), - output_file = paste0(system.file(package = "HPCell"), "/Doublet_identification_report.html"), - params = list(data_object = tar_read("data_object", store = "~/HPCell/_targets"), - doublet_tbl = tar_read("doublet_tbl", store = "~/HPCell/_targets"), - annotation_tbl = tar_read("annotation_tbl", store = "~/HPCell/_targets"), - sample_names = tar_read("sample_names", store = "~/HPCell/_targets"))) - -rmarkdown::render( - input = paste0(system.file(package = "HPCell"), "/rmd/pseudobulk_analysis_report.Rmd"), - output_file = paste0(system.file(package = "HPCell"), "/pseudobulk_analysis_report.html"), - params = list(data_object = tar_read("data_object", store = "~/HPCell/_targets"), - empty_tbl = tar_read("empty_tbl" , store = "~/HPCell/_targets"), - alive_tbl = tar_read("alive_tbl", store = "~/HPCell/_targets"), - cell_cycle_tbl = tar_read("cell_cycle_tbl", store = "~/HPCell/_targets"), - annotation_tbl = tar_read("annotation_tbl", store = "~/HPCell/_targets"), - doublet_tbl = tar_read("doublet_tbl", store = "~/HPCell/_targets"), - sample_name = tar_read("sample_names", store = "~/HPCell/_targets"))) From 45409f879dc5b0f0172dd61684bf3e43866d3b0f Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Mon, 25 Nov 2024 14:57:08 +1100 Subject: [PATCH 076/145] commit updated reports --- inst/rmd/Doublet_identification_report.Rmd | 22 +- inst/rmd/Empty_droplet_report.Rmd | 2 +- inst/rmd/Technical_variation_report_hpc.Rmd | 96 ++++ inst/rmd/pseudobulk_analysis_report.Rmd | 5 +- inst/rmd/pseudobulk_analysis_report.html | 462 ++++++++++++++++++++ tests/testthat/test_single_functions.R | 5 +- 6 files changed, 574 insertions(+), 18 deletions(-) create mode 100644 inst/rmd/Technical_variation_report_hpc.Rmd create mode 100644 inst/rmd/pseudobulk_analysis_report.html diff --git a/inst/rmd/Doublet_identification_report.Rmd b/inst/rmd/Doublet_identification_report.Rmd index 4acc619f..02b260e6 100644 --- a/inst/rmd/Doublet_identification_report.Rmd +++ b/inst/rmd/Doublet_identification_report.Rmd @@ -73,7 +73,7 @@ calc_UMAP <- function(input_seurat) { return(x) } -calc_UMAP_dbl_report <- map(params$data_object, calc_UMAP) +calc_UMAP_dbl_report <- map(data_object, calc_UMAP) ``` @@ -110,7 +110,7 @@ get_labels_clusters = function(.data, label_column, dim1, dim2){ - + @@ -119,7 +119,7 @@ get_labels_clusters = function(.data, label_column, dim1, dim2){ - + @@ -215,13 +215,13 @@ get_labels_clusters = function(.data, label_column, dim1, dim2){ - + - + @@ -233,9 +233,9 @@ get_labels_clusters = function(.data, label_column, dim1, dim2){ # Joining info and returning a list of tibbles merged_combined_annotation_doublets <- list( calc_UMAP_dbl_report, - params$doublet_tbl, - params$annotation_tbl, - params$sample_name + doublet_tbl, + annotation_tbl, + sample_names ) |> pmap( ~ ..1 |> @@ -245,7 +245,7 @@ merged_combined_annotation_doublets <- list( ) |> enframe(name = "sample_id", value = "annotated_metadata") |> mutate( - sample_column = params$sample_name # Using the sample_names list you already have + sample_column = sample_names # Using the sample_names list you already have ) |> mutate(plot_by_doublet = map2( annotated_metadata, @@ -279,7 +279,7 @@ merged_combined_annotation_doublets <- list( )) |> mutate(plot_by_cell_type = map2( annotated_metadata, - params$sample_name, + sample_names, ~ { # Sample to not overwhelm the plotting merged_combined_annotation_doublets = .x |> @@ -349,7 +349,7 @@ doublet_composition<- merged_combined_annotation_doublets |> # merged_combined_annotation_doublets <- # merged_combined_annotation_doublets |> # mutate(doublet_composition_plot = doublet_composition |> - # group_by(params$x5, all_of(params$x5)) |> + # group_by(x5, all_of(x5)) |> # mutate(proportion = count_class/sum(count_class)) |> # ungroup() # ) diff --git a/inst/rmd/Empty_droplet_report.Rmd b/inst/rmd/Empty_droplet_report.Rmd index d0e70d13..cbec67a8 100644 --- a/inst/rmd/Empty_droplet_report.Rmd +++ b/inst/rmd/Empty_droplet_report.Rmd @@ -10,7 +10,7 @@ params: sample_name: "NA" --- -```{r setup, include=FALSE} +```{r, warning=FALSE, message=FALSE, echo=FALSE} library(HPCell) library(readr) library(dplyr) diff --git a/inst/rmd/Technical_variation_report_hpc.Rmd b/inst/rmd/Technical_variation_report_hpc.Rmd new file mode 100644 index 00000000..cbf6a04b --- /dev/null +++ b/inst/rmd/Technical_variation_report_hpc.Rmd @@ -0,0 +1,96 @@ +--- +title: "Technical_variation_report_hpc" +output: html_document +date: "2024-10-11" +params: + data_object: "NA" + empty_tbl: "NA" + sample_name: "NA" +--- + +```{r setup, include=FALSE} +library(purrr) +library(magrittr) +library(Seurat) +library(dplyr) +``` + +```{r, include=FALSE} +find_variable_genes <- function(input_seurat, empty_droplet){ + + # Set the assay of choice + assay_of_choice = input_seurat@assays |> names() |> extract2(1) + + # Ensure "HTO" and "ADT" assays are removed if present + if("HTO" %in% names(input_seurat@assays)) input_seurat[["HTO"]] = NULL + if("ADT" %in% names(input_seurat@assays)) input_seurat[["ADT"]] = NULL + + # Filter out empty droplets + seu<- dplyr::left_join(input_seurat, empty_droplet) |> + dplyr::filter(!empty_droplet) + + # Update Seurat object meta.data after filtering + # input_seurat@meta.data <- seu + + # Scale data + input_seurat <- ScaleData(seu, assay=assay_of_choice, return.only.var.genes=FALSE) + + # Find and retrieve variable features + input_seurat <- Seurat::FindVariableFeatures(input_seurat, assay=assay_of_choice, nfeatures = 500) + my_variable_genes <- Seurat::VariableFeatures(input_seurat, assay=assay_of_choice) + + return(my_variable_genes) +} + +variable_gene_list <- map2(params$data_object, params$empty_tbl, find_variable_genes) + +``` + + +```{r, include=FALSE} +calc_UMAP <- function(data_object, sample_name) { + assay_name <- data_object@assays |> names() |> extract2(1) + + # Check if variable features are already present, if not calculate them + if (length(VariableFeatures(data_object)) == 0) { + data_object <- FindVariableFeatures(data_object) + } + + # Extract variable features using VariableFeatures() for Seurat v5 + var_genes <- VariableFeatures(data_object) + + # Ensure that there are variable features before proceeding + if (length(var_genes) > 0) { + # Scale data and run PCA on variable genes + x <- ScaleData(data_object) |> + RunPCA(features = var_genes) |> + FindNeighbors(dims = 1:30) |> + FindClusters(resolution = 0.5) |> + RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> + as_tibble() |> + mutate(sample_column = sample_name) + } else { + stop("No variable features available for UMAP calculation.") + } + + return(x) +} + +calc_UMAP_dbl_report <- map2(params$data_object, params$sample_name, calc_UMAP) +``` + + +```{r, echo=FALSE} +data_umap<- calc_UMAP_dbl_report %>% bind_rows() +# Plot +plot_tissue_color = + data_umap |> + dplyr::mutate(batch = 1) |> + ggplot(aes(umap_1, umap_2, color = data_umap$sample_column )) + + geom_point(size = 0.2) + + facet_wrap(~data_umap$sample_column) + + theme_minimal() + + labs(title = "UMAP visualisation of Samples", color = "orig.ident") + +print(plot_tissue_color) +``` \ No newline at end of file diff --git a/inst/rmd/pseudobulk_analysis_report.Rmd b/inst/rmd/pseudobulk_analysis_report.Rmd index 2478a4de..93584da5 100644 --- a/inst/rmd/pseudobulk_analysis_report.Rmd +++ b/inst/rmd/pseudobulk_analysis_report.Rmd @@ -37,7 +37,7 @@ library(here) ``` Calculate pseudobulk for all samples -```{r} +```{r, include=FALSE} preprocessing_output <- function(input_read_RNA_assay, empty_droplets_tbl, alive_identification_tbl, @@ -91,7 +91,6 @@ preprocessing_output <- function(input_read_RNA_assay, - preprocessing_output_S <- pmap( list(params$data_object, params$empty_tbl, params$alive_tbl, params$cell_cycle_tbl, params$annotation_tbl, params$doublet_tbl), ~ preprocessing_output(..1, ..2, ..3, ..4, ..5, ..6) @@ -100,7 +99,7 @@ preprocessing_output_S <- pmap( Create pseudobulk -```{r} +```{r, include=FALSE} create_pseudobulk <- function(preprocessing_output_S, assays = NULL, sample_name){ #browser() if(assays |> is.null()){ diff --git a/inst/rmd/pseudobulk_analysis_report.html b/inst/rmd/pseudobulk_analysis_report.html new file mode 100644 index 00000000..6bfc76c5 --- /dev/null +++ b/inst/rmd/pseudobulk_analysis_report.html @@ -0,0 +1,462 @@ + + + + + + + + + + + + + + + +pseudobulk analysis report + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+

Checking that the input counts don’t have global sequencing-depth +effect

+

+
+
+

Calculate PCA of pseudobulk

+
+
+

Scree plot

+

Graphical representation to show the proportion of variance explained +by each principal component. This gives an idea of how many principal +components we need to keep to represent the data faithfully. In this +case we see a gradual decrease of variance explained, indicating that we +might need up to principal component num_components for +explaining 90% of the variance.

+

+
+
+

Principal Component Associations with Biological Variables

+

Here we see which variable is associated with which principal +component. We hope the biological variable are associated with the top +principal components.

+

In our sample data set we’re clustering by Tissue type: Samples from +the same tissue type cluster together in the PCA space, which indicates +that the gene expression profiles are similar within a tissue type

+

The distance of the points from the origin (where PC1 and PC2 both +equal zero) indicates how much variance each sample has relative to the +principal components. Samples that are further out along PC1 or PC2 axes +have higher variance for those components.

+

+
+
+

Cell type clustering

+
    +
  • The separation or clustering of points with the same color might +suggest that similar cell types have similar gene expression profiles, +while different colors that group together could indicate distinct +profiles between cell types.
  • +
  • The distance between the points on the plot reflects the similarity +or dissimilarity in their gene expression data, as captured by the +PCA.
  • +
+

+ + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 777f1bbd..6e127a24 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -654,12 +654,11 @@ input_hpc = input_hpc |> - # Initialise pipeline characteristics initialise_hpc( gene_nomenclature = "symbol", - data_container_type = "seurat_rds" + data_container_type = "seurat_rds", + computing_resources = crew_controller_local(workers = 8), ) |> - # calc_UMAP_reports() |> remove_empty_DropletUtils() |> # Remove empty outliers remove_dead_scuttle() |> # Remove dead cells score_cell_cycle_seurat() |> # Score cell cycle From cd173f5aab129c4505becb15c2422f164a104aab Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Tue, 26 Nov 2024 15:25:55 +1100 Subject: [PATCH 077/145] updated reports FINAL --- inst/rmd/Empty_droplet_report.Rmd | 10 ++--- tests/testthat/test_single_functions.R | 52 ++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/inst/rmd/Empty_droplet_report.Rmd b/inst/rmd/Empty_droplet_report.Rmd index cbec67a8..7925804c 100644 --- a/inst/rmd/Empty_droplet_report.Rmd +++ b/inst/rmd/Empty_droplet_report.Rmd @@ -295,7 +295,7 @@ plot_hist Plots are shown for all barcodes, barcodes corresponding to empty droplets,and barcodes corresponding to large or small cells. Ranks are calculated from the entire set of barcodes in all plots, for ease of comparison between plots. All axes are on a log-scale. ```{r, warning=FALSE, message=FALSE, echo=FALSE} -merged_empty <- map2(meta_data_list, empty_tbl, merge_meta) +merged_empty <- map2(meta_data_list, params$empty_tbl, merge_meta) combined_merged_empty <- bind_rows(merged_empty) # Define groups @@ -348,7 +348,7 @@ merge_umap_with_metadata <- function(umap_data, metadata, sample) { } # Merge UMAP data with combined_merged_alive and add sample names -umap_merged_data <- map2(calc_UMAP_dbl_report, sample_name, ~ merge_umap_with_metadata(.x, combined_merged_alive, .y)) +umap_merged_data <- map2(calc_UMAP_dbl_report, params$sample_name, ~ merge_umap_with_metadata(.x, combined_merged_alive, .y)) combined_umap_merged <- bind_rows(umap_merged_data) @@ -420,7 +420,7 @@ combined_plot - + @@ -458,8 +458,8 @@ combined_plot - - + + diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 6e127a24..68f4479d 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -643,16 +643,41 @@ library(SeuratData) library(crew) library(crew.cluster) +bp<- scRNAseq::fetchDataset("baron-pancreas-2016", "2023-12-14", path="human") + +file.path <- ("~/HPCell/bp.rds") +split_values <- unique(bp$label) + +# Create a list of SCE objects split by the column +sce_list <- lapply(split_values, function(value) { + bp[, bp$label == value] +}) + + +######################################### +library(HPCell) +library(targets) +library(Seurat) +library(SeuratData) +library(crew) +library(crew.cluster) + InstallData("ifnb") ifnb <- UpdateSeuratObject(ifnb) ifnb.list <- SplitObject(ifnb, split.by = "stim") file_paths <- c("~/HPCell/CTRL_seurat_tibble.rds", "~/HPCell/STIM_seurat_tibble.rds") +ctrl_subset <- subset(ifnb.list$CTRL, cells = sample(Cells(ifnb.list$CTRL), size = 300)) +stim_subset <- subset(ifnb.list$STIM, cells = sample(Cells(ifnb.list$STIM), size = 300)) + +# Save the Seurat objects to the specified file paths +saveRDS(ctrl_subset, file_paths[1]) # Save CTRL object +saveRDS(stim_subset, file_paths[2]) # Save STIM object + input_hpc = file_paths |> magrittr::set_names(c("CTRL", "STIM")) - input_hpc |> initialise_hpc( gene_nomenclature = "symbol", @@ -670,16 +695,16 @@ input_hpc |> "G2M.Score" )) |> hpc_report( - "empty_report", - rmd_path = "~/HPCell/inst/rmd/Empty_droplet_report.Rmd", + "empty_report", + rmd_path = system.file("rmd", "Empty_droplet_report.Rmd", package = "HPCell"), empty_tbl = "empty_tbl" |> is_target(), - data_object = "data_object" |> is_target(), - alive_tbl = "alive_tbl" |> is_target(), + data_object = "data_object" |> is_target(), + alive_tbl = "alive_tbl" |> is_target(), sample_name = "sample_names" |> is_target() - ) |> + ) |> hpc_report( "doublet_report", - rmd_path = "~/HPCell/inst/rmd/Doublet_identification_report.Rmd", + rmd_path = system.file("rmd", "Doublet_identification_report.Rmd", package = "HPCell"), data_object = "data_object" |> is_target(), doublet_tbl = "doublet_tbl" |> is_target(), annotation_tbl = "annotation_tbl" |> is_target(), @@ -687,8 +712,19 @@ input_hpc |> ) |> hpc_report( "Technical_variation_report", - rmd_path = "~/HPCell/inst/rmd/Technical_variation_report_hpc.Rmd", + system.file("rmd", "Technical_variation_report_hpc.Rmd", package = "HPCell"), data_object = "data_object" |> is_target(), empty_tbl = "empty_tbl" |> is_target(), sample_name = "sample_names" |> is_target() + ) |> + hpc_report( + "pseudo_bulk_report", + system.file("rmd", "pseudobulk_analysis_report.Rmd", package = "HPCell"), + data_object = "data_object" |> is_target(), + empty_tbl = "empty_tbl" |> is_target(), + alive_tbl = "alive_tbl" |> is_target(), + cell_cycle_tbl = "cell_cycle_tbl" |> is_target(), + annotation_tbl = "annotation_tbl" |> is_target(), + doublet_tbl = "doublet_tbl" |> is_target(), + sample_name = "sample_names" |> is_target() ) From c95d5e11909b19b553fdfacdca9d5ccac7dbf444 Mon Sep 17 00:00:00 2001 From: Dharmesh Bhuva Date: Thu, 28 Nov 2024 14:53:57 +1030 Subject: [PATCH 078/145] remove duplicate package imports --- DESCRIPTION | 5 ----- 1 file changed, 5 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index ea2b33e6..715ca53e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -60,15 +60,10 @@ Imports: future.apply, ids, RColorBrewer, - digest, - cowplot, - igraph, reshape2, - callr, future, methods, pbapply, - reshape2, scales, data.table, ggplot2, From b6a0513f9e1674f1e6ad6cafb7cee0a0f6654950 Mon Sep 17 00:00:00 2001 From: william-hutchison Date: Tue, 3 Dec 2024 16:11:07 +1100 Subject: [PATCH 079/145] Fix incorrect function imports --- NAMESPACE | 3 ++- R/differential_expression.R | 2 +- R/functions.R | 12 +++++++----- R/tranform_assay.R | 1 - R/utilities.R | 7 +------ 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index fe8edbc6..4257bd79 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -105,6 +105,7 @@ importFrom(Matrix,colSums) importFrom(S4Vectors,cbind) importFrom(S4Vectors,metadata) importFrom(S4Vectors,split) +importFrom(Seurat,Assays) importFrom(Seurat,CellCycleScoring) importFrom(Seurat,CreateAssayObject) importFrom(Seurat,CreateSeuratObject) @@ -186,7 +187,6 @@ importFrom(purrr,map) importFrom(purrr,map2) importFrom(purrr,map_chr) importFrom(purrr,map_int) -importFrom(purrr,rep_along) importFrom(purrr,safely) importFrom(purrr,set_names) importFrom(readr,write_lines) @@ -194,6 +194,7 @@ importFrom(rlang,enquo) importFrom(rlang,is_symbolic) importFrom(rlang,parse_expr) importFrom(rlang,quo_is_symbolic) +importFrom(rlang,rep_along) importFrom(rlang,sym) importFrom(scater,isOutlier) importFrom(scuttle,logNormCounts) diff --git a/R/differential_expression.R b/R/differential_expression.R index ebe07d58..6e9e1bf5 100644 --- a/R/differential_expression.R +++ b/R/differential_expression.R @@ -15,7 +15,7 @@ #' @importFrom dplyr distinct #' @importFrom dplyr filter #' @importFrom dplyr pull -#' @importFrom dplyr enframe +#' @importFrom tibble enframe #' @importFrom purrr map #' @importFrom purrr map_int #' @importFrom stringr str_subset diff --git a/R/functions.R b/R/functions.R index caa6a202..5c094a9a 100644 --- a/R/functions.R +++ b/R/functions.R @@ -289,7 +289,6 @@ empty_droplet_threshold<- function(input_read_RNA_assay, #' @importFrom celldex BlueprintEncodeData #' @importFrom celldex MonacoImmuneData #' -#' # Seurat #' @importFrom Seurat CreateAssayObject #' @importFrom Seurat SCTransform #' @importFrom Seurat CreateSeuratObject @@ -297,6 +296,8 @@ empty_droplet_threshold<- function(input_read_RNA_assay, #' @importFrom Seurat FindTransferAnchors #' @importFrom Seurat MapQuery #' @importFrom Seurat as.SingleCellExperiment +#' @importFrom Seurat Assays +#' @importFrom SeuratObject RenameAssays #' @import Seurat #' #' @importFrom scuttle logNormCounts @@ -315,8 +316,6 @@ empty_droplet_threshold<- function(input_read_RNA_assay, #' @importFrom stringr str_detect #' @importFrom tidyr nest #' @importFrom S4Vectors cbind -#' @importFrom S4Vectors Assays -#' @importFrom S4Vectors RenameAssays #' #' @export annotation_label_transfer <- function(input_read_RNA_assay, @@ -1072,9 +1071,12 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #' #' @return Processed and filter_empty_droplets dataset. #' -#' @importFrom dplyr left_join filter select +#' @importFrom dplyr filter +#' @importFrom dplyr select +#' @importFrom dplyr left_join #' @import SeuratObject -#' @importFrom SummarizedExperiment left_join assay assay<- +#' @importFrom SummarizedExperiment assay +#' @importFrom SummarizedExperiment assay<- #' @import tidySingleCellExperiment #' @import tidyseurat #' @importFrom magrittr not diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 811090f2..bcb7cd50 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -66,7 +66,6 @@ transform_assay.HPCell = function( #' @importFrom glue glue #' @importFrom digest digest #' @importFrom stats density -#' @importFrom stats which.max #' #' @export transform_utility = function(input_read_RNA_assay, transform_fx, external_path, container_type) { diff --git a/R/utilities.R b/R/utilities.R index 3c6531b4..3d60fd64 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -2321,10 +2321,7 @@ add_tier_inputs <- function(command, arguments_to_tier, i) { #' @param chunk_size The size of each chunk. Defaults to 100. #' @return A tibble with the features and their corresponding chunk numbers. #' @importFrom dplyr tibble -#' @importFrom purrr rep_along -#' @importFrom purrr ceiling -#' @importFrom purrr seq_len -#' @importFrom purrr length +#' @importFrom rlang rep_along #' @importFrom magrittr divide_by #' #' @@ -2649,7 +2646,6 @@ check_for_name_value_conflicts <- function(...) { #' # $packages #' # [1] "tidySummarizedExperiment" "HPCell" #' -#' @importFrom stats substitute #' @noRd expand_tiered_arguments <- function(lst, tiers, argument_to_replace, tiered_args) { # Check if the argument to replace exists in the list @@ -2767,7 +2763,6 @@ write_HDF5_array_safe = function(normalized_rna, name, directory){ #' @import DelayedArray #' @importFrom DelayedArray blockApply #' @importFrom methods as -#' @importFrom stats as.numeric #' @importFrom utils capture.output #' #' @examples From 0a5f9246aad93fb03581e57aab1ddb0114d8a065 Mon Sep 17 00:00:00 2001 From: william-hutchison Date: Wed, 4 Dec 2024 14:53:50 +1100 Subject: [PATCH 080/145] Fix incorrect remote address --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index ea2b33e6..ae916757 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -15,7 +15,7 @@ Remotes: sqjin/CellChat, satijalab/seurat@seurat5, satijalab/seurat-data@seurat5, - seurat-data/azimuth@master + satijalab/azimuth@master Biarch: true Imports: targets, From 7c06aae4e1bd644e8ba2d6d47ae27b7fc7702e5e Mon Sep 17 00:00:00 2001 From: william-hutchison Date: Wed, 4 Dec 2024 14:54:17 +1100 Subject: [PATCH 081/145] Version up --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index ae916757..e1b1b160 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.8 +Version: 0.3.9 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", From 3d8b4e5f2360adaf3f78e4ea14c7cf2f7d02e12c Mon Sep 17 00:00:00 2001 From: william-hutchison Date: Wed, 4 Dec 2024 15:01:52 +1100 Subject: [PATCH 082/145] Fix typo in code snippet --- README.md | 2 +- README.rmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d41edd32..c17d21b9 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ The key features of HPCell include: ## Installation ``` r -remote::install_github("MangiolaLaboratory/HPCell") +remotes::install_github("MangiolaLaboratory/HPCell") ``` ## The input diff --git a/README.rmd b/README.rmd index cf8e90c3..b34ad1a7 100644 --- a/README.rmd +++ b/README.rmd @@ -35,7 +35,7 @@ The key features of HPCell include: ```{r, eval=FALSE} -remote::install_github("MangiolaLaboratory/HPCell") +remotes::install_github("MangiolaLaboratory/HPCell") ``` From 01c4d4ec7fa6201b94635ad3a5793614885261c0 Mon Sep 17 00:00:00 2001 From: william-hutchison Date: Wed, 4 Dec 2024 15:02:16 +1100 Subject: [PATCH 083/145] Version up --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index e1b1b160..84948d23 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.9 +Version: 0.3.10 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", From 4386e3d0655ed0e54a5556c23a115e32f9d4b384 Mon Sep 17 00:00:00 2001 From: william-hutchison Date: Wed, 4 Dec 2024 16:32:28 +1100 Subject: [PATCH 084/145] Add SeuratDisk remote --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 84948d23..a9fd22e8 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -15,7 +15,8 @@ Remotes: sqjin/CellChat, satijalab/seurat@seurat5, satijalab/seurat-data@seurat5, - satijalab/azimuth@master + satijalab/azimuth@master, + mojaveazure/seurat-disk@master Biarch: true Imports: targets, From 277878cdbff04fc52a01e4f113cd4d6d818c5b7c Mon Sep 17 00:00:00 2001 From: william-hutchison Date: Wed, 4 Dec 2024 16:47:21 +1100 Subject: [PATCH 085/145] Add NAMESPACE imports to DESCRIPTION --- DESCRIPTION | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index a9fd22e8..942b5d4b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -76,7 +76,15 @@ Imports: ggupset, here, qs, - ensembldb + ensembldb, + Azimuth, + DelayedArray, + HDF5Array, + SeuratObject, + SingleCellExperiment, + biomaRt, + lme4, + tidyselect Suggests: testthat(>= 3.0.0), scRNAseq, From 0767c78e51b47a47b46f156bca070e1e5ef12d46 Mon Sep 17 00:00:00 2001 From: william-hutchison Date: Thu, 5 Dec 2024 16:23:20 +1100 Subject: [PATCH 086/145] Update examples --- NAMESPACE | 1 - R/modules_grammar_hpc.R | 1 - R/utilities.R | 7 +- man/eliminate_random_effects.Rd | 21 ---- man/reference_annotation_to_consensus.Rd | 6 +- man/test_differential_abundance.Rd | 132 ----------------------- 6 files changed, 6 insertions(+), 162 deletions(-) delete mode 100644 man/eliminate_random_effects.Rd diff --git a/NAMESPACE b/NAMESPACE index 4257bd79..e494269d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -148,7 +148,6 @@ importFrom(celldex,MonacoImmuneData) importFrom(crew,crew_controller_local) importFrom(data.table,":=") importFrom(digest,digest) -importFrom(dplyr,"%>%") importFrom(dplyr,as_tibble) importFrom(dplyr,case_when) importFrom(dplyr,count) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 7ab0c4b4..9a0373cc 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -460,7 +460,6 @@ get_single_cell.HPCell = function(input_hpc, target_input = "data_object", targe #' #' @name test_differential_abundance-HPCell-method #' @rdname test_differential_abundance -#' @inherit tidybulk::test_differential_abundance #' #' @importFrom tidybulk test_differential_abundance #' @exportMethod test_differential_abundance diff --git a/R/utilities.R b/R/utilities.R index 3d60fd64..62422c1b 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -808,7 +808,6 @@ is_strong_evidence = function(single_cell_data, cell_annotation_azimuth_l2, cell #' #' This function takes cell type annotations from multiple datasets (Azimuth, Monaco, Blueprint) and harmonizes them into a consensus annotation. The function utilizes predefined mappings between cell type labels in these datasets to generate standardized cell types across references. #' -#' @importFrom dplyr %>% #' @importFrom dplyr mutate #' @importFrom dplyr case_when #' @importFrom dplyr left_join @@ -825,12 +824,12 @@ is_strong_evidence = function(single_cell_data, cell_annotation_azimuth_l2, cell #' #' @examples #' # Example usage: -#' tibble( +#' tibble::tibble( #' azimuth_predicted.celltype.l2 = c("CD8 TEM", "NK", "CD4 Naive"), #' monaco_first.labels.fine = c("Effector memory CD8 T cells", "Natural killer cells", "Naive CD4 T cells"), #' blueprint_first.labels.fine = c("CD8+ Tem", "NK cells", "Naive B-cells") -#' ) %>% -#' mutate(consensus = reference_annotation_to_consensus( +#' ) |> +#' dplyr::mutate(consensus = reference_annotation_to_consensus( #' azimuth_predicted.celltype.l2, monaco_first.labels.fine, blueprint_first.labels.fine)) #' #' @note This function is designed to harmonize specific cell types, especially T cells, B cells, monocytic cells, and innate lymphoid cells (ILCs), across reference datasets. diff --git a/man/eliminate_random_effects.Rd b/man/eliminate_random_effects.Rd deleted file mode 100644 index a1bbf256..00000000 --- a/man/eliminate_random_effects.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/HPCell.R -\name{eliminate_random_effects} -\alias{eliminate_random_effects} -\title{HPCell Package Functions} -\usage{ -eliminate_random_effects(formula) -} -\arguments{ -\item{formula}{An object of class \code{formula}, representing a mixed-effects model formula.} -} -\value{ -A formula object with random effects parts removed. -} -\description{ -Functions for the HPCell package. -Eliminate Random Effects from a Formula -} -\examples{ -eliminate_random_effects(~ age_days * sex + (1 | file_id) + ethnicity_simplified + assay_simplified + .aggregated_cells + (1 + age_days * sex | tissue)) -} diff --git a/man/reference_annotation_to_consensus.Rd b/man/reference_annotation_to_consensus.Rd index c9f382f1..bbd146d1 100644 --- a/man/reference_annotation_to_consensus.Rd +++ b/man/reference_annotation_to_consensus.Rd @@ -24,12 +24,12 @@ This function is designed to harmonize specific cell types, especially T cells, } \examples{ # Example usage: -tibble( +tibble::tibble( azimuth_predicted.celltype.l2 = c("CD8 TEM", "NK", "CD4 Naive"), monaco_first.labels.fine = c("Effector memory CD8 T cells", "Natural killer cells", "Naive CD4 T cells"), blueprint_first.labels.fine = c("CD8+ Tem", "NK cells", "Naive B-cells") -) \%>\% - mutate(consensus = reference_annotation_to_consensus( +) |> + dplyr::mutate(consensus = reference_annotation_to_consensus( azimuth_predicted.celltype.l2, monaco_first.labels.fine, blueprint_first.labels.fine)) } diff --git a/man/test_differential_abundance.Rd b/man/test_differential_abundance.Rd index 7956a833..0fe4cdaf 100644 --- a/man/test_differential_abundance.Rd +++ b/man/test_differential_abundance.Rd @@ -66,135 +66,3 @@ The result of the differential abundance test. \description{ This function tests differential abundance for HPCell objects. } -\details{ -`r lifecycle::badge("maturing")` - -This function provides the option to use edgeR \url{https://doi.org/10.1093/bioinformatics/btp616}, limma-voom \url{https://doi.org/10.1186/gb-2014-15-2-r29}, limma_voom_sample_weights \url{https://doi.org/10.1093/nar/gkv412} or DESeq2 \url{https://doi.org/10.1186/s13059-014-0550-8} to perform the testing. -All methods use raw counts, irrespective of if scale_abundance or adjust_abundance have been calculated, therefore it is essential to add covariates such as batch effects (if applicable) in the formula. - -Underlying method for edgeR framework: - - .data |> - - # Filter -keep_abundant( - factor_of_interest = !!(as.symbol(parse_formula(.formula)[1])), - minimum_counts = minimum_counts, - minimum_proportion = minimum_proportion - ) |> - - # Format - select(!!.transcript,!!.sample,!!.abundance) |> - spread(!!.sample,!!.abundance) |> - as_matrix(rownames = !!.transcript) %>% - - # edgeR - edgeR::DGEList(counts = .) |> - edgeR::calcNormFactors(method = scaling_method) |> - edgeR::estimateDisp(design) |> - - # Fit - edgeR::glmQLFit(design) |> // or glmFit according to choice - edgeR::glmQLFTest(coef = 2, contrast = my_contrasts) // or glmLRT according to choice - - - -Underlying method for DESeq2 framework: - -keep_abundant( - factor_of_interest = !!as.symbol(parse_formula(.formula)[[1]]), - minimum_counts = minimum_counts, - minimum_proportion = minimum_proportion -) |> - -# DESeq2 -DESeq2::DESeqDataSet(design = .formula) |> -DESeq2::DESeq() |> -DESeq2::results() - - - -Underlying method for glmmSeq framework: - -counts = -.data %>% - assay(my_assay) - -# Create design matrix for dispersion, removing random effects -design = - model.matrix( - object = .formula |> lme4::nobars(), - data = metadata - ) - -dispersion = counts |> edgeR::estimateDisp(design = design) %$% tagwise.dispersion |> setNames(rownames(counts)) - - glmmSeq( .formula, - countdata = counts , - metadata = metadata |> as.data.frame(), - dispersion = dispersion, - progress = TRUE, - method = method |> str_remove("(?i)^glmmSeq_" ), - ) -} -\examples{ -# edgeR - - tidybulk::se_mini |> - identify_abundant() |> - test_differential_abundance( ~ condition ) - - # The function `test_differential_abundance` operates with contrasts too - - tidybulk::se_mini |> - identify_abundant(factor_of_interest = condition) |> - test_differential_abundance( - ~ 0 + condition, - contrasts = c( "conditionTRUE - conditionFALSE") - ) - - # DESeq2 - equivalent for limma-voom - -my_se_mini = tidybulk::se_mini -my_se_mini$condition = factor(my_se_mini$condition) - -# demontrating with `fitType` that you can access any arguments to DESeq() -my_se_mini |> - identify_abundant(factor_of_interest = condition) |> - test_differential_abundance( ~ condition, method="deseq2", fitType="local") - -# testing above a log2 threshold, passes along value to lfcThreshold of results() -res <- my_se_mini |> - identify_abundant(factor_of_interest = condition) |> - test_differential_abundance( ~ condition, method="deseq2", - fitType="local", - test_above_log2_fold_change=4 ) - -# Use random intercept and random effect models - - se_mini[1:50,] |> - identify_abundant(factor_of_interest = condition) |> - test_differential_abundance( - ~ condition + (1 + condition | time), - method = "glmmseq_lme4", cores = 1 - ) - -# confirm that lfcThreshold was used -\dontrun{ - res |> - mcols() |> - DESeq2::DESeqResults() |> - DESeq2::plotMA() -} - -# The function `test_differential_abundance` operates with contrasts too - - my_se_mini |> - identify_abundant() |> - test_differential_abundance( - ~ 0 + condition, - contrasts = list(c("condition", "TRUE", "FALSE")), - method="deseq2", - fitType="local" - ) -} From 28731c2c5b73d5a2fde1c13df940ea75841e7a27 Mon Sep 17 00:00:00 2001 From: william-hutchison Date: Thu, 5 Dec 2024 16:23:51 +1100 Subject: [PATCH 087/145] Version up --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 942b5d4b..f5e27f10 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.10 +Version: 0.3.11 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", From 3c36438aa39cf15f539ea74fc187efc830840bde Mon Sep 17 00:00:00 2001 From: stemangiola Date: Fri, 6 Dec 2024 14:26:47 +1100 Subject: [PATCH 088/145] clean the object in transform assay. and check if min counts are > 0 --- R/execute_pipeline.R | 408 ------------------------------------------ R/targets_functions.R | 2 +- R/tranform_assay.R | 7 + R/utilities.R | 7 +- 4 files changed, 13 insertions(+), 411 deletions(-) delete mode 100644 R/execute_pipeline.R diff --git a/R/execute_pipeline.R b/R/execute_pipeline.R deleted file mode 100644 index 0551df64..00000000 --- a/R/execute_pipeline.R +++ /dev/null @@ -1,408 +0,0 @@ -#' Run Targets Pipeline for HPCell -#' -#' @description -#' This function sets up and executes a `targets` pipeline for HPCell. It saves input data and configurations, -#' writes a pipeline script, and runs the pipeline using the 'targets' package. -#' -#' @param input_data Input data for the pipeline. -#' @param store Directory path for storing the pipeline files. -#' @param input_reference Optional reference data. -#' @param tissue Tissue type for the analysis. -#' @param computing_resources Configuration for computing resources. -#' @param debug_step Optional step for debugging. -#' @param filter_empty_droplets Flag to indicate if input filtering is needed. -#' @param RNA_assay_name Name of the RNA assay. -#' @param sample_column Column name for sample identification. -#' @param cell_type_annotation_column Column name for cell type annotation in input data -#' @param data_container_type A character vector of length one specifies the input data type. -#' @param profiler Optional step for profilling. Default is FALSE -#' data type can be one of the following: anndata for annotated data mainly used in python. -#' sce_rds and seurat_rds for `SingleCellExperiment` and `Seurat` RDS format representively -#' seurat_rds for `Seurat` RDS format. -#' sce_hdf5 for `SingleCellExperiment` HDF5 format -#' seurat_hdf5 for `Seurat` HDF5 format -#' -#' @return The output of the `targets` pipeline, typically a pre-processed data set. -#' -#' @importFrom glue glue -#' @importFrom targets tar_script -#' @import crew.cluster -#' @import tarchetypes -#' @import targets -#' @import broom -#' @import ggplot2 -#' @import ggupset -#' @import here -#' @import qs -#' @import crew -#' @importFrom future tweak -#' @import crew -#' @import crew.cluster -#' @export -run_targets_pipeline <- function( - input_data, - store = "./", - input_reference = NULL, - tissue, - computing_resources = crew_controller_local(workers = 1), - debug_step = NULL, - filter_empty_droplets = NULL, - RNA_assay_name = "RNA", - sample_column = "sample", - cell_type_annotation_column = "Cell_type_in_each_tissue", - data_container_type -){ - - # Fix GCHECKS - data_object <- NULL - reference_file <- NULL - tissue_file <- NULL - filtered_file <- NULL - sample_column_file <- NULL - cell_type_annotation_column_file <- NULL - reference_label_coarse <- NULL - reference_label_fine <- NULL - input_read <- NULL - unique_tissues <- NULL - reference_read <- NULL - empty_droplets_tbl <- NULL - cell_cycle_score_tbl <- NULL - annotation_label_transfer_tbl <- NULL - alive_identification_tbl <- NULL - doublet_identification_tbl <- NULL - non_batch_variation_removal_S <- NULL - preprocessing_output_S <- NULL - create_pseudobulk_sample <- NULL - sampleName <- NULL - cellAnno <- NULL - pseudobulk_merge_all_samples <- NULL - calc_UMAP_dbl_report <- NULL - variable_gene_list <- NULL - tar_render <- NULL - empty_droplets_report <- NULL - doublet_identification_report <- NULL - Technical_variation_report <- NULL - pseudobulk_processing_report <- NULL - - sample_column = enquo(sample_column) - # cell_type_annotation_column = enquo(cell_type_annotation_column) - - # Save inputs for passing to targets pipeline - # input_data |> CHANGE_ASSAY |> saveRDS("input_file.rds") - input_data |> saveRDS("input_file.rds") - input_reference |> saveRDS("input_reference.rds") - tissue |> saveRDS("tissue.rds") - computing_resources |> saveRDS("temp_computing_resources.rds") - filter_empty_droplets |> saveRDS("filter_empty_droplets.rds") - sample_column |> saveRDS("sample_column.rds") - cell_type_annotation_column |> saveRDS("cell_type_annotation_column.rds") - data_container_type |> saveRDS("data_container_type.rds") - debug_step |> saveRDS("debug_step_param.rds") - # Write pipeline to a file - tar_script({ - # library(targets) - # library(tarchetypes) - # library(crew) - # library(crew.cluster) - - computing_resources = readRDS("temp_computing_resources.rds") - debug_step = readRDS("debug_step_param.rds") - #-----------------------# - # Packages - #-----------------------# - tar_option_set( - packages = c( - "HPCell", - "readr", - "dplyr", - "tidyr", - "ggplot2", - "purrr", - "Seurat", - "tidyseurat", - "glue", - "scater", - "DropletUtils", - "EnsDb.Hsapiens.v86", - "here", - "stringr", - "readr", - "rlang", - "scuttle", - "scDblFinder", - "ggupset", - "tidySummarizedExperiment", - "broom", - "tarchetypes", - "SeuratObject", - "SingleCellExperiment", - "SingleR", - "celldex", - "tidySingleCellExperiment", - "tibble", - "magrittr", - "qs", - "S4Vectors", - "tarprof", - "zellkonverter" - ), - memory = "transient", - garbage_collection = TRUE, - #trust_object_timestamps = TRUE, - storage = "worker", - retrieval = "worker", - #error = "continue", - format = "qs", - debug = debug_step, # Set the target you want to debug. - # cue = tar_cue(mode = "never") # Force skip non-debugging outdated targets. - controller = computing_resources - ) - - #-----------------------# - # Future SLURM - #-----------------------# - - # library(future) - # library("future.batchtools") - # slurm <- - # `batchtools_slurm` |> - # future::tweak( template = glue("/stornext/Bioinf/data/bioinf-data/Papenfuss_lab_projects/people/mangiola.s/third_party_sofware/slurm_batchtools.tmpl"), - # resources=list( - # ncpus = 20, - # memory = 6000, - # walltime = 172800 - # ) - # ) - # plan(slurm) - - # small_slurm = - # tar_resources( - # future = tar_resources_future( - # plan = tweak( - # batchtools_slurm, - # template = "dev/slurm_batchtools.tmpl", - # resources = list( - # ncpus = 2, - # memory = 40000, - # walltime = 172800 - # ) - # ) - # ) - # ) - # - # big_slurm = - # tar_resources( - # future = tar_resources_future( - # plan = tweak( - # batchtools_slurm, - # template = "dev/slurm_batchtools.tmpl", - # resources = list( - # ncpus = 19, - # memory = 6000, - # walltime = 172800 - # ) - # ) - # ) - # ) - - target_list = list( - tar_target(file, "input_file.rds", format = "rds"), - tar_target(data_object, readRDS("input_file.rds")), - #tar_target(reference_file, "input_reference.rds", format = "rds"), - tar_target(reference_file, readRDS("input_reference.rds")), - tar_target(tissue_file, readRDS("tissue.rds")), - tar_target(filtered_file, readRDS("filter_empty_droplets.rds")), - tar_target(sample_column_file, readRDS("sample_column.rds")), - tar_target(cell_type_annotation_column_file, readRDS("cell_type_annotation_column.rds")), - tar_target(data_container_type_file, readRDS("data_container_type.rds"))) - - #-----------------------# - # Pipeline - #-----------------------# - target_list|> c(list( - - # Define input files - # tarchetypes::tar_files(name= input_track, - # data_object, - # deployment = "main"), - # tarchetypes::tar_files(name= reference_track, - # read_reference_file, - # deployment = "main"), - tar_target(filter_empty_droplets, filtered_file, deployment = "main"), - tar_target(tissue, tissue_file, deployment = "main", ), - tar_target(sample_column, sample_column_file, deployment = "main"), - tar_target(cell_type_annotation_column, cell_type_annotation_column_file, deployment = "main"), - tar_target(reference_label_coarse, reference_label_coarse_id(tissue), deployment = "main"), - tar_target(reference_label_fine, reference_label_fine_id(tissue), deployment = "main"), - # Reading input files - tar_target(file_path, data_object, pattern = map(data_object), format = "file", deployment = "main"), - tar_target(unique_tissues, - get_unique_tissues(read_data_container(file_path, container_type = data_container_type_file), sample_column |> quo_name()), - pattern = map(file_path), - iteration = "list"), - # tar_target( - # tissue_subsets, - # input_read, split.by = "Tissue"), - # pattern = map(input_read), - # iteration = "list" - # ), - tar_target(reference_read, reference_file, deployment = "main"), - - # Identifying empty droplets - tar_target(empty_droplets_tbl, - empty_droplet_id(read_data_container(file_path, container_type = data_container_type_file), filter_empty_droplets), - pattern = map(file_path), - iteration = "list"), - - # Cell cycle scoring - tar_target(cell_cycle_score_tbl, cell_cycle_scoring(read_data_container(file_path, container_type = data_container_type_file ), - empty_droplets_tbl), - pattern = map(file_path, - empty_droplets_tbl), - iteration = "list"), - - # Annotation label transfer - tar_target(annotation_label_transfer_tbl, - annotation_label_transfer(read_data_container(file_path, container_type = data_container_type_file), - empty_droplets_tbl, - reference_read), - pattern = map(file_path, - empty_droplets_tbl), - iteration = "list"), - - # Alive identification - tar_target(alive_identification_tbl, alive_identification(read_data_container(file_path, container_type = data_container_type_file), - empty_droplets_tbl, - annotation_label_transfer_tbl), - pattern = map(file_path, - empty_droplets_tbl, - annotation_label_transfer_tbl), - iteration = "list"), - - # Doublet identification - tar_target(doublet_identification_tbl, doublet_identification(read_data_container(file_path, container_type = data_container_type_file), - empty_droplets_tbl, - alive_identification_tbl, - annotation_label_transfer_tbl, - reference_label_fine), - pattern = map(file_path, - empty_droplets_tbl, - alive_identification_tbl, - annotation_label_transfer_tbl), - iteration = "list"), - - # Non-batch variation removal - tar_target(non_batch_variation_removal_S, non_batch_variation_removal(read_data_container(file_path, container_type = data_container_type_file), - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl), - pattern = map(file_path, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl), - iteration = "list"), - - # Pre-processing output - tar_target(preprocessing_output_S, preprocessing_output(tissue, - non_batch_variation_removal_S, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, - doublet_identification_tbl), - pattern = map(non_batch_variation_removal_S, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, - doublet_identification_tbl), - iteration = "list") - - # pseudobulk preprocessing for each sample - # tar_target(create_pseudobulk_sample, create_pseudobulk(preprocessing_output_S, - # assays = "SCT", - # cell_type_annotation_column, - # x = c(sampleName, cellAnno)), - # pattern = map(preprocessing_output_S), - # iteration = "list"), - # - # tar_target(pseudobulk_merge_all_samples, pseudobulk_merge(create_pseudobulk_sample, - # assays = "RNA", - # x = c(sampleName)), - # iteration = "list"), - # - # tar_target(calc_UMAP_dbl_report, calc_UMAP(input_read), - # pattern = map(input_read), - # iteration = "list"), - # tar_target(variable_gene_list, find_variable_genes(input_read, - # empty_droplets_tbl), - # pattern = map(input_read, empty_droplets_tbl), - # iteration = "list") - - # tar_render( - # name = empty_droplets_report, # The name of the target - # path = paste0(system.file(package = "HPCell"), "/rmd/Empty_droplet_report.Rmd"), - # params = list(x1 = tar_read(input_read, store = store), - # x2 = tar_read(empty_droplets_tbl, store = store), - # x3 = tar_read(annotation_label_transfer_tbl, store = store), - # x4 = tar_read(unique_tissues, store = store), - # x5 = sample_column |> quo_name()) - # ), - # tar_render( - # name = doublet_identification_report, - # path = paste0(system.file(package = "HPCell"), "/rmd/Doublet_identification_report.Rmd"), - # params = list(x1 = input_read, - # x2 = calc_UMAP_dbl_report, - # x3 = doublet_identification_tbl, - # x4 = annotation_label_transfer_tbl, - # x5 = sample_column |> quo_name(), - # x6 = cell_type_annotation_column |> quo_name()) - # ), - # tar_render( - # name = Technical_variation_report, - # path = paste0(system.file(package = "HPCell"), "/rmd/Technical_variation_report.Rmd"), - # params = list(x1= input_read, - # x2= empty_droplets_tbl, - # x3 = variable_gene_list, - # x4 = calc_UMAP_dbl_report, - # x5 = sample_column |> quo_name()) - # ), - # tar_render( - # name = pseudobulk_processing_report, - # path = paste0(system.file(package = "HPCell"), "/rmd/pseudobulk_analysis_report.Rmd"), - # params = list(x1 = pseudobulk_merge_all_samples, - # x2 = sample_column |> quo_name(), - # x3 = cell_type_annotation_column |> quo_name()) - ) - ) - }, script = glue("{store}.R"), ask = FALSE) - - #Running targets - # input_files<- c("CB150T04X__batch14.rds","CB291T01X__batch8.rds") - # run_targets <- function(input_files){ - # tar_make( - # script = glue("{store}.R"), - # store = store - # ) - # } - # run_targets(input_files) - - tar_make( - script = glue("{store}.R"), - store = store, - callr_function = NULL - ) - # tar_make_future( - # script = glue("{store}.R"), - # store = store, - # workers = 200, - # garbage_collection = TRUE - # ) - - message(glue("HPCell says: you can read your output executing tar_read(preprocessing_output_S, store = \"{store}\") ")) - #tar_meta_download(store = store) - metadata<- tar_meta(store = store) - return(metadata) - #tar_read(preprocessing_output_S, store = store) - -} - -## my_results = run_targets_pipeline(..) \ No newline at end of file diff --git a/R/targets_functions.R b/R/targets_functions.R index 1dc4fe7d..87c498d6 100644 --- a/R/targets_functions.R +++ b/R/targets_functions.R @@ -147,7 +147,7 @@ map2_test_differential_abundance_hpc = function( # Dispersion tar_target( pseudobulk_df_tissue_dispersion, - # pseudobulk_df_tissue |> map_add_dispersion_to_se(data, formula, abundance), + pseudobulk_df_tissue |> map_add_dispersion_to_se(data, formula, abundance), pattern = map(pseudobulk_df_tissue), iteration = "group" ), diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 1dbc5a5c..c167e5d6 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -156,10 +156,17 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, assay(input_read_RNA_assay, assay_name) <- counts # Remove cells with zero total counts + # !!! MAYBE WE SHOULD LKEEP THESE CELLS AND LEAVE THEM TO THE FILTERING STEP input_read_RNA_assay <- input_read_RNA_assay[, colSums(counts) > 0] if (ncol(input_read_RNA_assay) == 0) return(NULL) + # Rebuild the SCE to stay light, and to set the assay with the right name + input_read_RNA_assay = SingleCellExperiment( + assays = list(X = input_read_RNA_assay |> assay() ), + colData = colData(input_read_RNA_assay) + ) + # Return the modified data object input_read_RNA_assay |> diff --git a/R/utilities.R b/R/utilities.R index 3c6531b4..9a5a1bc4 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -2877,14 +2877,17 @@ compute_mode_delayedarray <- function(delayed_array) { #' @importFrom SummarizedExperiment assay #' #' @noRd -check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY <- function(input_read_RNA_assay, assay_name) { +check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY <- function(input_read_RNA_assay, assay_name, subset_up_to_number_of_cells = dim(input_read_RNA_assay)[2]) { + + # Do now overshoor the number of cells + subset_up_to_number_of_cells = subset_up_to_number_of_cells |> min(dim(input_read_RNA_assay)[2]) # Check if object is SCE or Seurat if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { # For SingleCellExperiment assay_data <- assay(input_read_RNA_assay, assay_name) - my_min = min(assay_data) + my_min = min(assay_data[, 1:subset_up_to_number_of_cells]) # Check if all values are > 0 if (my_min > 0) { From bc7add161941ae354f5180406562b39cb7b3e368 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 9 Dec 2024 09:49:56 +1100 Subject: [PATCH 089/145] update --- R/tranform_assay.R | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 9c155612..3228dee8 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -23,7 +23,6 @@ transform_assay.HPCell = function( # Track the file hpc_single("transform_file", "temp_fx.rds", format = "file") |> - hpc_iterate( target_output = "transform", user_function = readRDS |> quote() , @@ -40,7 +39,7 @@ transform_assay.HPCell = function( transform_fx = "transform" |> is_target() , external_path = glue("{input_hpc$initialisation$store}/external") |> as.character(), container_type = "data_container_type" |> is_target() - + ) } @@ -69,7 +68,7 @@ transform_assay.HPCell = function( #' #' @export transform_utility = function(input_read_RNA_assay, transform_fx, external_path, container_type) { - + numer_of_cells_to_sample = 5e3 if(ncol(input_read_RNA_assay) == 0) return(NULL) @@ -130,26 +129,23 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # Find the mode (peak) value of the counts mode_value <- density_est$x[which.max(density_est$y)] - # If the mode value is negative, shift counts and counts used for estimation to make the mode zero + # If the mode value is negative, shift counts to make the mode zero if (mode_value < 0) { counts <- counts + abs(mode_value) - counts_light_for_checks_apply_mode <- counts_light_for_checks + abs(mode_value) - } else {counts_light_for_checks_apply_mode <- counts_light_for_checks} + } # Round counts to avoid potential subtraction errors due to floating-point precision counts <- round(counts, 5) - counts_light_for_checks_apply_mode <- round(counts_light_for_checks_apply_mode, 5) # Find the most frequent count value (mode) in the counts - majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks_apply_mode)$mode + majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks)$mode # Subtract the mode value from counts if it is not zero if (majority_gene_counts != 0) { counts <- counts - majority_gene_counts } - # Replace negative counts with zero to avoid downstream failures. - # Use counts_light_for_checks here instead of the potential shifted value + # Replace negative counts with zero to avoid downstream failures if (min(counts_light_for_checks) < 0) { counts[counts < 0] <- 0 } @@ -207,6 +203,5 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # file_name = paste0(file_name, extension) # Return data as target instead of file_name pointer - + } - From 410845d5f0a377440c098926bd4796f10d7d6008 Mon Sep 17 00:00:00 2001 From: William Hutchison Date: Wed, 11 Dec 2024 13:42:06 +1100 Subject: [PATCH 090/145] Fix incorrect variables passed to functions --- R/functions.R | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/R/functions.R b/R/functions.R index 9518b4e6..a8945f2c 100644 --- a/R/functions.R +++ b/R/functions.R @@ -978,7 +978,7 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # avoid small number of cells if (!is.null(empty_droplets_tbl)) { - filtered_counts <- input_read_RNA_assay_transform |> + filtered_counts <- input_read_RNA_assay |> left_join(empty_droplets_tbl, by = ".cell") |> dplyr::filter(!empty_droplet) } @@ -1009,9 +1009,8 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # Normalise RNA normalized_rna <- - input_read_RNA_assay |> - Seurat::SCTransform( - counts, + counts |> + Seurat::SCTransform( assay=assay, return.only.var.genes=FALSE, residual.features = NULL, From 993e2b3fbdd0a3d62e5e59da90b56cf2c5fe5ef2 Mon Sep 17 00:00:00 2001 From: William Hutchison Date: Wed, 11 Dec 2024 13:45:55 +1100 Subject: [PATCH 091/145] Create SCT assay before attempting assignment --- R/functions.R | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/R/functions.R b/R/functions.R index a8945f2c..91a52ada 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1108,9 +1108,11 @@ preprocessing_output <- function(input_read_RNA_assay, # Add normalisation if(!is.null(non_batch_variation_removal_S)){ - if(input_read_RNA_assay |> is("Seurat")) - input_read_RNA_assay[["SCT"]] = non_batch_variation_removal_S - else if(input_read_RNA_assay |> is("SingleCellExperiment")){ + if(input_read_RNA_assay |> is("Seurat")) { + non_batch_variation_removal_S_assay <- CreateAssay5Object(data = non_batch_variation_removal_S) + input_read_RNA_assay[["SCT"]] <- non_batch_variation_removal_S_assay + + } else if(input_read_RNA_assay |> is("SingleCellExperiment")){ message("HPCell says: in order to attach SCT assay to the SingleCellExperiment, SCT was added to external experiments slot") #input_read_RNA_assay = input_read_RNA_assay[rownames(non_batch_variation_removal_S), # altExp(input_read_RNA_assay) = SingleCellExperiment(assay = list(SCT = non_batch_variation_removal_S)) From 9211c512c776542b8faa05e3e523400b93c17da7 Mon Sep 17 00:00:00 2001 From: William Hutchison Date: Wed, 11 Dec 2024 14:09:44 +1100 Subject: [PATCH 092/145] Prevent error when cell annotations are unavailable --- R/functions.R | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/R/functions.R b/R/functions.R index 91a52ada..697f0311 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1146,10 +1146,12 @@ preprocessing_output <- function(input_read_RNA_assay, ) # Attach annotation - if (inherits(annotation_label_transfer_tbl, "tbl_df")){ - input_read_RNA_assay <- input_read_RNA_assay |> - left_join(annotation_label_transfer_tbl, by = ".cell") - } + try({ + if (inherits(annotation_label_transfer_tbl, "tbl_df")){ + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(annotation_label_transfer_tbl, by = ".cell") + } + }, silent = TRUE) input_read_RNA_assay From 38804221b66a2af3bf100801d3a20624b1b7fc21 Mon Sep 17 00:00:00 2001 From: William Hutchison Date: Wed, 11 Dec 2024 14:16:00 +1100 Subject: [PATCH 093/145] Remove NaN features from SCT assay --- R/functions.R | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/R/functions.R b/R/functions.R index 697f0311..8481b606 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1021,15 +1021,17 @@ non_batch_variation_removal <- function(input_read_RNA_assay, min_cells=0, ) |> GetAssayData(assay="SCT") - - + + # Remove NaN features from SCT assay + normalized_rna_filtered <- normalized_rna[!apply(normalized_rna, 1, function(row) all(is.nan(row))), ] + if (class_input == "SingleCellExperiment") { - write_HDF5_array_safe(normalized_rna, "SCT", external_path) + write_HDF5_array_safe(normalized_rna_filtered, "SCT", external_path) } else if (class_input == "Seurat") { - normalized_rna + normalized_rna_filtered } From 369d98ba0fe12342760f696743b6e67fa5e2f8ae Mon Sep 17 00:00:00 2001 From: William Hutchison Date: Wed, 11 Dec 2024 14:30:52 +1100 Subject: [PATCH 094/145] Version up --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index f5e27f10..1044cdae 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.11 +Version: 0.3.12 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", From 1cab8530fc5cd9ed53af2b6494dfaded6f0332d2 Mon Sep 17 00:00:00 2001 From: William Hutchison Date: Wed, 11 Dec 2024 14:37:14 +1100 Subject: [PATCH 095/145] Remove undefined function export --- NAMESPACE | 1 - man/run_targets_pipeline.Rd | 57 ------------------------------------- 2 files changed, 58 deletions(-) delete mode 100644 man/run_targets_pipeline.Rd diff --git a/NAMESPACE b/NAMESPACE index e494269d..a98c129a 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -63,7 +63,6 @@ export(remove_dead_scuttle) export(remove_doublets_scDblFinder) export(remove_empty_DropletUtils) export(remove_empty_threshold) -export(run_targets_pipeline) export(save_experiment_data) export(score_cell_cycle_seurat) export(se_add_dispersion) diff --git a/man/run_targets_pipeline.Rd b/man/run_targets_pipeline.Rd deleted file mode 100644 index c1ba5b74..00000000 --- a/man/run_targets_pipeline.Rd +++ /dev/null @@ -1,57 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/execute_pipeline.R -\name{run_targets_pipeline} -\alias{run_targets_pipeline} -\title{Run Targets Pipeline for HPCell} -\usage{ -run_targets_pipeline( - input_data, - store = "./", - input_reference = NULL, - tissue, - computing_resources = crew_controller_local(workers = 1), - debug_step = NULL, - filter_empty_droplets = NULL, - RNA_assay_name = "RNA", - sample_column = "sample", - cell_type_annotation_column = "Cell_type_in_each_tissue", - data_container_type -) -} -\arguments{ -\item{input_data}{Input data for the pipeline.} - -\item{store}{Directory path for storing the pipeline files.} - -\item{input_reference}{Optional reference data.} - -\item{tissue}{Tissue type for the analysis.} - -\item{computing_resources}{Configuration for computing resources.} - -\item{debug_step}{Optional step for debugging.} - -\item{filter_empty_droplets}{Flag to indicate if input filtering is needed.} - -\item{RNA_assay_name}{Name of the RNA assay.} - -\item{sample_column}{Column name for sample identification.} - -\item{cell_type_annotation_column}{Column name for cell type annotation in input data} - -\item{data_container_type}{A character vector of length one specifies the input data type.} - -\item{profiler}{Optional step for profilling. Default is FALSE -data type can be one of the following: anndata for annotated data mainly used in python. -sce_rds and seurat_rds for \code{SingleCellExperiment} and \code{Seurat} RDS format representively -seurat_rds for \code{Seurat} RDS format. -sce_hdf5 for \code{SingleCellExperiment} HDF5 format -seurat_hdf5 for \code{Seurat} HDF5 format} -} -\value{ -The output of the \code{targets} pipeline, typically a pre-processed data set. -} -\description{ -This function sets up and executes a \code{targets} pipeline for HPCell. It saves input data and configurations, -writes a pipeline script, and runs the pipeline using the 'targets' package. -} From 3772e8423d3c035eb627eed145cb07328b058b12 Mon Sep 17 00:00:00 2001 From: William Hutchison Date: Wed, 11 Dec 2024 14:37:32 +1100 Subject: [PATCH 096/145] Version up --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 1044cdae..e923ae23 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.12 +Version: 0.3.13 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", From ccd92d6f92ad46fc3fd89068ca0a7709b47d4c19 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Thu, 12 Dec 2024 13:09:45 +1030 Subject: [PATCH 097/145] Stefano's changes made directly on Github --- R/functions.R | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/R/functions.R b/R/functions.R index 8481b606..22bf9453 100644 --- a/R/functions.R +++ b/R/functions.R @@ -970,7 +970,7 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # Rename assay assay_name_old = input_read_RNA_assay |> Assays() |> _[[1]] - input_read_RNA_assay_transform = input_read_RNA_assay |> + input_read_RNA_assay = input_read_RNA_assay |> RenameAssays( assay.name = assay_name_old, new.assay.name = assay) @@ -978,21 +978,23 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # avoid small number of cells if (!is.null(empty_droplets_tbl)) { - filtered_counts <- input_read_RNA_assay |> + input_read_RNA_assay <- input_read_RNA_assay |> left_join(empty_droplets_tbl, by = ".cell") |> dplyr::filter(!empty_droplet) } - - counts = - filtered_counts |> + + if (!is.null(alive_identification_tbl)) { + input_read_RNA_assay = + input_read_RNA_assay |> left_join( alive_identification_tbl |> select(.cell, any_of(factors_to_regress)), by=".cell" ) + } if(!is.null(cell_cycle_score_tbl)) - counts = counts |> + input_read_RNA_assay = input_read_RNA_assay |> left_join( cell_cycle_score_tbl |> @@ -1005,11 +1007,11 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # variable_features = readRDS(input_path_merged_variable_genes) # # # Set variable features - # VariableFeatures(counts) = variable_features + # VariableFeatures(input_read_RNA_assay) = variable_features # Normalise RNA - normalized_rna <- - counts |> + input_read_RNA_assay <- + input_read_RNA_assay |> Seurat::SCTransform( assay=assay, return.only.var.genes=FALSE, @@ -1018,20 +1020,23 @@ non_batch_variation_removal <- function(input_read_RNA_assay, vst.flavor = "v2", scale_factor=2186, conserve.memory=T, - min_cells=0, + min_cells=0 ) |> GetAssayData(assay="SCT") - - # Remove NaN features from SCT assay - normalized_rna_filtered <- normalized_rna[!apply(normalized_rna, 1, function(row) all(is.nan(row))), ] if (class_input == "SingleCellExperiment") { - - write_HDF5_array_safe(normalized_rna_filtered, "SCT", external_path) + + if(input_read_RNA_assay[,1,drop=FALSE] |> is.nan() |> any()) + warning("HPCell says: some features might be all 0s, NaN are added by Seurat in the SCT assay, and kept in the assay because SingleCellExperiment requires same feature set for all assays.") + + write_HDF5_array_safe(input_read_RNA_assay, "SCT", external_path) } else if (class_input == "Seurat") { - - normalized_rna_filtered + + # Remove NaN features from SCT assay + input_read_RNA_assay <- input_read_RNA_assay[!apply(input_read_RNA_assay, 1, function(row) all(is.nan(row))), ] + + input_read_RNA_assay } From c7427aa871ee1f6f0ac01af5dbcf17279e914dd7 Mon Sep 17 00:00:00 2001 From: myushen Date: Fri, 13 Dec 2024 15:50:38 +1100 Subject: [PATCH 098/145] fix transform majority counts in estimation --- R/tranform_assay.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 3228dee8..8498a640 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -74,7 +74,8 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, if(ncol(input_read_RNA_assay) == 0) return(NULL) # Rename assay names to for consistency - if (names(assays(input_read_RNA_assay)) != "X") names(assays(input_read_RNA_assay)) <- "X" + if (length(names(assays(input_read_RNA_assay))) == 1 && + names(assays(input_read_RNA_assay)) != "X") names(assays(input_read_RNA_assay)) <- "X" # strip metadata that we don't need input_read_RNA_assay = @@ -132,10 +133,12 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # If the mode value is negative, shift counts to make the mode zero if (mode_value < 0) { counts <- counts + abs(mode_value) + counts_light_for_checks = counts_light_for_checks + abs(mode_value) } # Round counts to avoid potential subtraction errors due to floating-point precision counts <- round(counts, 5) + counts_light_for_checks = round(counts_light_for_checks, 5) # Find the most frequent count value (mode) in the counts majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks)$mode From 6f96fcc074ef9b9a01fcf80a03fbf3e26cd0db2e Mon Sep 17 00:00:00 2001 From: myushen Date: Sun, 15 Dec 2024 11:32:31 +1100 Subject: [PATCH 099/145] split metacell function --- R/functions.R | 571 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 496 insertions(+), 75 deletions(-) diff --git a/R/functions.R b/R/functions.R index 9d4368b9..9e955d36 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1049,47 +1049,53 @@ non_batch_variation_removal <- function(input_read_RNA_assay, # # Drop alive columns # select(-subsets_Ribo_percent, -subsets_Mito_percent, -G2M.Score) # } - - - - - } -#' Metacell Clustering -#' -#' @description -#' This function processes single-cell RNA sequencing data to cluster cells into metacells, -#' a higher resolution of clustering that groups cells sharing similar gene expression patterns. -#' -#' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing RNA assay data. -#' @param empty_droplets_tbl A tibble identifying empty droplets. -#' @param alive_identification_tbl A tibble from alive cell identification. -#' @param cell_cycle_score_tbl A tibble from cell cycle scoring. -#' @param assay assay used, default = "RNA" -#' -#' @return A tibble with column 'cell' and 'membership' indicating which metacell cluster each cell belongs to. +#' Preprocess metacells with the SuperCell approach +#' +#' This function preprocesses a single-cell gene expression matrix for downstream simplification using PCA +#' and k-nearest neighbor (kNN) graph construction. It includes options for scaling, feature selection, +#' approximate sampling, and PCA computation methods. #' -#' @importFrom dplyr left_join filter -#' @importFrom Seurat NormalizeData FindVariableFeatures ScaleData RunPCA RunUMAP -#' @importFrom SummarizedExperiment assay assay<- -#' @importFrom magrittr extract2 -#' @export -cluster_metacell <- function(input_read_RNA_assay, - empty_droplets_tbl = NULL, - alive_identification_tbl = NULL, - cell_cycle_score_tbl = NULL, - assay = NULL){ +#' @param normalized_rna log-normalized gene expression matrix with rows to be genes and cols to be cells +#' @param genes.use a vector of genes used to compute PCA +#' @param genes.exclude a vector of genes to be excluded when computing PCA +#' @param n.var.genes if \code{"genes.use"} is not provided, \code{"n.var.genes"} genes with the largest variation are used +#' @param k.knn parameter to compute single-cell kNN network +#' @param do.scale whether to scale gene expression matrix when computing PCA +#' @param n.pc number of principal components to use for construction of single-cell kNN network +#' @param fast.pca use \link[irlba]{irlba} as a faster version of prcomp (one used in Seurat package) +#' @param do.approx compute approximate kNN in case of a large dataset (>50'000) +#' @param approx.N number of cells to subsample for an approximate approach. By default, 5000 cells are used +#' for approximation to capture biological meaningful result. +#' @param seed seed to use to subsample cells for an approximate approach +#' @param ... other parameters of \link{build_knn_graph} function +#' @return A list of variables to be passed to the `SuperCell::SCimplify` gamma involved function. +#' @importFrom Matrix t +#' @importFrom stats var prcomp +#' @importFrom irlba irlba +#' @importFrom SuperCell build_knn_graph +preprocess_SCimplify <- function(input_read_RNA_assay, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + assay = NULL, + genes.use = NULL, + genes.exclude = NULL, + n.var.genes = min(1000, nrow(normalized_rna)), + k.knn = 5, + do.scale = TRUE, + n.pc = 10, + fast.pca = TRUE, + do.approx = FALSE, + approx.N = 5000, + seed = 12345, + ...){ + #Fix GChecks empty_droplet = NULL .cell <- NULL - # Metacell config - gamma = 50 # the requested graining level. - k_knn = 30 # the number of neighbors considered to build the knn network. - nb_var_genes = 2000 # number of the top variable genes to use for dimensionality reduction - nb_pc = 50 # the number of principal components to use. - # Your code for non_batch_variation_removal function here class_input = input_read_RNA_assay |> class() @@ -1125,7 +1131,7 @@ cluster_metacell <- function(input_read_RNA_assay, by=".cell" ) } - + if(!is.null(cell_cycle_score_tbl)) input_read_RNA_assay_transform = input_read_RNA_assay_transform |> @@ -1134,9 +1140,7 @@ cluster_metacell <- function(input_read_RNA_assay, by=".cell" ) - - # Normalise RNA - # (To Do: Let users decide the normalisation factors OR supercell factors by ellipsis) + # Normalise and scale normalized_rna <- input_read_RNA_assay |> NormalizeData(normalization.method = "LogNormalize") |> @@ -1146,51 +1150,468 @@ cluster_metacell <- function(input_read_RNA_assay, RunUMAP(reduction = "pca", dims = c(1:30), n.neighbors = 30, verbose = F) - MC <- SuperCell::SCimplify(Seurat::GetAssayData(normalized_rna, slot = "data"), # single-cell log-normalized gene expression data - k.knn = k_knn, - gamma = gamma, - n.var.genes = nb_var_genes, - n.pc = nb_pc, - genes.use = Seurat::VariableFeatures(normalized_rna) - ) + N.c <- ncol(normalized_rna) - # MC.GE <- supercell_GE(Seurat::GetAssayData(normalized_rna, slot = "counts"), - # MC$membership, - # mode = "sum") - # - # # Construct the object using metacell - # colnames(MC.GE) <- as.character(1:ncol(MC.GE)) - # MC.seurat <- CreateSeuratObject(counts = MC.GE, - # meta.data = data.frame(size = as.vector(table(MC$membership))) - # ) - # MC.seurat[[annotation_label]] <- MC$annotation - # - # # save single-cell membership to metacells in the MC.seurat object - # MC.seurat@misc$cell_membership <- data.frame(row.names = names(MC$membership), membership = MC$membership) - # MC.seurat@misc$var_features <- MC$genes.use - # - # # Save the PCA components and genes used in SCimplify - # PCA.res <- irlba::irlba(scale(Matrix::t(se.data@assays$RNA@data[MC$genes.use, ])), nv = nb_pc) - # pca.x <- PCA.res$u %*% diag(PCA.res$d) - # rownames(pca.x) <- colnames(se.data@assays$RNA@data) - # MC.seurat@misc$sc.pca <- CreateDimReducObject( - # embeddings = pca.x, - # loadings = PCA.res$v, - # key = "PC_", - # assay = "RNA" - # ) + # if(gamma > 100 & N.c < 100000){ + # warning(paste0("Graining level (gamma = ", gamma, ") seems to be very large! Please, consider using smaller gamma, the suggested range is 10-50.")) + # } + + if(is.null(rownames(normalized_rna))){ + if(!(is.null(genes.use) | is.null(genes.exclude))){ + stop("rownames(normalized_rna) is Null \nGene expression matrix normalized_rna is expected to have genes as rownames") + } else { + warning("colnames(normalized_rna) is Null, \nGene expression matrix normalized_rna is expected to have genes as rownames! \ngenes will be created automatically in a form 'gene_i' ") + rownames(normalized_rna) <- paste("gene", 1:nrow(normalized_rna), sep = "_") + } + } + + if(is.null(colnames(normalized_rna))){ + warning("colnames(normalized_rna) is Null, \nGene expression matrix normalized_rna is expected to have cellIDs as colnames! \nCellIDs will be created automatically in a form 'cell_i' ") + colnames(normalized_rna) <- paste("cell", 1:N.c, sep = "_") + } + + cell.ids <- colnames(normalized_rna) + + keep.genes <- setdiff(rownames(normalized_rna), genes.exclude) + normalized_rna <- normalized_rna[keep.genes,] + + + if(is.null(genes.use)){ + n.var.genes <- min(n.var.genes, nrow(normalized_rna)) + if(N.c > 50000){ + set.seed(seed) + idx <- sample(N.c, 50000) + gene.var <- apply(normalized_rna[,idx], 1, stats::var) + } else { + gene.var <- apply(normalized_rna, 1, stats::var) + } + + genes.use <- names(sort(gene.var, decreasing = TRUE))[1:n.var.genes] + } + + if(length(intersect(genes.use, genes.exclude)) > 0){ + stop("Sets of genes.use and genes.exclude have non-empty intersection") + } + + genes.use <- genes.use[genes.use %in% rownames(normalized_rna)] + normalized_rna <- normalized_rna[genes.use,] + + if(do.approx & approx.N >= N.c){ + do.approx <- FALSE + warning("approx.N is larger or equal to the number of single cells, thus, an exact simplification will be performed") + } + + # if(do.approx & (approx.N < round(N.c/gamma))){ + # approx.N <- round(N.c/gamma) + # warning(paste("approx.N is set to N.SC", approx.N)) + # } # - # MC.seurat[["RNA"]] <- as(object = MC.seurat[["RNA"]], Class = "Assay") + # if(do.approx & ((N.c/gamma) > (approx.N/3))){ + # warning("approx.N is not much larger than desired number of super-cells, so an approximate simplification may take londer than an exact one!") + # } - # Return a tibble showing which cell belongs to which metacell cluster - metacell_classification <- tibble(cell = MC$membership |> names(), - membership = MC$membership) + if(do.approx){ + set.seed(seed) + approx.N <- min(approx.N, N.c) + presample <- sample(1:N.c, size = approx.N, replace = FALSE) + presampled.cell.ids <- cell.ids[sort(presample)] + rest.cell.ids <- setdiff(cell.ids, presampled.cell.ids) + } else { + presampled.cell.ids <- cell.ids + rest.cell.ids <- c() + } - metacell_classification + normalized_rna.for.pca <- Matrix::t(normalized_rna[genes.use, presampled.cell.ids]) + if(do.scale){ normalized_rna.for.pca <- scale(normalized_rna.for.pca) } + normalized_rna.for.pca[is.na(normalized_rna.for.pca)] <- 0 + + if(is.null(n.pc[1]) | min(n.pc) < 1){stop("Please, provide a range or a number of components to use: n.pc")} + if(length(n.pc)==1) n.pc <- 1:n.pc + + if(fast.pca & (N.c < 1000)){ + warning("Normal pca is computed because number of cell is low for irlba::irlba()") + fast.pca <- FALSE + } + + if(!fast.pca){ + PCA.presampled <- stats::prcomp(normalized_rna.for.pca, rank. = max(n.pc), scale. = F, center = F) + } else { + set.seed(seed) + PCA.presampled <- irlba::irlba(normalized_rna.for.pca, nv = max(n.pc, 25)) + PCA.presampled$x <- PCA.presampled$u %*% diag(PCA.presampled$d) + PCA.presampled$rotation <- PCA.presampled$v + } + + + sc.nw <- SuperCell::build_knn_graph( + normalized_rna = PCA.presampled$x[,n.pc], + k = k.knn, from = "coordinates", + #use.nn2 = use.nn2, + dist_method = "euclidean", + #directed = directed, + #DoSNN = DoSNN, + #pruning = pruning, + #which.snn = which.snn, + #kmin = kmin, + ... + ) + + list(sc.nw = sc.nw, PCA.presampled = PCA.presampled, + normalized_rna.for.pca = normalized_rna.for.pca, presampled.cell.ids = presampled.cell.ids, + rest.cell.ids = rest.cell.ids, genes.use = genes.use, cell.ids = cell.ids, + do.approx = do.approx, n.pc = n.pc, k.knn = k.knn) + +} + +#' Detection of metacells with the SuperCell approach +#' +#' This function detects metacells (former super-cells) from single-cell gene expression matrix +#' +#' +#' @param preprocessed A list returned by `preprocess_SCimplify` containing preprocessed single-cell data, +#' PCA results, and kNN graph. +#' @param cell.annotation a vector of cell type annotation, if provided, metacells that contain single cells of different cell type annotation will be split in multiple pure metacell (may result in slightly larger numbe of metacells than expected with a given gamma) +#' @param cell.split.condition a vector of cell conditions that must not be mixed in one metacell. If provided, metacells will be split in condition-pure metacell (may result in significantly(!) larger number of metacells than expected) +#' @param gamma graining level of data (proportion of number of single cells in the initial dataset to the number of metacells in the final dataset) +#' @param block.size number of cells to map to the nearest metacell at the time (for approx coarse-graining) +#' @param igraph.clustering clustering method to identify metacells (available methods "walktrap" (default) and "louvain" (not recommended, gamma is ignored)). +#' @param return.singlecell.NW whether return single-cell network (which consists of approx.N if \code{"do.approx"} or all cells otherwise) +#' @param return.hierarchical.structure whether return hierarchical structure of metacell +#' @param ... other parameters of \link{build_knn_graph} function +#' +#' @return A tibble with column 'cell' and 'membership' indicating which metacell cluster each cell belongs to. +#' @importFrom igraph cluster_walktrap cluster_louvain contract simplify E V +#' @importFrom Matrix t +#' @importFrom proxy dist +SCimplify <- function(preprocessed, + cell.annotation = NULL, + cell.split.condition = NULL, + gamma, + block.size = 10000, + igraph.clustering = c("walktrap", "louvain"), + return.singlecell.NW = TRUE, + return.hierarchical.structure = TRUE, + ...) { + + sc.nw = preprocessed$sc.nw + PCA.presampled = preprocessed$PCA.presampled + normalized_rna.for.pca = preprocessed$normalized_rna.for.pca + presampled.cell.ids = preprocessed$presampled.cell.ids + rest.cell.ids = preprocessed$rest.cell.ids + genes.use = preprocessed$genes.use + cell.ids = preprocessed$cell.ids + do.approx = preprocessed$do.approx + n.pc = preprocessed$n.pc + k.knn = preprocessed$k.knn + #normalized_rna = preprocessed$normalized_rna + + N.c <- length(preprocessed$cell.ids) + + k <- round(N.c / gamma) + + if (igraph.clustering[1] == "walktrap") { + g.s <- igraph::cluster_walktrap(sc.nw$graph.knn) + g.s$membership <- igraph::cut_at(g.s, k) + + } else if (igraph.clustering[1] == "louvain") { + warning(paste( + "igraph.clustering =", + igraph.clustering, + ", gamma is ignored" + )) + g.s <- igraph::cluster_louvain(sc.nw$graph.knn) + + } else { + stop( + paste( + "Unknown clustering method (", + igraph.clustering, + "), please use louvain or walkrtap" + ) + ) + } + + membership.presampled <- g.s$membership + names(membership.presampled) <- presampled.cell.ids + + ## Split super-cells containing cells from different annotations or conditions + if (!is.null(cell.annotation) | !is.null(cell.split.condition)) { + if (is.null(cell.annotation)) + cell.annotation <- rep("a", N.c) + if (is.null(cell.split.condition)) + cell.split.condition <- rep("s", N.c) + names(cell.annotation) <- names(cell.split.condition) <- cell.ids + + split.cells <- interaction(cell.annotation[presampled.cell.ids], cell.split.condition[presampled.cell.ids], drop = TRUE) + + membership.presampled.intr <- interaction(membership.presampled, split.cells, drop = TRUE) + membership.presampled <- as.numeric(membership.presampled.intr) + names(membership.presampled) <- presampled.cell.ids + } + + + + SC.NW <- igraph::contract(sc.nw$graph.knn, membership.presampled) + if (!do.approx) { + SC.NW <- igraph::simplify(SC.NW, + remove.loops = T, + edge.attr.comb = "sum") + } + + if (do.approx) { + PCA.averaged.SC <- as.matrix(Matrix::t(supercell_GE(t( + PCA.presampled$x[, n.pc] + ), groups = membership.presampled))) + normalized_rna.for.roration <- Matrix::t(normalized_rna[genes.use, rest.cell.ids]) + + + + if (do.scale) { + normalized_rna.for.roration <- scale(normalized_rna.for.roration) + } + normalized_rna.for.roration[is.na(normalized_rna.for.roration)] <- 0 + + + membership.omitted <- c() + if (is.null(block.size) | is.na(block.size)) + block.size <- 10000 + + N.blocks <- length(rest.cell.ids) %/% block.size + if (length(rest.cell.ids) %% block.size > 0) + N.blocks <- N.blocks + 1 + + + if (N.blocks > 0) { + for (i in 1:N.blocks) { + # compute knn by blocks + idx.begin <- (i - 1) * block.size + 1 + idx.end <- min(i * block.size, length(rest.cell.ids)) + + cur.rest.cell.ids <- rest.cell.ids[idx.begin:idx.end] + + PCA.ommited <- normalized_rna.for.roration[cur.rest.cell.ids, ] %*% PCA.presampled$rotation[, n.pc] ### + + D.omitted.subsampled <- proxy::dist(PCA.ommited, PCA.averaged.SC) ### + + membership.omitted.cur <- apply(D.omitted.subsampled, 1, which.min) ### + names(membership.omitted.cur) <- cur.rest.cell.ids ### + + membership.omitted <- c(membership.omitted, membership.omitted.cur) + } + } + + membership.all_ <- c(membership.presampled, membership.omitted) + membership.all <- membership.all_ + + + names_membership.all <- names(membership.all_) + ## again split super-cells containing cells from different annotation or split conditions + if (!is.null(cell.annotation) | !is.null(cell.split.condition)) { + split.cells <- interaction(cell.annotation[names_membership.all], cell.split.condition[names_membership.all], drop = TRUE) + + + membership.all.intr <- interaction(membership.all_, split.cells, drop = TRUE) + + membership.all <- as.numeric(membership.all.intr) + + } + + + SC.NW <- igraph::simplify(SC.NW, + remove.loops = T, + edge.attr.comb = "sum") + names(membership.all) <- names_membership.all + membership.all <- membership.all[cell.ids] + + } else { + membership.all <- membership.presampled[cell.ids] + } + membership <- membership.all + + supercell_size <- as.vector(table(membership)) + + igraph::E(SC.NW)$width <- sqrt(igraph::E(SC.NW)$weight / 10) + + if (igraph::vcount(SC.NW) == length(supercell_size)) { + igraph::V(SC.NW)$size <- supercell_size + igraph::V(SC.NW)$sizesqrt <- sqrt(igraph::V(SC.NW)$size) + } else { + igraph::V(SC.NW)$size <- as.vector(table(membership.all_)) + igraph::V(SC.NW)$sizesqrt <- sqrt(igraph::V(SC.NW)$size) + warning("Supercell graph was not splitted") + } + + res <- list( + graph.supercells = SC.NW, + gamma = gamma, + N.SC = length(unique(membership)), + membership = membership, + supercell_size = supercell_size, + genes.use = genes.use, + simplification.algo = igraph.clustering[1], + do.approx = do.approx, + n.pc = n.pc, + k.knn = k.knn, + sc.cell.annotation. = cell.annotation, + sc.cell.split.condition. = cell.split.condition + ) + + if (return.singlecell.NW) { + res$graph.singlecell <- sc.nw$graph.knn + } + if (!is.null(cell.annotation) | !is.null(cell.split.condition)) { + res$SC.cell.annotation. <- supercell_assign(cell.annotation, res$membership) + res$SC.cell.split.condition. <- supercell_assign(cell.split.condition, res$membership) + } + + if (igraph.clustering[1] == "walktrap" & + return.hierarchical.structure) + res$h_membership <- g.s + + metacell_classification <- tibble(cell = res$membership |> names(), + membership = res$membership) + + metacell_classification } + +#' #' Metacell Clustering +#' #' +#' #' @description +#' #' This function processes single-cell RNA sequencing data to cluster cells into metacells, +#' #' a higher resolution of clustering that groups cells sharing similar gene expression patterns. +#' #' +#' #' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing RNA assay data. +#' #' @param empty_droplets_tbl A tibble identifying empty droplets. +#' #' @param alive_identification_tbl A tibble from alive cell identification. +#' #' @param cell_cycle_score_tbl A tibble from cell cycle scoring. +#' #' @param assay assay used, default = "RNA" +#' #' +#' #' @return A tibble with column 'cell' and 'membership' indicating which metacell cluster each cell belongs to. +#' #' +#' #' @importFrom dplyr left_join filter +#' #' @importFrom Seurat NormalizeData FindVariableFeatures ScaleData RunPCA RunUMAP +#' #' @importFrom SummarizedExperiment assay assay<- +#' #' @importFrom magrittr extract2 +#' #' @export +#' cluster_metacell <- function(input_read_RNA_assay, +#' empty_droplets_tbl = NULL, +#' alive_identification_tbl = NULL, +#' cell_cycle_score_tbl = NULL, +#' assay = NULL){ +#' #Fix GChecks +#' empty_droplet = NULL +#' .cell <- NULL +#' +#' # Metacell config +#' gamma = 50 # the requested graining level. +#' k_knn = 30 # the number of neighbors considered to build the knn network. +#' nb_var_genes = 2000 # number of the top variable genes to use for dimensionality reduction +#' nb_pc = 50 # the number of principal components to use. +#' +#' # Your code for non_batch_variation_removal function here +#' class_input = input_read_RNA_assay |> class() +#' +#' # Get assay +#' if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) +#' +#' if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { +#' assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") +#' +#' input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, +#' counts = assay) +#' +#' # Rename assay +#' assay_name_old = DefaultAssay(input_read_RNA_assay) +#' input_read_RNA_assay_transform = input_read_RNA_assay |> +#' RenameAssays( +#' assay.name = assay_name_old, +#' new.assay.name = assay) +#' } +#' +#' # avoid small number of cells +#' if (!is.null(empty_droplets_tbl)) { +#' input_read_RNA_assay_transform <- input_read_RNA_assay_transform |> +#' left_join(empty_droplets_tbl, by = ".cell") |> +#' dplyr::filter(!empty_droplet) +#' } +#' +#' if (!is.null(alive_identification_tbl)) { +#' input_read_RNA_assay_transform = +#' input_read_RNA_assay_transform |> +#' left_join( +#' alive_identification_tbl , +#' by=".cell" +#' ) +#' } +#' +#' if(!is.null(cell_cycle_score_tbl)) +#' input_read_RNA_assay_transform = input_read_RNA_assay_transform |> +#' +#' left_join( +#' cell_cycle_score_tbl , +#' by=".cell" +#' ) +#' +#' +#' # Normalise RNA +#' # (To Do: Let users decide the normalisation factors OR supercell factors by ellipsis) +#' normalized_rna <- +#' input_read_RNA_assay |> +#' NormalizeData(normalization.method = "LogNormalize") |> +#' FindVariableFeatures(nfeatures = 2000) |> +#' ScaleData() |> +#' RunPCA(npcs = 50, verbose = F) |> +#' RunUMAP(reduction = "pca", dims = c(1:30), n.neighbors = 30, verbose = F) +#' +#' +#' MC <- SuperCell::SCimplify(Seurat::GetAssayData(normalized_rna, slot = "data"), # single-cell log-normalized gene expression data +#' k.knn = k_knn, +#' gamma = gamma, +#' n.var.genes = nb_var_genes, +#' n.pc = nb_pc, +#' genes.use = Seurat::VariableFeatures(normalized_rna) +#' ) +#' +#' # MC.GE <- supercell_GE(Seurat::GetAssayData(normalized_rna, slot = "counts"), +#' # MC$membership, +#' # mode = "sum") +#' # +#' # # Construct the object using metacell +#' # colnames(MC.GE) <- as.character(1:ncol(MC.GE)) +#' # MC.seurat <- CreateSeuratObject(counts = MC.GE, +#' # meta.data = data.frame(size = as.vector(table(MC$membership))) +#' # ) +#' # MC.seurat[[annotation_label]] <- MC$annotation +#' # +#' # # save single-cell membership to metacells in the MC.seurat object +#' # MC.seurat@misc$cell_membership <- data.frame(row.names = names(MC$membership), membership = MC$membership) +#' # MC.seurat@misc$var_features <- MC$genes.use +#' # +#' # # Save the PCA components and genes used in SCimplify +#' # PCA.res <- irlba::irlba(scale(Matrix::t(se.data@assays$RNA@data[MC$genes.use, ])), nv = nb_pc) +#' # pca.x <- PCA.res$u %*% diag(PCA.res$d) +#' # rownames(pca.x) <- colnames(se.data@assays$RNA@data) +#' # MC.seurat@misc$sc.pca <- CreateDimReducObject( +#' # embeddings = pca.x, +#' # loadings = PCA.res$v, +#' # key = "PC_", +#' # assay = "RNA" +#' # ) +#' # +#' # MC.seurat[["RNA"]] <- as(object = MC.seurat[["RNA"]], Class = "Assay") +#' +#' # Return a tibble showing which cell belongs to which metacell cluster +#' metacell_classification <- tibble(cell = MC$membership |> names(), +#' membership = MC$membership) +#' +#' metacell_classification +#' +#' } + + #' Preprocessing Output #' #' @description From fa5f150ff69207c7adca482680ec5f76bb7497f5 Mon Sep 17 00:00:00 2001 From: Dharmesh Bhuva Date: Mon, 16 Dec 2024 10:38:02 +1030 Subject: [PATCH 100/145] Added code to compute the mapping and added data required for mapping. --- R/HPCell.R | 7 + R/functions_consensus.R | 134 +++++ data/celltype_unification_maps.rda | Bin 0 -> 6979 bytes data/immune_graph.rda | Bin 0 -> 762 bytes data/nonimmune_cellxgene.rda | Bin 0 -> 252 bytes inst/extdata/immune_map_azimuth.csv | 30 ++ inst/extdata/immune_map_blueprint.csv | 45 ++ inst/extdata/immune_map_cellxgene.csv | 679 ++++++++++++++++++++++++++ inst/extdata/immune_map_monaco.csv | 38 ++ inst/extdata/immune_tree.csv | 38 ++ inst/scripts/build_graph.R | 12 + inst/scripts/build_unification_maps.R | 41 ++ inst/scripts/example_run.R | 36 ++ 13 files changed, 1060 insertions(+) create mode 100644 R/HPCell.R create mode 100644 R/functions_consensus.R create mode 100644 data/celltype_unification_maps.rda create mode 100644 data/immune_graph.rda create mode 100644 data/nonimmune_cellxgene.rda create mode 100755 inst/extdata/immune_map_azimuth.csv create mode 100755 inst/extdata/immune_map_blueprint.csv create mode 100755 inst/extdata/immune_map_cellxgene.csv create mode 100755 inst/extdata/immune_map_monaco.csv create mode 100755 inst/extdata/immune_tree.csv create mode 100644 inst/scripts/build_graph.R create mode 100644 inst/scripts/build_unification_maps.R create mode 100644 inst/scripts/example_run.R diff --git a/R/HPCell.R b/R/HPCell.R new file mode 100644 index 00000000..eca676cb --- /dev/null +++ b/R/HPCell.R @@ -0,0 +1,7 @@ +.myDataEnv <- new.env(parent = emptyenv()) # not exported + +.data_internal <- function(dataset) { + if (!exists(dataset, envir = .myDataEnv)) { + utils::data(list = c(dataset), envir = .myDataEnv) + } +} \ No newline at end of file diff --git a/R/functions_consensus.R b/R/functions_consensus.R new file mode 100644 index 00000000..e8867ddc --- /dev/null +++ b/R/functions_consensus.R @@ -0,0 +1,134 @@ +ensemble_annotation <- function(celltype_matrix, method_weights = NULL, override_celltype = c(), celltype_tree = NULL) { + if (is.null(celltype_tree)) { + .data_internal(immune_graph) + } + + stopifnot(is(celltype_tree, "igraph")) + stopifnot(igraph::is_directed(celltype_tree)) + stopifnot(is.matrix(celltype_matrix) | is.data.frame(celltype_matrix)) + + node_names = igraph::V(celltype_tree)$name + + # check override_celltype nodes are present + missing_nodes = setdiff(override_celltype, node_names) + if (!is.null(missing_nodes) & length(missing_nodes) > 0) { + missing_nodes = paste(missing_nodes, collapse = ", ") + stop(sprintf("the following nodes in 'override_celltype' not found in 'celltype_tree': %s", utils::capture.output(utils::str(missing_nodes)))) + } + + # check celltype_matrix + if (ncol(celltype_matrix) == 1) { + # no ensemble required + return(celltype_matrix) + } else { + celltype_matrix = as.matrix(celltype_matrix) + invalid_types = setdiff(celltype_matrix, c(node_names, NA)) + if (length(invalid_types) > 0) { + warning(sprintf("the following cell types in 'celltype_matrix' are not in the graph and will be set to NA:\n"), utils::capture.output(utils::str(invalid_types))) + } + celltype_matrix[celltype_matrix %in% invalid_types] = NA + } + + # check method_weights + if (is.null(method_weights)) { + method_weights = matrix(1, ncol = ncol(celltype_matrix), nrow = nrow(celltype_matrix)) + } else if (is.vector(method_weights)) { + if (ncol(celltype_matrix) != length(method_weights)) { + stop("the number of columns in 'celltype_matrix' should match the length of 'method_weights'") + } + method_weights = matrix(rep(method_weights, each = nrow(celltype_matrix)), nrow = nrow(celltype_matrix)) + } else if (is.matrix(method_weights) | is.data.frame(method_weights)) { + if (ncol(celltype_matrix) != ncol(method_weights)) { + stop("the number of columns in 'celltype_matrix' and 'method_weights' should be equal") + } + method_weights = as.matrix(method_weights) + } + method_weights = method_weights / rowSums(method_weights) + + # create vote matrix + vote_matrix = Matrix::sparseMatrix(i = integer(0), j = integer(0), dims = c(nrow(celltype_matrix), length(node_names)), dimnames = list(rownames(celltype_matrix), node_names)) + for (i in seq_len(ncol(celltype_matrix))) { + locmat = cbind(seq_len(nrow(celltype_matrix)), as.numeric(factor(celltype_matrix[, i], levels = node_names))) + missing = is.na(locmat[, 2]) + vote_matrix[locmat[!missing, ]] = vote_matrix[locmat[!missing, ]] + method_weights[!missing, i] + } + + # propagate vote to children + d = apply(!is.infinite(igraph::distances(celltype_tree, mode = "out")), 2, as.numeric) + d = as(d, "sparseMatrix") + vote_matrix_children = Matrix::tcrossprod(vote_matrix, Matrix::t(d)) + + # propagate vote to parent + d = igraph::distances(celltype_tree, mode = "in") + d = 1 / (2^d) - 0.1 # vote halved at each subsequent ancestor + diag(d)[igraph::degree(celltype_tree, mode = "in") > 0 & igraph::degree(celltype_tree, mode = "out") == 0] = 0 + diag(d) = diag(d) * 0.9 # prevent leaf nodes from being selected when trying to identify upstream ancestor (works for any number in the interval (0.5, 1)) + vote_matrix_parent = Matrix::tcrossprod(vote_matrix, Matrix::t(d)) + + # assess votes and identify common ancestors for ties + vote_matrix_children = apply(vote_matrix_children, 1, \(x) x[x > 0], simplify = FALSE) + vote_matrix_parent = apply(vote_matrix_parent, 1, \(x) x[x > 0], simplify = FALSE) + ensemble = mapply(\(children, parents) { + # override condition + override_node = intersect(override_celltype, names(children)) + if (length(override_node) > 0) { + return(override_node[1]) + } + + # maximum votes + children = names(children)[children == max(children)] + if (length(children) == 1) { + return(children) + } else { + # lowest ancestor with the maximum votes + parents = names(parents)[parents == max(parents)] + if (length(parents) == 1) { + return(parents) + } else { + return(NA) + } + } + }, vote_matrix_children, vote_matrix_parent) + + return(ensemble) +} + +add_celltype_level <- function(.data, id_col, level = 0, celltype_tree = NULL) { + if (is.null(celltype_tree)) { + .data_internal(immune_graph) + } + stopifnot(is(celltype_tree, "igraph")) + stopifnot(igraph::is_directed(celltype_tree)) + + ig_diameter = igraph::diameter(celltype_tree) + if (level > ig_diameter) { + stop(sprintf("The specified level (%d) exceeds the depth of the celltype tree (%d)", level, ig_diameter)) + } + + # check column exists + id_col_str = rlang::as_string(rlang::ensym(id_col)) + if (!id_col_str %in% colnames(.data)) { + stop(sprintf("Column '%s' not found in .data", rlang::as_string(rlang::ensym(id_col)))) + } + + # generate map + ct_map = igraph::ego(celltype_tree, mode = "in", order = ig_diameter) |> + sapply(\(x) { + x = rev(x$name) + x[min(length(x), level + 1)] + }) |> + setNames(igraph::V(celltype_tree)$name) + + # retain types of the matching level only + d = igraph::distances(celltype_tree, mode = "in") + d[is.infinite(d)] = NA + ct_level = apply(d, 1, max, na.rm = TRUE) + is_child = igraph::degree(celltype_tree, mode = "out") == 0 + ct_map[ct_level[ct_map] != level & !is_child] = NA_character_ + map_df = data.frame(ctypes, ct_map[ctypes]) + colnames(map_df) = c(id_col_str, sprintf("%s_L%d", id_col_str, level)) + + # join and return + .data |> + dplyr::left_join(map_df, copy = TRUE) +} diff --git a/data/celltype_unification_maps.rda b/data/celltype_unification_maps.rda new file mode 100644 index 0000000000000000000000000000000000000000..b7a0a64d8acfb5a026cf61f83904831e303cbc35 GIT binary patch literal 6979 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 literal 0 HcmV?d00001 diff --git a/data/nonimmune_cellxgene.rda b/data/nonimmune_cellxgene.rda new file mode 100644 index 0000000000000000000000000000000000000000..4743e3ae4c70194d56df49c84ac79c07e855b15b GIT binary patch literal 252 zcmVqP!vIDzk}@ZiZhR!sJVy#KpfM~MF;-NDMz?$< zLObJ`5#dLpGAE=ivQZWRxX$4jWAQwfX9g+=WJGIPXb3}Lh6u+$i@744C`cSBHBo>Y C%V`k+ literal 0 HcmV?d00001 diff --git a/inst/extdata/immune_map_azimuth.csv b/inst/extdata/immune_map_azimuth.csv new file mode 100755 index 00000000..06b284e6 --- /dev/null +++ b/inst/extdata/immune_map_azimuth.csv @@ -0,0 +1,30 @@ +from,to,is_immune +NK,nk,TRUE +CD8 TEM,cd8 tem,TRUE +CD4 CTL,cytotoxic,TRUE +dnT,t,TRUE +CD8 Naive,cd8 naive,TRUE +CD4 Naive,cd4 naive,TRUE +CD4 TCM,cd4 tcm,TRUE +gdT,tgd,TRUE +CD8 TCM,cd8 tcm,TRUE +MAIT,mait,TRUE +CD4 TEM,cd4 tem,TRUE +ILC,ilc,TRUE +CD14 Mono,cd14 mono,TRUE +cDC1,cdc,TRUE +pDC,pdc,TRUE +cDC2,cdc,TRUE +B naive,b naive,TRUE +B intermediate,b memory,TRUE +B memory,b memory,TRUE +Eryth,erythrocyte,TRUE +CD16 Mono,cd16 mono,TRUE +HSPC,progenitor,TRUE +Treg,treg,TRUE +NK_CD56bright,nk,TRUE +Plasmablast,plasma,TRUE +NK Proliferating,nk,TRUE +ASDC,cdc,TRUE +CD8 Proliferating,cd8 tem,TRUE +CD4 Proliferating,cd4 tem,TRUE \ No newline at end of file diff --git a/inst/extdata/immune_map_blueprint.csv b/inst/extdata/immune_map_blueprint.csv new file mode 100755 index 00000000..345c8904 --- /dev/null +++ b/inst/extdata/immune_map_blueprint.csv @@ -0,0 +1,45 @@ +from,to,is_immune +Neutrophils,granulocyte,TRUE +Monocytes,monocytic,TRUE +MEP,progenitor,TRUE +CD4+ T-cells,t cd4,TRUE +Tregs,treg,TRUE +CD4+ Tcm,cd4 tcm,TRUE +CD4+ Tem,cd4 tem,TRUE +CD8+ Tcm,cd8 tcm,TRUE +CD8+ Tem,cd8 tem,TRUE +NK cells,nk,TRUE +naive B-cells,b naive,TRUE +Memory B-cells,b memory,TRUE +Class-switched memory B-cells,b memory,TRUE +HSC,progenitor,TRUE +MPP,progenitor,TRUE +CLP,progenitor,TRUE +GMP,progenitor,TRUE +Macrophages,macrophage,TRUE +CD8+ T-cells,t cd8,TRUE +CD8 T,t cd8,TRUE +Erythrocytes,erythrocyte,TRUE +Megakaryocytes,non immune,TRUE +CMP,progenitor,TRUE +Macrophages M1,macrophage,TRUE +Macrophages M2,macrophage,TRUE +Endothelial cells,non immune,TRUE +DC,cdc,TRUE +Eosinophils,granulocyte,TRUE +Plasma cells,plasma,TRUE +Chondrocytes,non immune,TRUE +Fibroblasts,non immune,TRUE +Smooth muscle,non immune,TRUE +Epithelial cells,non immune,TRUE +Melanocytes,non immune,TRUE +Skeletal muscle,non immune,TRUE +Keratinocytes,non immune,TRUE +mv Endothelial cells,non immune,TRUE +Myocytes,non immune,TRUE +Adipocytes,non immune,TRUE +Neurons,non immune,TRUE +Pericytes,non immune,TRUE +Preadipocytes,non immune,TRUE +Astrocytes,non immune,TRUE +Mesangial cells,non immune,TRUE \ No newline at end of file diff --git a/inst/extdata/immune_map_cellxgene.csv b/inst/extdata/immune_map_cellxgene.csv new file mode 100755 index 00000000..f835dbe5 --- /dev/null +++ b/inst/extdata/immune_map_cellxgene.csv @@ -0,0 +1,679 @@ +from,to,is_immune +"activated CD4-positive, alpha-beta T cell",cd4 tem,TRUE +"activated CD4-positive, alpha-beta T cell, human",cd4 tem,TRUE +"activated CD8-positive, alpha-beta T cell",cd8 tem,TRUE +"activated CD8-positive, alpha-beta T cell, human",cd8 tem,TRUE +activated type II NK T cell,nkt,TRUE +alpha-beta T cell,t,TRUE +alternatively activated macrophage,macrophage,TRUE +alveolar macrophage,macrophage,TRUE +B cell,b,TRUE +B-1 B cell,b,TRUE +B-1a B cell,b,TRUE +B-1b B cell,b,TRUE +B-2 B cell,b,TRUE +basophil,granulocyte,TRUE +basophil mast progenitor cell,progenitor,TRUE +blood cell,erythrocyte,TRUE +"CD14-low, CD16-positive monocyte",cd16 mono,TRUE +CD14-positive monocyte,cd14 mono,TRUE +"CD14-positive, CD16-negative classical monocyte",cd14 mono,TRUE +"CD14-positive, CD16-positive monocyte",monocytic,TRUE +CD141-positive myeloid dendritic cell,cdc,TRUE +"CD16-negative, CD56-bright natural killer cell, human",nk,TRUE +"CD16-positive, CD56-dim natural killer cell, human",nk,TRUE +CD1c-positive myeloid dendritic cell,cdc,TRUE +"CD34-positive, CD38-negative hematopoietic stem cell",progenitor,TRUE +"CD34-positive, CD56-positive, CD117-positive common innate lymphoid precursor, human",progenitor,TRUE +CD4-positive helper T cell,t cd4,TRUE +"CD4-positive, alpha-beta cytotoxic T cell",cytotoxic,TRUE +"CD4-positive, alpha-beta memory T cell",cd4 tcm,TRUE +"CD4-positive, alpha-beta T cell",t cd4,TRUE +"CD4-positive, alpha-beta thymocyte",cd4 naive,TRUE +"CD4-positive, CD25-positive, alpha-beta regulatory T cell",treg,TRUE +"CD8-alpha alpha positive, gamma-delta intraepithelial T cell",tgd,TRUE +"CD8-alpha-alpha-positive, alpha-beta intraepithelial T cell",t cd8,TRUE +"CD8-alpha-beta-positive, alpha-beta intraepithelial T cell",t cd8,TRUE +"CD8-positive, alpha-beta cytokine secreting effector T cell",t cd8,TRUE +"CD8-positive, alpha-beta cytotoxic T cell",t cd8,TRUE +"CD8-positive, alpha-beta memory T cell",cd8 tcm,TRUE +"CD8-positive, alpha-beta memory T cell, CD45RO-positive",cd8 tcm,TRUE +"CD8-positive, alpha-beta T cell",t cd8,TRUE +"CD8-positive, alpha-beta thymocyte",cd8 naive,TRUE +"central memory CD4-positive, alpha-beta T cell",cd4 tcm,TRUE +"central memory CD8-positive, alpha-beta T cell",cd8 tcm,TRUE +central nervous system macrophage,macrophage,TRUE +class switched memory B cell,b,TRUE +classical monocyte,monocytic,TRUE +colon macrophage,macrophage,TRUE +common dendritic progenitor,progenitor,TRUE +common lymphoid progenitor,progenitor,TRUE +common myeloid progenitor,progenitor,TRUE +conventional dendritic cell,cdc,TRUE +cord blood hematopoietic stem cell,progenitor,TRUE +cytotoxic T cell,cytotoxic,TRUE +"decidual natural killer cell, human",nk,TRUE +dendritic cell,dc,TRUE +"dendritic cell, human",dc,TRUE +DN1 thymic pro-T cell,t,TRUE +DN3 thymocyte,t,TRUE +DN4 thymocyte,t,TRUE +double negative T regulatory cell,treg,TRUE +double negative thymocyte,t,TRUE +"double-positive, alpha-beta thymocyte",t,TRUE +early lymphoid progenitor,progenitor,TRUE +early pro-B cell,b,TRUE +early promyelocyte,progenitor,TRUE +early T lineage precursor,progenitor,TRUE +"effector CD4-positive, alpha-beta T cell",cd4 tem,TRUE +"effector CD8-positive, alpha-beta T cell",cd8 tem,TRUE +"effector memory CD4-positive, alpha-beta T cell",cd4 tem,TRUE +"effector memory CD8-positive, alpha-beta T cell",cd8 tem,TRUE +"effector memory CD8-positive, alpha-beta T cell, terminally differentiated",cd8 tem,TRUE +elicited macrophage,macrophage,TRUE +enucleate erythrocyte,erythrocyte,TRUE +eosinophil,granulocyte,TRUE +erythroblast,erythrocyte,TRUE +erythrocyte,erythrocyte,TRUE +erythroid progenitor cell,progenitor,TRUE +"erythroid progenitor cell, mammalian",progenitor,TRUE +eurydendroid cell,progenitor,TRUE +follicular B cell,b,TRUE +fraction A pre-pro B cell,b,TRUE +gamma-delta T cell,tgd,TRUE +germinal center B cell,b,TRUE +granulocyte,granulocyte,TRUE +granulocyte monocyte progenitor cell,progenitor,TRUE +group 2 innate lymphoid cell,ilc,TRUE +"group 2 innate lymphoid cell, human",ilc,TRUE +group 3 innate lymphoid cell,ilc,TRUE +"group 3 innate lymphoid cell, human",ilc,TRUE +helper T cell,t cd4,TRUE +hematopoietic multipotent progenitor cell,progenitor,TRUE +hematopoietic precursor cell,progenitor,TRUE +hematopoietic stem cell,progenitor,TRUE +Hofbauer cell,macrophage,TRUE +IgA plasma cell,plasma,TRUE +IgA plasmablast,plasma,TRUE +IgG memory B cell,b memory,TRUE +IgG plasma cell,plasma,TRUE +IgG plasmablast,plasma,TRUE +IgG-negative class switched memory B cell,b,TRUE +IgM plasma cell,plasma,TRUE +"ILC1, human",ilc,TRUE +immature alpha-beta T cell,t,TRUE +immature B cell,b,TRUE +immature innate lymphoid cell,ilc,TRUE +immature natural killer cell,nk,TRUE +immature neutrophil,granulocyte,TRUE +immature NK T cell,nkt,TRUE +inflammatory macrophage,macrophage,TRUE +innate lymphoid cell,ilc,TRUE +intermediate monocyte,monocytic,TRUE +kidney interstitial alternatively activated macrophage,macrophage,TRUE +Kupffer cell,macrophage,TRUE +large pre-B-II cell,b,TRUE +late pro-B cell,b,TRUE +late promyelocyte,progenitor,TRUE +liver dendritic cell,dc,TRUE +lung interstitial macrophage,macrophage,TRUE +lung macrophage,macrophage,TRUE +"lung resident memory CD4-positive, alpha-beta T cell",cd4 tcm,TRUE +"lung resident memory CD8-positive, alpha-beta T cell",t cd8,TRUE +lymphocyte of B lineage,b,TRUE +lymphoid lineage restricted progenitor cell,progenitor,TRUE +macrophage,macrophage,TRUE +macrophage dendritic cell progenitor,progenitor,TRUE +mast cell,mast,TRUE +mature alpha-beta T cell,t,TRUE +mature B cell,b,TRUE +mature conventional dendritic cell,cdc,TRUE +mature gamma-delta T cell,tgd,TRUE +mature NK T cell,nkt,TRUE +mature T cell,t,TRUE +memory B cell,b memory,TRUE +memory regulatory T cell,treg,TRUE +memory T cell,t,TRUE +MHC-II-positive classical monocyte,monocytic,TRUE +monocyte,monocytic,TRUE +monocyte-derived dendritic cell,monocytic,TRUE +mucosal invariant T cell,mait,TRUE +myeloid dendritic cell,cdc,TRUE +"myeloid dendritic cell, human",cdc,TRUE +myeloid lineage restricted progenitor cell,progenitor,TRUE +naive B cell,b naive,TRUE +naive regulatory T cell,treg,TRUE +naive T cell,t,TRUE +"naive thymus-derived CD4-positive, alpha-beta T cell",cd4 naive,TRUE +"naive thymus-derived CD8-positive, alpha-beta T cell",cd8 naive,TRUE +natural killer cell,nk,TRUE +natural T-regulatory cell,treg,TRUE +neutrophil,granulocyte,TRUE +neutrophil progenitor cell,progenitor,TRUE +"NKp44-negative group 3 innate lymphoid cell, human",ilc,TRUE +"NKp44-positive group 3 innate lymphoid cell, human",ilc,TRUE +non-classical monocyte,monocytic,TRUE +plasma cell,plasma,TRUE +plasmablast,plasma,TRUE +plasmacytoid dendritic cell,pdc,TRUE +"plasmacytoid dendritic cell, human",pdc,TRUE +pre-B-I cell,b,TRUE +pre-conventional dendritic cell,cdc,TRUE +pre-natural killer cell,nk,TRUE +precursor B cell,b,TRUE +primitive red blood cell,erythrocyte,TRUE +pro-B cell,b,TRUE +pro-T cell,t,TRUE +proerythroblast,erythrocyte,TRUE +promonocyte,monocytic,TRUE +regulatory T cell,treg,TRUE +small pre-B-II cell,b,TRUE +T cell,t,TRUE +T follicular helper cell,cd4 fh em,TRUE +T follicular regulatory cell,treg,TRUE +T-helper 1 cell,cd4 th1 em,TRUE +T-helper 17 cell,cd4 th17 em,TRUE +T-helper 2 cell,cd4 th2 em,TRUE +T-helper 22 cell,t cd4,TRUE +Tc1 cell,t cd8,TRUE +thymocyte,t,TRUE +tonsil germinal center B cell,b,TRUE +transitional stage B cell,b,TRUE +type I NK T cell,nkt,TRUE +unswitched memory B cell,b,TRUE +stromal cell,stromal,FALSE +oligodendrocyte precursor cell,glial,FALSE +mucous neck cell,secretory,FALSE +nasal mucosa goblet cell,secretory,FALSE +ionocyte,secretory,FALSE +parietal epithelial cell,epithelial,FALSE +transit amplifying cell,progenitor,FALSE +platelet,immune,FALSE +capillary endothelial cell,endothelial,FALSE +fibroblast of lung,stromal,FALSE +smooth muscle cell of the pulmonary artery,muscle,FALSE +chondrocyte,cartilage,FALSE +abnormal cell,other,FALSE +paneth cell,secretory,FALSE +PP cell,endocrine,FALSE +endothelial cell of pericentral hepatic sinusoid,endothelial,FALSE +GABAergic neuron,neuron,FALSE +squamous epithelial cell,epithelial,FALSE +embryonic fibroblast,stromal,FALSE +mesenchymal cell,stromal,FALSE +kidney cell,renal,FALSE +kidney loop of Henle epithelial cell,epithelial,FALSE +retinal bipolar neuron,neuron,FALSE +epithelial cell of nephron,epithelial,FALSE +type D enteroendocrine cell,endocrine,FALSE +motor neuron,neuron,FALSE +migratory enteric neural crest cell,neuron,FALSE +skeletal muscle satellite stem cell,muscle,FALSE +subcutaneous adipocyte,fat,FALSE +epicardial adipocyte,fat,FALSE +diffuse bipolar 1 cell,neuron,FALSE +invaginating midget bipolar cell,neuron,FALSE +cardiac muscle myoblast,muscle,FALSE +preosteoblast,progenitor,FALSE +serous secreting cell,epithelial,FALSE +cortical thymic epithelial cell,epithelial,FALSE +OFF-bipolar cell,neuron,FALSE +colon epithelial cell,epithelial,FALSE +transit amplifying cell of colon,progenitor,FALSE +acinar cell of salivary gland,secretory,FALSE +prostate gland microvascular endothelial cell,endothelial,FALSE +indirect pathway medium spiny neuron,neuron,FALSE +direct pathway medium spiny neuron,neuron,FALSE +epithelial cell of proximal tubule segment 3,epithelial,FALSE +skeletal muscle satellite cell,muscle,FALSE +L5/6 near-projecting glutamatergic neuron,neuron,FALSE +respiratory epithelial cell,epithelial,FALSE +type N enteroendocrine cell,endocrine,FALSE +skeletal muscle fiber,muscle,FALSE +vascular lymphangioblast,progenitor,FALSE +progenitor cell of mammary luminal epithelium,epithelial,FALSE +hair follicular keratinocyte,epidermal,FALSE +cerebellar granule cell precursor,progenitor,FALSE +unipolar brush cell,secretory,FALSE +anterior lens cell,lens,FALSE +stromal cell of endometrium,stromal,FALSE +CNS interneuron,neuron,FALSE +transit amplifying cell of small intestine,progenitor,FALSE +centroblast,immune,FALSE +tongue muscle cell,muscle,FALSE +pigmented ciliary epithelial cell,epithelial,FALSE +pulmonary interstitial fibroblast,stromal,FALSE +hepatoblast,progenitor,FALSE +sebum secreting cell,fat,FALSE +epithelial cell of uterus,epithelial,FALSE +microfold cell of epithelium of small intestine,epithelial,FALSE +dopaminergic neuron,neuron,FALSE +connective tissue cell,stromal,FALSE +myometrial cell,muscle,FALSE +kidney collecting duct cell,renal,FALSE +Schwann cell precursor,glial,FALSE +type A enteroendocrine cell,endocrine,FALSE +dermis microvascular lymphatic vessel endothelial cell,endothelial,FALSE +intestinal crypt stem cell of large intestine,progenitor,FALSE +type B pancreatic cell,endocrine,FALSE +kidney loop of Henle thick ascending limb epithelial cell,epithelial,FALSE +mesangial cell,renal,FALSE +pancreatic stellate cell,stromal,FALSE +stem cell,progenitor,FALSE +cardiac muscle cell,muscle,FALSE +astrocyte,glial,FALSE +multi-ciliated epithelial cell,epithelial,FALSE +bronchial goblet cell,secretory,FALSE +mucus secreting cell,secretory,FALSE +luminal hormone-sensing cell of mammary gland,endocrine,FALSE +placental villous trophoblast,progenitor,FALSE +perivascular cell,pericyte,FALSE +epithelial cell of proximal tubule,epithelial,FALSE +M cell of gut,epithelial,FALSE +glial cell,glial,FALSE +adventitial cell,stromal,FALSE +alveolar type 2 fibroblast cell,progenitor,FALSE +hepatocyte,liver,FALSE +brush cell,secretory,FALSE +endothelial cell of periportal hepatic sinusoid,endothelial,FALSE +differentiation-committed oligodendrocyte precursor,glial,FALSE +kidney interstitial cell,stromal,FALSE +kidney collecting duct intercalated cell,renal,FALSE +hepatic pit cell,immune,FALSE +retinal ganglion cell,neuron,FALSE +neural progenitor cell,neuron,FALSE +airway submucosal gland duct basal cell,epithelial,FALSE +blood vessel smooth muscle cell,muscle,FALSE +respiratory suprabasal cell,epithelial,FALSE +hematopoietic cell,immune,FALSE +glycinergic amacrine cell,neuron,FALSE +pancreatic epsilon cell,endocrine,FALSE +tracheobronchial serous cell,epithelial,FALSE +intrahepatic cholangiocyte,epithelial,FALSE +muscle precursor cell,muscle,FALSE +tracheobronchial goblet cell,secretory,FALSE +intestinal crypt stem cell,progenitor,FALSE +intestinal tuft cell,epithelial,FALSE +luminal cell of prostate epithelium,epithelial,FALSE +L6 corticothalamic-projecting glutamatergic cortical neuron,neuron,FALSE +decidual cell,reproductive,FALSE +neuron associated cell,neuron,FALSE +lactocyte,epithelial,FALSE +epithelial cell of prostate,epithelial,FALSE +epithelial cell of exocrine pancreas,epithelial,FALSE +chandelier cell,neuron,FALSE +ciliary muscle cell,muscle,FALSE +regular atrial cardiac myocyte,muscle,FALSE +paneth cell of epithelium of small intestine,epithelial,FALSE +reticulocyte,blood,FALSE +epithelial cell of sweat gland,epithelial,FALSE +kidney connecting tubule principal cell,renal,FALSE +chorionic trophoblast cell,progenitor,FALSE +myoblast,muscle,FALSE +glomerular capillary endothelial cell,endothelial,FALSE +large intestine goblet cell,secretory,FALSE +erythroid lineage cell,blood,FALSE +fibroblast of cardiac tissue,stromal,FALSE +pancreatic A cell,endocrine,FALSE +melanocyte,epidermal,FALSE +cardiac endothelial cell,endothelial,FALSE +enterocyte,epithelial,FALSE +lymphocyte,immune,FALSE +pericyte,pericyte,FALSE +oligodendrocyte,glial,FALSE +leukocyte,immune,FALSE +adipocyte,fat,FALSE +corticothalamic-projecting glutamatergic cortical neuron,neuron,FALSE +vascular leptomeningeal cell,pericyte,FALSE +L6b glutamatergic cortical neuron,neuron,FALSE +cerebral cortex endothelial cell,endothelial,FALSE +respiratory basal cell,epithelial,FALSE +luminal epithelial cell of mammary gland,epithelial,FALSE +extravillous trophoblast,progenitor,FALSE +endothelial cell of artery,endothelial,FALSE +enterocyte of colon,epithelial,FALSE +pulmonary artery endothelial cell,endothelial,FALSE +cholangiocyte,epithelial,FALSE +epithelial cell of lung,epithelial,FALSE +uterine smooth muscle cell,muscle,FALSE +alveolar type 1 fibroblast cell,progenitor,FALSE +preadipocyte,fat,FALSE +acinar cell,secretory,FALSE +enteric neuron,neuron,FALSE +peptic cell,secretory,FALSE +Schwann cell,glial,FALSE +inhibitory interneuron,neuron,FALSE +Mueller cell,glial,FALSE +myoepithelial cell,myoepithelial,FALSE +interstitial cell of Cajal,stromal,FALSE +brush cell of trachebronchial tree,secretory,FALSE +epithelial cell of thymus,epithelial,FALSE +deuterosomal cell,epithelial,FALSE +peripheral nervous system neuron,neuron,FALSE +parasol ganglion cell of retina,neuron,FALSE +professional antigen presenting cell,immune,FALSE +bipolar neuron,neuron,FALSE +precursor cell,progenitor,FALSE +neural crest cell,neuron,FALSE +neuronal brush cell,secretory,FALSE +epithelial cell of urethra,epithelial,FALSE +medium spiny neuron,neuron,FALSE +meningeal macrophage,macrophage,TRUE +follicular dendritic cell,immune,FALSE +trophoblast giant cell,progenitor,FALSE +sympathetic neuron,neuron,FALSE +noradrenergic cell,neuron,FALSE +vasa recta ascending limb cell,renal,FALSE +ovarian surface epithelial cell,epithelial,FALSE +brainstem motor neuron,neuron,FALSE +"BEST4+ intestinal epithelial cell, human",epithelial,FALSE +centrocyte,immune,FALSE +duodenum glandular cell,epithelial,FALSE +ileal goblet cell,secretory,FALSE +non-pigmented ciliary epithelial cell,epithelial,FALSE +epidermal cell,epidermal,FALSE +kidney pelvis urothelial cell,epithelial,FALSE +epithelial cell,epithelial,FALSE +megakaryocyte,blood,FALSE +fibroblast,progenitor,FALSE +enteric smooth muscle cell,muscle,FALSE +gut endothelial cell,endothelial,FALSE +intestine goblet cell,secretory,FALSE +astrocyte of the cerebral cortex,glial,FALSE +ciliated columnar cell of tracheobronchial tree,epithelial,FALSE +renal principal cell,renal,FALSE +malignant cell,other,FALSE +lung pericyte,pericyte,FALSE +neoplastic cell,other,FALSE +glandular epithelial cell,epithelial,FALSE +keratinocyte,epidermal,FALSE +epithelial cell of lower respiratory tract,epithelial,FALSE +taste receptor cell,sensory,FALSE +syncytiotrophoblast cell,progenitor,FALSE +fetal cardiomyocyte,muscle,FALSE +enteroendocrine cell of colon,endocrine,FALSE +smooth muscle cell,muscle,FALSE +kidney interstitial fibroblast,stromal,FALSE +germ cell,reproductive,FALSE +macroglial cell,glial,FALSE +respiratory hillock cell,epithelial,FALSE +primary sensory neuron (sensu Teleostei),neuron,FALSE +photoreceptor cell,neuron,FALSE +epithelial cell of alveolus of lung,epithelial,FALSE +pancreatic PP cell,endocrine,FALSE +fast muscle cell,muscle,FALSE +neuroendocrine cell,endocrine,FALSE +megakaryocyte progenitor cell,blood,FALSE +regular ventricular cardiac myocyte,muscle,FALSE +Sertoli cell,reproductive,FALSE +rod bipolar cell,neuron,FALSE +diffuse bipolar 4 cell,neuron,FALSE +flat midget bipolar cell,neuron,FALSE +midget ganglion cell of retina,neuron,FALSE +pulmonary ionocyte,secretory,FALSE +Bergmann glial cell,glial,FALSE +bladder urothelial cell,epithelial,FALSE +endosteal cell,bone,FALSE +melanocyte of skin,epidermal,FALSE +cone retinal bipolar cell,neuron,FALSE +neuron associated cell (sensu Vertebrata),neuron,FALSE +granule cell,neuron,FALSE +non-myelinating Schwann cell,glial,FALSE +renal intercalated cell,renal,FALSE +salivary gland cell,epithelial,FALSE +sensory neuron,neuron,FALSE +collagen secreting cell,stromal,FALSE +immature astrocyte,glial,FALSE +cerebral cortex GABAergic interneuron,neuron,FALSE +pigmented epithelial cell,epithelial,FALSE +columnar/cuboidal epithelial cell,epithelial,FALSE +immature Schwann cell,glial,FALSE +kidney distal convoluted tubule epithelial cell,epithelial,FALSE +basal cell of epidermis,epithelial,FALSE +mural cell,pericyte,FALSE +myofibroblast cell,stromal,FALSE +foveolar cell of stomach,epithelial,FALSE +myeloid cell,immune,FALSE +microglial cell,glial,FALSE +pvalb GABAergic cortical interneuron,neuron,FALSE +near-projecting glutamatergic cortical neuron,neuron,FALSE +endothelial cell of placenta,endothelial,FALSE +absorptive cell,epithelial,FALSE +type II pneumocyte,pneumocyte,FALSE +type L enteroendocrine cell,endocrine,FALSE +cerebellar granule cell,neuron,FALSE +kidney loop of Henle thin ascending limb epithelial cell,epithelial,FALSE +retinal pigment epithelial cell,epithelial,FALSE +midzonal region hepatocyte,liver,FALSE +centrilobular region hepatocyte,liver,FALSE +stromal cell of ovary,stromal,FALSE +tracheobronchial smooth muscle cell,muscle,FALSE +renal alpha-intercalated cell,renal,FALSE +basal epithelial cell of tracheobronchial tree,epithelial,FALSE +colon goblet cell,secretory,FALSE +P/D1 enteroendocrine cell,endocrine,FALSE +granulosa cell,reproductive,FALSE +fibro/adipogenic progenitor cell,progenitor,FALSE +forebrain neuroblast,progenitor,FALSE +radial glial cell,glial,FALSE +interneuron,neuron,FALSE +bronchial smooth muscle cell,muscle,FALSE +lung neuroendocrine cell,endocrine,FALSE +lung goblet cell,secretory,FALSE +medullary thymic epithelial cell,epithelial,FALSE +small intestine goblet cell,secretory,FALSE +H1 horizontal cell,neuron,FALSE +giant bipolar cell,neuron,FALSE +OFFx cell,neuron,FALSE +hepatic stellate cell,liver,FALSE +neuronal receptor cell,sensory,FALSE +epithelial cell of proximal tubule segment 1,epithelial,FALSE +lens fiber cell,lens,FALSE +basal cell of prostate epithelium,epithelial,FALSE +Cajal-Retzius cell,neuron,FALSE +corneal endothelial cell,endothelial,FALSE +glioblast,glial,FALSE +smooth muscle cell of prostate,muscle,FALSE +secondary lens fiber,lens,FALSE +sst chodl GABAergic cortical interneuron,neuron,FALSE +pancreatic endocrine cell,endocrine,FALSE +paneth cell of colon,secretory,FALSE +myelinating Schwann cell,glial,FALSE +primary cultured cell,other,FALSE +prostate stromal cell,stromal,FALSE +epidermal Langerhans cell,immune,FALSE +primordial germ cell,reproductive,FALSE +endothelial cell of vascular tree,endothelial,FALSE +epithelial cell of esophagus,epithelial,FALSE +mesothelial cell,mesothelial,FALSE +vein endothelial cell,endothelial,FALSE +sst GABAergic cortical interneuron,neuron,FALSE +caudal ganglionic eminence derived GABAergic cortical interneuron,neuron,FALSE +sncg GABAergic cortical interneuron,neuron,FALSE +luminal adaptive secretory precursor cell of mammary gland,progenitor,FALSE +myoepithelial cell of mammary gland,myoepithelial,FALSE +fibroblast of mammary gland,stromal,FALSE +kidney connecting tubule epithelial cell,epithelial,FALSE +intestinal enteroendocrine cell,endocrine,FALSE +type I pneumocyte,pneumocyte,FALSE +endothelial cell of hepatic sinusoid,endothelial,FALSE +glutamatergic neuron,neuron,FALSE +ciliated cell,epithelial,FALSE +secretory cell,secretory,FALSE +stratified epithelial cell,epithelial,FALSE +skin fibroblast,stromal,FALSE +type G enteroendocrine cell,endocrine,FALSE +myelocyte,immune,FALSE +chromaffin cell,endocrine,FALSE +reticular cell,immune,FALSE +renal interstitial pericyte,renal,FALSE +basal cell of epithelium of trachea,epithelial,FALSE +amacrine cell,neuron,FALSE +myeloid leukocyte,immune,FALSE +slow muscle cell,muscle,FALSE +enterocyte of epithelium of small intestine,epithelial,FALSE +ciliated epithelial cell,epithelial,FALSE +Leydig cell,reproductive,FALSE +GABAergic amacrine cell,neuron,FALSE +diffuse bipolar 3b cell,neuron,FALSE +osteoblast,progenitor,FALSE +corneal epithelial cell,epithelial,FALSE +mature microglial cell,glial,FALSE +mature astrocyte,glial,FALSE +retinal astrocyte,glial,FALSE +brush cell of trachea,secretory,FALSE +mesothelial cell of epicardium,mesothelial,FALSE +thyroid follicular cell,endocrine,FALSE +visceromotor neuron,neuron,FALSE +choroid plexus epithelial cell,epithelial,FALSE +skeletal muscle fibroblast,muscle,FALSE +bronchial epithelial cell,epithelial,FALSE +cortical cell of adrenal gland,endocrine,FALSE +inflammatory cell,immune,FALSE +fibroblast of connective tissue of glandular part of prostate,stromal,FALSE +vasa recta descending limb cell,renal,FALSE +lung microvascular endothelial cell,endothelial,FALSE +conjunctival epithelial cell,epithelial,FALSE +smooth muscle cell of sphincter of pupil,muscle,FALSE +eye photoreceptor cell,neuron,FALSE +epithelial cell of small intestine,epithelial,FALSE +pyramidal neuron,neuron,FALSE +sebaceous gland cell,epithelial,FALSE +granular cell of epidermis,epithelial,FALSE +bone marrow cell,bone,FALSE +mesothelial cell of pleura,mesothelial,FALSE +neuron,neuron,FALSE +endothelial cell,endothelial,FALSE +prickle cell,epidermal,FALSE +renal beta-intercalated cell,renal,FALSE +intestinal epithelial cell,epithelial,FALSE +enteroendocrine cell,endocrine,FALSE +L2/3-6 intratelencephalic projecting glutamatergic neuron,neuron,FALSE +vip GABAergic cortical interneuron,neuron,FALSE +club cell,epithelial,FALSE +mammary gland epithelial cell,epithelial,FALSE +endothelial cell of uterus,endothelial,FALSE +endothelial cell of lymphatic vessel,endothelial,FALSE +vascular associated smooth muscle cell,muscle,FALSE +lung perichondrial fibroblast,stromal,FALSE +type EC enteroendocrine cell,endocrine,FALSE +pancreatic acinar cell,secretory,FALSE +supporting cell,epithelial,FALSE +contractile cell,muscle,FALSE +theca cell,reproductive,FALSE +stem cell of epidermis,epithelial,FALSE +retinal rod cell,neuron,FALSE +promyelocyte,immune,FALSE +brain vascular cell,pericyte,FALSE +progenitor cell,progenitor,FALSE +kidney capillary endothelial cell,endothelial,FALSE +mesodermal cell,stromal,FALSE +GIP cell,endocrine,FALSE +mesenchymal lymphangioblast,progenitor,FALSE +mesothelial fibroblast,stromal,FALSE +tendon cell,stromal,FALSE +S cone cell,neuron,FALSE +diffuse bipolar 2 cell,neuron,FALSE +diffuse bipolar 6 cell,neuron,FALSE +parietal cell,epithelial,FALSE +smooth muscle myoblast,muscle,FALSE +endothelial cell of sinusoid,endothelial,FALSE +mononuclear phagocyte,immune,FALSE +retina horizontal cell,neuron,FALSE +embryonic stem cell,progenitor,FALSE +suprabasal keratinocyte,epidermal,FALSE +papillary tips cell,renal,FALSE +retinal blood vessel endothelial cell,endothelial,FALSE +kidney loop of Henle ascending limb epithelial cell,epithelial,FALSE +L4 intratelencephalic projecting glutamatergic neuron,neuron,FALSE +sperm,reproductive,FALSE +fibroblast of connective tissue of nonglandular part of prostate,stromal,FALSE +lens epithelial cell,epithelial,FALSE +glomerular endothelial cell,endothelial,FALSE +kidney resident macrophage,macrophage,TRUE +epithelial cell of stratum germinativum of esophagus,epithelial,FALSE +basal epithelial cell of prostatic duct,epithelial,FALSE +serous cell of epithelium of bronchus,epithelial,FALSE +urothelial cell,epithelial,FALSE +GABAergic interneuron,neuron,FALSE +intestinal crypt stem cell of small intestine,progenitor,FALSE +enterocyte of epithelium proper of ileum,epithelial,FALSE +smooth muscle fiber of ileum,muscle,FALSE +L6 intratelencephalic projecting glutamatergic neuron of the primary motor cortex,neuron,FALSE +ventricular cardiac muscle cell,muscle,FALSE +endocrine cell,endocrine,FALSE +mesenchymal stem cell,progenitor,FALSE +unknown,other,FALSE +neural cell,neuron,FALSE +cardiac neuron,neuron,FALSE +lamp5 GABAergic cortical interneuron,neuron,FALSE +chandelier pvalb GABAergic cortical interneuron,neuron,FALSE +L5 extratelencephalic projecting glutamatergic cortical neuron,neuron,FALSE +blood vessel endothelial cell,endothelial,FALSE +basal cell,epithelial,FALSE +intestinal crypt stem cell of colon,progenitor,FALSE +goblet cell,secretory,FALSE +bronchus fibroblast of lung,progenitor,FALSE +lung secretory cell,secretory,FALSE +metallothionein-positive alveolar macrophage,macrophage,TRUE +pancreatic ductal cell,endocrine,FALSE +pancreatic D cell,endocrine,FALSE +kidney collecting duct principal cell,renal,FALSE +kidney loop of Henle thin descending limb epithelial cell,epithelial,FALSE +periportal region hepatocyte,liver,FALSE +Merkel cell,sensory,FALSE +megakaryocyte-erythroid progenitor cell,blood,FALSE +endothelial tip cell,endothelial,FALSE +glandular cell of esophagus,epithelial,FALSE +kidney epithelial cell,epithelial,FALSE +podocyte,renal,FALSE +interstitial cell of ovary,stromal,FALSE +tracheal goblet cell,secretory,FALSE +lung ciliated cell,epithelial,FALSE +cortical interneuron,neuron,FALSE +ependymal cell,glial,FALSE +serous secreting cell of bronchus submucosal gland,epithelial,FALSE +enucleated reticulocyte,blood,FALSE +neuroblast (sensu Vertebrata),progenitor,FALSE +type I enteroendocrine cell,endocrine,FALSE +fibroblast of breast,stromal,FALSE +retinal cone cell,neuron,FALSE +enterocyte of epithelium of large intestine,epithelial,FALSE +H2 horizontal cell,neuron,FALSE +diffuse bipolar 3a cell,neuron,FALSE +starburst amacrine cell,neuron,FALSE +ON-blue cone bipolar cell,neuron,FALSE +duct epithelial cell,epithelial,FALSE +adipocyte of epicardial fat of left ventricle,fat,FALSE +osteoclast,bone,FALSE +adipocyte of breast,fat,FALSE +cell of skeletal muscle,muscle,FALSE +ganglion interneuron,neuron,FALSE +muscle cell,muscle,FALSE +Purkinje cell,neuron,FALSE +stellate neuron,neuron,FALSE +ON-bipolar cell,neuron,FALSE +forebrain radial glial cell,glial,FALSE +L2/3 intratelencephalic projecting glutamatergic neuron,neuron,FALSE +cerebral cortex neuron,neuron,FALSE +inhibitory motor neuron,neuron,FALSE +tuft cell of colon,epithelial,FALSE +respiratory goblet cell,secretory,FALSE +progenitor cell of endocrine pancreas,progenitor,FALSE +epithelial fate stem cell,epithelial,FALSE +enteroendocrine cell of small intestine,endocrine,FALSE +keratocyte,epithelial,FALSE +endocardial cell,endothelial,FALSE +cardiac mesenchymal cell,stromal,FALSE +L5/6 near-projecting glutamatergic neuron of the primary motor cortex,neuron,FALSE +Langerhans cell,immune,FALSE +surface ectodermal cell,epithelial,FALSE +serous cell of epithelium of trachea,epithelial,FALSE +epithelial cell of lacrimal sac,epithelial,FALSE +intraepithelial lymphocyte,progenitor,FALSE +pneumocyte,pneumocyte,FALSE +non-terminally differentiated cell,progenitor,FALSE +mononuclear cell,immune,FALSE +peripheral blood mononuclear cell,immune,FALSE +exhausted T cell,t,TRUE +endothelial cell of venule,endothelial,FALSE \ No newline at end of file diff --git a/inst/extdata/immune_map_monaco.csv b/inst/extdata/immune_map_monaco.csv new file mode 100755 index 00000000..970f26eb --- /dev/null +++ b/inst/extdata/immune_map_monaco.csv @@ -0,0 +1,38 @@ +from,to,is_immune +Naive CD8 T cells,cd8 naive,TRUE +Central memory CD8 T cells,cd8 tcm,TRUE +Effector memory CD8 T cells,cd8 tem,TRUE +Terminal effector CD8 T cells,cd8 tem,TRUE +MAIT cells,mait,TRUE +Vd2 gd T cells,tgd,TRUE +Non-Vd2 gd T cells,tgd,TRUE +Follicular helper T cells,cd4 fh em,TRUE +T regulatory cells,treg,TRUE +Th1 cells,cd4 th1 em,TRUE +Th1/Th17 cells,cd4 th1/th17 em,TRUE +Th17 cells,cd4 th17 em,TRUE +Th2 cells,cd4 th2 em,TRUE +Naive CD4 T cells,cd4 naive,TRUE +Progenitor cells,progenitor,TRUE +Naive B cells,b naive,TRUE +Naive B,b naive,TRUE +Non-switched memory B cells,b memory,TRUE +Nonswitched memory B,b memory,TRUE +Exhausted B cells,plasma,TRUE +Switched memory B cells,b memory,TRUE +Switched memory B,b memory,TRUE +Plasmablasts,plasma,TRUE +Classical monocytes,cd14 mono,TRUE +Intermediate monocytes,cd14 mono,TRUE +Non classical monocytes,cd16 mono,TRUE +Natural killer cells,nk,TRUE +Natural killer,nk,TRUE +Plasmacytoid dendritic cells,pdc,TRUE +Myeloid dendritic cells,cdc,TRUE +Myeloid dendritic,cdc,TRUE +Low-density neutrophils,granulocyte,TRUE +Lowdensity neutrophils,granulocyte,TRUE +Low-density basophils,granulocyte,TRUE +Lowdensity basophils,granulocyte,TRUE +Terminal effector CD4 T cells,cd4 tem,TRUE +progenitor,progenitor,TRUE \ No newline at end of file diff --git a/inst/extdata/immune_tree.csv b/inst/extdata/immune_tree.csv new file mode 100755 index 00000000..69d0adfc --- /dev/null +++ b/inst/extdata/immune_tree.csv @@ -0,0 +1,38 @@ +,b,b memory,b naive,plasma,ilc,nkt,nk,t,t cd4,cd4 naive,cd4 tcm,cd4 tem,cd4 fh em,cd4 th1/th17 em,cd4 th1 em,cd4 th2 em,cd4 th17 em,t cd8,cd8 naive,cd8 tcm,cd8 tem,tgd,treg,mait,cytotoxic,erythrocyte,granulocyte,monocytic,cd14 mono,cd16 mono,dc,cdc,pdc,macrophage,mast,progenitor,non immune +b,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +b memory,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +b naive,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +plasma,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +ilc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +nkt,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +nk,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +t,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +t cd4,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd4 naive,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd4 tcm,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd4 tem,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd4 fh em,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd4 th1/th17 em,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd4 th1 em,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd4 th2 em,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd4 th17 em,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +t cd8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd8 naive,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd8 tcm,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd8 tem,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +tgd,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +treg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +mait,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cytotoxic,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +erythrocyte,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +granulocyte,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +monocytic,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,2,0,0,0 +cd14 mono,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +cd16 mono,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +dc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0 +cdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +pdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +macrophage,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +mast,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +progenitor,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +non immune,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/inst/scripts/build_graph.R b/inst/scripts/build_graph.R new file mode 100644 index 00000000..9229469b --- /dev/null +++ b/inst/scripts/build_graph.R @@ -0,0 +1,12 @@ +library(igraph) + +# load knowledge graph +adj_immune = read.csv("inst/extdata/immune_tree.csv", row.names = 1, check.names = FALSE) |> + as.matrix() +immune_graph = graph_from_adjacency_matrix(adj_immune, mode = "directed", weighted = TRUE) + +# Hierarchy - true (known) hierarchical relationships +# Consensus-only - temporary relationship used for ambiguous or often confused classes (e.g. macrophages and monocytes are often considered a single class but macrophages are not monocytes) +E(immune_graph)$Type = ifelse(E(immune_graph)$weight == 1, "Hierarchy", "Consensus-only") +E(immune_graph)$weight = 1 +usethis::use_data(immune_graph) diff --git a/inst/scripts/build_unification_maps.R b/inst/scripts/build_unification_maps.R new file mode 100644 index 00000000..3777a9ee --- /dev/null +++ b/inst/scripts/build_unification_maps.R @@ -0,0 +1,41 @@ +library(tidyverse) + +# load mappings between predictions and our dictionary +map_files = list.files("inst/extdata", pattern = "immune_map.+.csv", full.names = TRUE) +names(map_files) = gsub("immune_map_(.+).csv", "\\1", basename(map_files)) +celltype_unification_maps = map_files |> + lapply(read.csv) + +nonimmune_cellxgene = celltype_unification_maps$cellxgene |> + filter(!is_immune) |> + pull("to") |> + unique() + +# harmonise to a common nomenclature +celltype_unification_maps$azimuth = celltype_unification_maps$azimuth |> + select(from, to) |> + dplyr::rename( + azimuth_predicted_celltype_l2 = from, + azimuth = to + ) +celltype_unification_maps$blueprint = celltype_unification_maps$blueprint |> + select(from, to) |> + dplyr::rename( + blueprint_first_labels_fine = from, + blueprint = to + ) +celltype_unification_maps$monaco = celltype_unification_maps$monaco |> + select(from, to) |> + dplyr::rename( + monaco_first_labels_fine = from, + monaco = to + ) +celltype_unification_maps$cellxgene = celltype_unification_maps$cellxgene |> + select(from, to) |> + dplyr::rename( + cell_type = from, + cell_type_unified = to + ) + +usethis::use_data(celltype_unification_maps) +usethis::use_data(nonimmune_cellxgene) diff --git a/inst/scripts/example_run.R b/inst/scripts/example_run.R new file mode 100644 index 00000000..500442cc --- /dev/null +++ b/inst/scripts/example_run.R @@ -0,0 +1,36 @@ +data(celltype_unification_maps) +data(nonimmune_cellxgene) + +# unify cell types +cell_metadata = cell_metadata |> + left_join(celltype_unification_maps$azimuth, copy = TRUE) |> + left_join(celltype_unification_maps$blueprint, copy = TRUE) |> + left_join(celltype_unification_maps$monaco, copy = TRUE) |> + left_join(celltype_unification_maps$cellxgene, copy = TRUE) |> + mutate(ensemble_joinid = paste(azimuth, blueprint, monaco, cell_type_unified, sep = "_")) + +# produce the ensemble map +df_map = cell_metadata |> + count(ensemble_joinid, azimuth, blueprint, monaco, cell_type_unified, name = "NCells") |> + as_tibble() |> + mutate( + cellxgene = if_else(cell_type_unified %in% nonimmune_cellxgene, "non immune", cell_type_unified), + data_driven_ensemble = ensemble_annotation(cbind(azimuth, blueprint, monaco), override_celltype = c("non immune", "nkt", "mast")), + cell_type_unified_ensemble = ensemble_annotation(cbind(azimuth, blueprint, monaco, cellxgene), method_weights = c(1, 1, 1, 2), override_celltype = c("non immune", "nkt", "mast")), + cell_type_unified_ensemble = case_when( + cell_type_unified_ensemble == "non immune" & cellxgene == "non immune" ~ cell_type_unified, + cell_type_unified_ensemble == "non immune" & cellxgene != "non immune" ~ "other", + .default = cell_type_unified_ensemble + ), + is_immune = !cell_type_unified_ensemble %in% nonimmune_cellxgene + ) |> + select( + ensemble_joinid, + data_driven_ensemble, + cell_type_unified_ensemble, + is_immune + ) + +# use map to perform cell type ensemble +cell_metadata = cell_metadata |> + left_join(df_map, by = join_by(ensemble_joinid), copy = TRUE) \ No newline at end of file From f1a495efa0d65a7e6e22fe7db62dfc48d62bbab8 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 16 Dec 2024 16:20:26 +1100 Subject: [PATCH 101/145] solve single-column assay in sce object --- R/utilities.R | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/R/utilities.R b/R/utilities.R index 8ad9e264..020d2e5f 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -58,6 +58,7 @@ read_data_container <- function(file, #' @param container_type A character vector of length one specifies the input data type. #' @return An object stored in the defined path. #' @importFrom HDF5Array loadHDF5SummarizedExperiment saveHDF5SummarizedExperiment +#' @importFrom SummarizedExperiment assay #' @export save_experiment_data <- function(data, dir, @@ -77,6 +78,7 @@ save_experiment_data <- function(data, switch(container_type, "anndata" = { + if (ncol(assay(data)) == 1) data = data |> duplicate_single_column_assay() zellkonverter::writeH5AD(data, paste0(dir, ".h5ad"), compression = "gzip") read_data_container(paste0(dir, ".h5ad"), "anndata") }, @@ -93,6 +95,41 @@ save_experiment_data <- function(data, ) } +#' Duplicate Single-Column Assay in SingleCellExperiment Object +#' +#' This function handles SingleCellExperiment (SCE) objects where a specified assay +#' contains only one column. It duplicates the single-column assay to avoid potential +#' errors during saving or downstream analysis that require at least two columns. +#' The duplicated column is marked with a prefix `DUMMY___` to distinguish it. +#' Corresponding entries in the column metadata (`colData`) are also duplicated. +#' +#' @param sce A `SingleCellExperiment` object. +#' @importFrom SummarizedExperiment assay assays colData +#' @importFrom SingleCellExperiment SingleCellExperiment +#' @return A modified `SingleCellExperiment` object with the single-column assay +#' duplicated if applicable. If the assay already has more than one column, the +#' function returns the original object unchanged. +duplicate_single_column_assay <- function(sce) { + + assay = sce |> assays() |> names() |> magrittr::extract2(1) + + if(ncol(assay(sce)) == 1) { + + # Duplicate the assay to prevent saving errors due to single-column matrices + my_assay = cbind(assay(sce), assay(sce)) + # Rename the second column to distinguish it + colnames(my_assay)[2] = paste0("DUMMY", "___", colnames(my_assay)[2]) + + cd = colData(sce) + cd = cd |> rbind(cd) + rownames(cd)[2] = paste0("DUMMY", "___", rownames(cd)[2]) + + sce = SingleCellExperiment(assay = list(X = my_assay ), colData = cd) + sce + } + sce +} + #' Gene name conversion using ensembl database #' #' @param id Character vector of gene names From ce18dceea6c84e4490bf876dd300310a231668a3 Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 18 Dec 2024 15:55:37 +1100 Subject: [PATCH 102/145] metacell preprocessing, clustering and module update --- NAMESPACE | 16 +++++ R/functions.R | 21 ++++-- R/modules_grammar_hpc.R | 147 ++++++++++++++++++++++------------------ R/tranform_assay.R | 40 ++++++----- R/utilities.R | 9 ++- 5 files changed, 140 insertions(+), 93 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 2fbea3ee..758fdc8a 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,6 +6,7 @@ S3method(cluster_metacell,HPCell) S3method(evaluate_hpc,HPCell) S3method(get_single_cell,HPCell) S3method(normalise_abundance_seurat_SCT,HPCell) +S3method(preprocess_metacell,HPCell) S3method(print,HPCell) S3method(remove_dead_scuttle,HPCell) S3method(remove_doublets_scDblFinder,HPCell) @@ -15,6 +16,7 @@ S3method(remove_empty_threshold,HPCell) S3method(remove_empty_threshold,Seurat) S3method(score_cell_cycle_seurat,HPCell) S3method(transform_assay,HPCell) +export(SCimplify) export(alive_identification) export(annotate_cell_type) export(annotation_label_transfer) @@ -55,6 +57,8 @@ export(map_split_se_by_number_of_genes) export(map_test_differential_abundance) export(non_batch_variation_removal) export(normalise_abundance_seurat_SCT) +export(preprocess_SCimplify) +export(preprocess_metacell) export(preprocessing_output) export(pseudobulk_merge) export(read_data_container) @@ -104,6 +108,7 @@ importFrom(HDF5Array,loadHDF5SummarizedExperiment) importFrom(HDF5Array,saveHDF5SummarizedExperiment) importFrom(Matrix,Matrix) importFrom(Matrix,colSums) +importFrom(Matrix,t) importFrom(S4Vectors,cbind) importFrom(S4Vectors,metadata) importFrom(S4Vectors,split) @@ -141,6 +146,7 @@ importFrom(SummarizedExperiment,assay) importFrom(SummarizedExperiment,assays) importFrom(SummarizedExperiment,colData) importFrom(SummarizedExperiment,rowData) +importFrom(SuperCell,build_knn_graph) importFrom(biomaRt,getBM) importFrom(biomaRt,useMart) importFrom(callr,r) @@ -173,6 +179,13 @@ importFrom(future,tweak) importFrom(glue,glue) importFrom(here,here) importFrom(ids,random_id) +importFrom(igraph,E) +importFrom(igraph,V) +importFrom(igraph,cluster_louvain) +importFrom(igraph,cluster_walktrap) +importFrom(igraph,contract) +importFrom(igraph,simplify) +importFrom(irlba,irlba) importFrom(lme4,findbars) importFrom(magrittr,"%$%") importFrom(magrittr,"%>%") @@ -182,6 +195,7 @@ importFrom(magrittr,not) importFrom(magrittr,set_names) importFrom(methods,as) importFrom(methods,show) +importFrom(proxy,dist) importFrom(purrr,compact) importFrom(purrr,imap) importFrom(purrr,map) @@ -203,8 +217,10 @@ importFrom(scuttle,perCellQCMetrics) importFrom(stats,as.formula) importFrom(stats,density) importFrom(stats,model.matrix) +importFrom(stats,prcomp) importFrom(stats,terms) importFrom(stats,update) +importFrom(stats,var) importFrom(stringr,str_c) importFrom(stringr,str_detect) importFrom(stringr,str_remove) diff --git a/R/functions.R b/R/functions.R index 9e955d36..5f44bcd1 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1057,7 +1057,11 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #' and k-nearest neighbor (kNN) graph construction. It includes options for scaling, feature selection, #' approximate sampling, and PCA computation methods. #' -#' @param normalized_rna log-normalized gene expression matrix with rows to be genes and cols to be cells +#' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing RNA assay data. +#' @param empty_droplets_tbl A tibble identifying empty droplets. +#' @param alive_identification_tbl A tibble from alive cell identification. +#' @param cell_cycle_score_tbl A tibble from cell cycle scoring. +#' @param assay assay used, default = "RNA" #' @param genes.use a vector of genes used to compute PCA #' @param genes.exclude a vector of genes to be excluded when computing PCA #' @param n.var.genes if \code{"genes.use"} is not provided, \code{"n.var.genes"} genes with the largest variation are used @@ -1075,6 +1079,7 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #' @importFrom stats var prcomp #' @importFrom irlba irlba #' @importFrom SuperCell build_knn_graph +#' @export preprocess_SCimplify <- function(input_read_RNA_assay, empty_droplets_tbl = NULL, alive_identification_tbl = NULL, @@ -1082,7 +1087,7 @@ preprocess_SCimplify <- function(input_read_RNA_assay, assay = NULL, genes.use = NULL, genes.exclude = NULL, - n.var.genes = min(1000, nrow(normalized_rna)), + n.var.genes = min(1000, nrow(input_read_RNA_assay)), k.knn = 5, do.scale = TRUE, n.pc = 10, @@ -1100,8 +1105,9 @@ preprocess_SCimplify <- function(input_read_RNA_assay, class_input = input_read_RNA_assay |> class() # Get assay - if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) + if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> magrittr::extract2(1) + # Convert to SE if the input is SCE if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") @@ -1140,15 +1146,15 @@ preprocess_SCimplify <- function(input_read_RNA_assay, by=".cell" ) - # Normalise and scale + # Get normalise and scale gene expression matrix with rows to be genes and cols to be cells normalized_rna <- input_read_RNA_assay |> NormalizeData(normalization.method = "LogNormalize") |> FindVariableFeatures(nfeatures = 2000) |> ScaleData() |> RunPCA(npcs = 50, verbose = F) |> - RunUMAP(reduction = "pca", dims = c(1:30), n.neighbors = 30, verbose = F) - + RunUMAP(reduction = "pca", dims = c(1:30), n.neighbors = 30, verbose = F) |> + Seurat::GetAssayData(slot = "data") N.c <- ncol(normalized_rna) @@ -1244,7 +1250,7 @@ preprocess_SCimplify <- function(input_read_RNA_assay, sc.nw <- SuperCell::build_knn_graph( - normalized_rna = PCA.presampled$x[,n.pc], + X = PCA.presampled$x[,n.pc], k = k.knn, from = "coordinates", #use.nn2 = use.nn2, dist_method = "euclidean", @@ -1283,6 +1289,7 @@ preprocess_SCimplify <- function(input_read_RNA_assay, #' @importFrom igraph cluster_walktrap cluster_louvain contract simplify E V #' @importFrom Matrix t #' @importFrom proxy dist +#' @export SCimplify <- function(preprocessed, cell.annotation = NULL, cell.split.condition = NULL, diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index b1d09386..898cdee7 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -384,26 +384,43 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = # Define the generic function #' @export -cluster_metacell <- function(input_hpc, target_input = "data_object", target_output = "metacell_classification_tbl", ...) { - UseMethod("cluster_metacell") +preprocess_metacell <- function(input_hpc, target_input = "sce_transformed", target_output = "preprocessed_attributes_list", ...) { + UseMethod("preprocess_metacell") } #' @export -cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", target_output = "metacell_classification_tbl", ...) { +preprocess_metacell.HPCell = function(input_hpc, target_input = "sce_transformed", target_output = "preprocessed_attributes_list", ...) { input_hpc |> hpc_iterate( target_output = target_output, - user_function = metacell_clustering |> quote() , + user_function = preprocess_SCimplify |> quote() , input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = "empty_tbl" |> is_target() , alive_identification_tbl = "alive_tbl" |> is_target(), cell_cycle_score_tbl = "cell_cycle_tbl" |> is_target(), - external_path = glue("{input_hpc$initialisation$store}/external"), ... ) +} + +# Define the generic function +#' @export +cluster_metacell <- function(input_hpc, target_input = "preprocessed_attributes_list", target_output = "metacell_tbl", size_gamma_metacell, ...) { + UseMethod("cluster_metacell") +} + +#' @export +cluster_metacell.HPCell = function(input_hpc, target_input = "preprocessed_attributes_list", + target_output = "metacell_tbl", size_gamma_metacell, ...) { - + input_hpc |> + hpc_iterate( + target_output = target_output, + user_function = SCimplify |> quote() , + preprocessed = target_input |> is_target(), + gamma = size_gamma_metacell, + ... + ) } # Define the generic function @@ -506,65 +523,65 @@ get_single_cell.HPCell = function(input_hpc, target_input = "data_object", targe #' @param .contrasts Contrasts parameter. #' @return The result of the differential abundance test. #' -setMethod( - "test_differential_abundance", - signature(.data = "HPCell"), - function(.data, .formula, .sample = NULL, .transcript = NULL, - .abundance = NULL, contrasts = NULL, method = "edgeR_quasi_likelihood", - test_above_log2_fold_change = NULL, scaling_method = "TMM", - omit_contrast_in_colnames = FALSE, prefix = "", action = "add", factor_of_interest = NULL, - target_input = "pseudobulk_se", target_output = "de", group_by_column = NULL, - ..., significance_threshold = NULL, fill_missing_values = NULL, - .contrasts = NULL) { - - if(.formula |> deparse() |> str_detect("\\|")) - factory_de_random_effect( - se_list_input = target_input, - output_se = target_output, - formula=.formula, - #method="edger_robust_likelihood_ratio", - tiers = tiers, - factor_of_interest = factor_of_interest, - .abundance = .abundance - ) - - else - - .data |> - - hpc_single( - target_output = "chunk_tbl", - user_function = function(x){ x |> rownames() |> feature_chunks()} |> quote(), - x = "pseudobulk_se" |> is_target() - ) |> - - hpc_single( - target_output = "pseudobulk_group_list", - user_function = group_split |> quote(), - .tbl = target_input |> is_target(), - gr = as.name(gr) |> substitute(env = list(gr = group_by_column)), - packages = c("tidySummarizedExperiment", "S4Vectors", "targets"), - - # I need this because targets does not know the output - # is a list I need to iterate on outside the tiers - iterate = "map" - ) |> - - - hpc_iterate( - target_output = target_output, - user_function = internal_de_function |> quote() , - x = "pseudobulk_group_list" |> is_target(), - fi = factor_of_interest, - a = .abundance, - formul = .formula, - m = method, - packages="tidybulk" - ) - - - -}) +# setMethod( +# "test_differential_abundance", +# signature(.data = "HPCell"), +# function(.data, .formula, .sample = NULL, .transcript = NULL, +# .abundance = NULL, contrasts = NULL, method = "edgeR_quasi_likelihood", +# test_above_log2_fold_change = NULL, scaling_method = "TMM", +# omit_contrast_in_colnames = FALSE, prefix = "", action = "add", factor_of_interest = NULL, +# target_input = "pseudobulk_se", target_output = "de", group_by_column = NULL, +# ..., significance_threshold = NULL, fill_missing_values = NULL, +# .contrasts = NULL) { +# +# if(.formula |> deparse() |> str_detect("\\|")) +# factory_de_random_effect( +# se_list_input = target_input, +# output_se = target_output, +# formula=.formula, +# #method="edger_robust_likelihood_ratio", +# tiers = tiers, +# factor_of_interest = factor_of_interest, +# .abundance = .abundance +# ) +# +# else +# +# .data |> +# +# hpc_single( +# target_output = "chunk_tbl", +# user_function = function(x){ x |> rownames() |> feature_chunks()} |> quote(), +# x = "pseudobulk_se" |> is_target() +# ) |> +# +# hpc_single( +# target_output = "pseudobulk_group_list", +# user_function = group_split |> quote(), +# .tbl = target_input |> is_target(), +# gr = as.name(gr) |> substitute(env = list(gr = group_by_column)), +# packages = c("tidySummarizedExperiment", "S4Vectors", "targets"), +# +# # I need this because targets does not know the output +# # is a list I need to iterate on outside the tiers +# iterate = "map" +# ) |> +# +# +# hpc_iterate( +# target_output = target_output, +# user_function = internal_de_function |> quote() , +# x = "pseudobulk_group_list" |> is_target(), +# fi = factor_of_interest, +# a = .abundance, +# formul = .formula, +# m = method, +# packages="tidybulk" +# ) +# +# +# +# }) # Define the generic function diff --git a/R/tranform_assay.R b/R/tranform_assay.R index cabee0a1..36b3056a 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -23,7 +23,6 @@ transform_assay.HPCell = function( # Track the file hpc_single("transform_file", "temp_fx.rds", format = "file") |> - hpc_iterate( target_output = "transform", user_function = readRDS |> quote() , @@ -40,7 +39,7 @@ transform_assay.HPCell = function( transform_fx = "transform" |> is_target() , external_path = glue("{input_hpc$initialisation$store}/external") |> as.character(), container_type = "data_container_type" |> is_target() - + ) } @@ -66,23 +65,23 @@ transform_assay.HPCell = function( #' @importFrom glue glue #' @importFrom digest digest #' @importFrom stats density -#' @importFrom stats which.max #' #' @export transform_utility = function(input_read_RNA_assay, transform_fx, external_path, container_type) { - + numer_of_cells_to_sample = 5e3 if(ncol(input_read_RNA_assay) == 0) return(NULL) # Rename assay names to for consistency - if (names(assays(input_read_RNA_assay)) != "X") names(assays(input_read_RNA_assay)) <- "X" + if (length(names(assays(input_read_RNA_assay))) == 1 && + names(assays(input_read_RNA_assay)) != "X") names(assays(input_read_RNA_assay)) <- "X" # strip metadata that we don't need - input_read_RNA_assay = - input_read_RNA_assay |> - select(.cell, observation_joinid, observation_originalid, donor_id, dataset_id, sample_id, cell_type) - + input_read_RNA_assay = + input_read_RNA_assay |> + select(.cell, observation_joinid, observation_originalid, donor_id, dataset_id, sample_id, cell_type) + # Remove reduced dimensions reducedDim(input_read_RNA_assay) = NULL @@ -131,26 +130,25 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # Find the mode (peak) value of the counts mode_value <- density_est$x[which.max(density_est$y)] - # If the mode value is negative, shift counts and counts used for estimation to make the mode zero + # If the mode value is negative, shift counts to make the mode zero if (mode_value < 0) { counts <- counts + abs(mode_value) - counts_light_for_checks_apply_mode <- counts_light_for_checks + abs(mode_value) - } else {counts_light_for_checks_apply_mode <- counts_light_for_checks} + counts_light_for_checks = counts_light_for_checks + abs(mode_value) + } # Round counts to avoid potential subtraction errors due to floating-point precision counts <- round(counts, 5) - counts_light_for_checks_apply_mode <- round(counts_light_for_checks_apply_mode, 5) + counts_light_for_checks = round(counts_light_for_checks, 5) # Find the most frequent count value (mode) in the counts - majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks_apply_mode)$mode + majority_gene_counts <- compute_mode_delayedarray(counts_light_for_checks)$mode # Subtract the mode value from counts if it is not zero if (majority_gene_counts != 0) { counts <- counts - majority_gene_counts } - # Replace negative counts with zero to avoid downstream failures. - # Use counts_light_for_checks here instead of the potential shifted value + # Replace negative counts with zero to avoid downstream failures if (min(counts_light_for_checks) < 0) { counts[counts < 0] <- 0 } @@ -162,10 +160,17 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, assay(input_read_RNA_assay, assay_name) <- counts # Remove cells with zero total counts + # !!! MAYBE WE SHOULD LKEEP THESE CELLS AND LEAVE THEM TO THE FILTERING STEP input_read_RNA_assay <- input_read_RNA_assay[, colSums(counts) > 0] if (ncol(input_read_RNA_assay) == 0) return(NULL) + # Rebuild the SCE to stay light, and to set the assay with the right name + input_read_RNA_assay = SingleCellExperiment( + assays = list(X = input_read_RNA_assay |> assay() ), + colData = colData(input_read_RNA_assay) + ) + # Return the modified data object input_read_RNA_assay |> @@ -201,6 +206,5 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # file_name = paste0(file_name, extension) # Return data as target instead of file_name pointer - + } - diff --git a/R/utilities.R b/R/utilities.R index 3c6531b4..05b486e0 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -2877,14 +2877,17 @@ compute_mode_delayedarray <- function(delayed_array) { #' @importFrom SummarizedExperiment assay #' #' @noRd -check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY <- function(input_read_RNA_assay, assay_name) { +check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY <- function(input_read_RNA_assay, assay_name, subset_up_to_number_of_cells = dim(input_read_RNA_assay)[2]) { + + # Do now overshoor the number of cells + subset_up_to_number_of_cells = subset_up_to_number_of_cells |> min(dim(input_read_RNA_assay)[2]) # Check if object is SCE or Seurat if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { # For SingleCellExperiment assay_data <- assay(input_read_RNA_assay, assay_name) - my_min = min(assay_data) + my_min = min(assay_data[, 1:subset_up_to_number_of_cells]) # Check if all values are > 0 if (my_min > 0) { @@ -2899,7 +2902,7 @@ check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY <- function(input_rea assay_data <- GetAssayData(input_read_RNA_assay, assay = assay_name, slot = "data") my_min = min(assay_data) - + # Check if all values are > 0 if (my_min > 0) { # Subtract 1 from each value From 3d78886972a3020d8bf3a25c40e94ad4ba252ff8 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Wed, 18 Dec 2024 18:42:31 +1030 Subject: [PATCH 103/145] Update utilities.R --- R/utilities.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/utilities.R b/R/utilities.R index 020d2e5f..57d75e8c 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -106,12 +106,13 @@ save_experiment_data <- function(data, #' @param sce A `SingleCellExperiment` object. #' @importFrom SummarizedExperiment assay assays colData #' @importFrom SingleCellExperiment SingleCellExperiment +#' @importFrom rlang set_names #' @return A modified `SingleCellExperiment` object with the single-column assay #' duplicated if applicable. If the assay already has more than one column, the #' function returns the original object unchanged. duplicate_single_column_assay <- function(sce) { - assay = sce |> assays() |> names() |> magrittr::extract2(1) + assay_name = sce |> assays() |> names() |> magrittr::extract2(1) if(ncol(assay(sce)) == 1) { @@ -124,7 +125,7 @@ duplicate_single_column_assay <- function(sce) { cd = cd |> rbind(cd) rownames(cd)[2] = paste0("DUMMY", "___", rownames(cd)[2]) - sce = SingleCellExperiment(assay = list(X = my_assay ), colData = cd) + sce = SingleCellExperiment(assay = list(my_assay) |> set_names(assay_name), colData = cd) sce } sce From 494d9afae1b3ffdaf4858a7e6894eefd14d0d405 Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 16 Jan 2025 11:03:44 +1100 Subject: [PATCH 104/145] fix transform for missing cells issue --- R/tranform_assay.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 8498a640..606acf2b 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -146,6 +146,7 @@ transform_utility = function(input_read_RNA_assay, transform_fx, external_path, # Subtract the mode value from counts if it is not zero if (majority_gene_counts != 0) { counts <- counts - majority_gene_counts + counts_light_for_checks <- counts_light_for_checks - majority_gene_counts } # Replace negative counts with zero to avoid downstream failures From 29c85176e48aec466f9a7a1030c0f4e93da954ad Mon Sep 17 00:00:00 2001 From: myushen Date: Fri, 24 Jan 2025 16:48:09 +1100 Subject: [PATCH 105/145] hpcell pseudobulk module accept saving to H5ad --- DESCRIPTION | 2 +- NAMESPACE | 1 + R/functions.R | 21 ++++++++++++++++++--- R/modules_grammar_hpc.R | 3 ++- man/create_pseudobulk.Rd | 3 ++- man/duplicate_single_column_assay.Rd | 23 +++++++++++++++++++++++ 6 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 man/duplicate_single_column_assay.Rd diff --git a/DESCRIPTION b/DESCRIPTION index e923ae23..24e6408f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: HPCell Title: Massively-parallel R native pipeline for single-cell analysis -Version: 0.3.13 +Version: 0.3.14 Authors@R: c(person("Stefano", "Mangiola", email = "mangiolastefano@gmail.com", role = c("aut", "cre")), person("Jiayi", "Si", email = "si.j@wehi.edu.au", diff --git a/NAMESPACE b/NAMESPACE index a98c129a..0af4cfef 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -193,6 +193,7 @@ importFrom(rlang,is_symbolic) importFrom(rlang,parse_expr) importFrom(rlang,quo_is_symbolic) importFrom(rlang,rep_along) +importFrom(rlang,set_names) importFrom(rlang,sym) importFrom(scater,isOutlier) importFrom(scuttle,logNormCounts) diff --git a/R/functions.R b/R/functions.R index 22bf9453..b7b026c9 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1208,6 +1208,7 @@ preprocessing_output <- function(input_read_RNA_assay, #' @importFrom SummarizedExperiment rowData #' @importFrom digest digest #' @importFrom HDF5Array saveHDF5SummarizedExperiment +#' @importFrom SingleCellExperiment SingleCellExperiment #' #' @export @@ -1220,7 +1221,8 @@ create_pseudobulk <- function(input_read_RNA_assay, annotation_label_transfer_tbl = NULL, doublet_identification_tbl = NULL, x = c() , - external_path, assays = NULL) { + external_path, assays = NULL, + container_type) { #Fix GChecks .sample = NULL .feature = NULL @@ -1266,6 +1268,7 @@ create_pseudobulk <- function(input_read_RNA_assay, as_SummarizedExperiment(.sample, .feature, any_of(assays)) rowData(pseudobulk)$feature_name = rownames(pseudobulk) + colData(pseudobulk)$pseudobulk_sample = colnames(pseudobulk) pseudobulk = pseudobulk |> pivot_longer(cols = assays, names_to = "data_source", values_to = "count") |> @@ -1277,19 +1280,31 @@ create_pseudobulk <- function(input_read_RNA_assay, mutate(data_source = stringr::str_remove(data_source, "abundance_")) |> unite(".feature", c(symbol, data_source), remove = FALSE) |> - # Covert as_SummarizedExperiment( .sample = .sample, .transcript = .feature, .abundance = count ) + # Covert pseudobulk to SCE representation as save_experiment_data + # does not support saving SummarizedExperiment + if (container_type == "anndata") { + pseudobulk = SingleCellExperiment( + assays = assays(pseudobulk), + rowData = rowData(pseudobulk), + colData = colData(pseudobulk) + ) + } + file_name = glue("{external_path}/{digest(pseudobulk)}") pseudobulk |> # Conver to H5 - saveHDF5SummarizedExperiment(dir = file_name, replace=TRUE, as.sparse=TRUE) + save_experiment_data( + dir = file_name, + container_type = container_type + ) } diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 9a0373cc..6d8641db 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -411,7 +411,8 @@ calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL, target_input annotation_label_transfer_tbl = "annotation_tbl" |> is_target(), doublet_identification_tbl = "doublet_tbl" |> is_target(), x = group_by, - external_path = glue("{input_hpc$initialisation$store}/external") + external_path = glue("{input_hpc$initialisation$store}/external"), + container_type = data_container_type ) |> # merge diff --git a/man/create_pseudobulk.Rd b/man/create_pseudobulk.Rd index e5b1c8a7..50458a19 100644 --- a/man/create_pseudobulk.Rd +++ b/man/create_pseudobulk.Rd @@ -14,7 +14,8 @@ create_pseudobulk( doublet_identification_tbl = NULL, x = c(), external_path, - assays = NULL + assays = NULL, + container_type ) } \arguments{ diff --git a/man/duplicate_single_column_assay.Rd b/man/duplicate_single_column_assay.Rd new file mode 100644 index 00000000..ace1953a --- /dev/null +++ b/man/duplicate_single_column_assay.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{duplicate_single_column_assay} +\alias{duplicate_single_column_assay} +\title{Duplicate Single-Column Assay in SingleCellExperiment Object} +\usage{ +duplicate_single_column_assay(sce) +} +\arguments{ +\item{sce}{A \code{SingleCellExperiment} object.} +} +\value{ +A modified \code{SingleCellExperiment} object with the single-column assay +duplicated if applicable. If the assay already has more than one column, the +function returns the original object unchanged. +} +\description{ +This function handles SingleCellExperiment (SCE) objects where a specified assay +contains only one column. It duplicates the single-column assay to avoid potential +errors during saving or downstream analysis that require at least two columns. +The duplicated column is marked with a prefix \code{DUMMY___} to distinguish it. +Corresponding entries in the column metadata (\code{colData}) are also duplicated. +} From 40492c21a0b699470aa48c75973b667db7c32016 Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 29 Jan 2025 14:58:27 +1100 Subject: [PATCH 106/145] cell type concensus module and pseudobulk --- NAMESPACE | 5 + R/cell_type_curated_constructor.R | 266 ++++++++++++++++++++++++++++ R/functions.R | 21 ++- R/functions_consensus.R | 2 +- R/modules_grammar_hpc.R | 131 +++++++------- R/tranform_assay.R | 2 +- man/cell_type_ensembl_harmonised.Rd | 35 ++++ man/create_pseudobulk.Rd | 3 + man/ensemble_annotation.Rd | 37 ++++ man/preprocessing_output.Rd | 3 +- man/test_differential_abundance.Rd | 24 +-- man/transform_utility.Rd | 2 +- plots_chunk_1.pdf | Bin 0 -> 5882 bytes 13 files changed, 432 insertions(+), 99 deletions(-) create mode 100644 R/cell_type_curated_constructor.R create mode 100644 man/cell_type_ensembl_harmonised.Rd create mode 100644 man/ensemble_annotation.Rd create mode 100644 plots_chunk_1.pdf diff --git a/NAMESPACE b/NAMESPACE index 0af4cfef..a8a6f621 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,6 +2,7 @@ S3method(annotate_cell_type,HPCell) S3method(calculate_pseudobulk,HPCell) +S3method(celltype_consensus_constructor,HPCell) S3method(evaluate_hpc,HPCell) S3method(get_single_cell,HPCell) S3method(normalise_abundance_seurat_SCT,HPCell) @@ -19,6 +20,8 @@ export(annotate_cell_type) export(annotation_label_transfer) export(calculate_pseudobulk) export(cell_cycle_scoring) +export(cell_type_ensembl_harmonised) +export(celltype_consensus_constructor) export(clean_cellxgene_cell_types) export(compute_mode_delayedarray) export(convert_gene_names) @@ -27,6 +30,7 @@ export(delete_lines_with_word) export(doublet_identification) export(empty_droplet_id) export(empty_droplet_threshold) +export(ensemble_annotation) export(evaluate_hpc) export(factory_de_fix_effect) export(factory_de_random_effect) @@ -153,6 +157,7 @@ importFrom(dplyr,count) importFrom(dplyr,distinct) importFrom(dplyr,filter) importFrom(dplyr,group_by) +importFrom(dplyr,if_else) importFrom(dplyr,join_by) importFrom(dplyr,left_join) importFrom(dplyr,mutate) diff --git a/R/cell_type_curated_constructor.R b/R/cell_type_curated_constructor.R new file mode 100644 index 00000000..8c3c8f82 --- /dev/null +++ b/R/cell_type_curated_constructor.R @@ -0,0 +1,266 @@ +# Define the generic function +#' @export +celltype_consensus_constructor <- function(input_hpc, + target_input = "sce_transformed", + target_output = "cell_type_concensus_tbl", + celltype_unification_list = NULL, + nonimmune_cellxgene = NULL, + ...) { + UseMethod("celltype_consensus_constructor") +} + +#' @importFrom purrr map +#' +#' @export +celltype_consensus_constructor.HPCell <- function(input_hpc, + target_input = "sce_transformed", + target_output = "cell_type_concensus_tbl", + ...) { + + input_hpc |> + + hpc_iterate( + target_output = target_output, + user_function = cell_type_ensembl_harmonised |> quote(), + input_read_RNA_assay = target_input |> is_target(), + annotation_label_transfer_tbl = "annotation_tbl" |> is_target(), + ... + ) + + # # aggregate each + # hpc_iterate( + # target_output = pseudobulk_sample, + # user_function = create_pseudobulk |> quote() , + # input_read_RNA_assay = target_input |> is_target(), + # sample_names_vec = "sample_names" |> is_target(), + # empty_droplets_tbl = "empty_tbl" |> is_target() , + # alive_identification_tbl = "alive_tbl" |> is_target(), + # cell_cycle_score_tbl = "cell_cycle_tbl" |> is_target(), + # annotation_label_transfer_tbl = "annotation_tbl" |> is_target(), + # doublet_identification_tbl = "doublet_tbl" |> is_target(), + # x = group_by, + # external_path = glue("{input_hpc$initialisation$store}/external"), + # container_type = data_container_type + # ) + # +} + +#' Harmonize Cell Types Across Datasets +#' +#' This function integrates and harmonizes cell type annotations across multiple +#' datasets by applying predefined unification maps and cell type labels. +#' It uses a combination of transferred annotations and predefined maps to +#' produce a consensus on cell type identities. +#' +#' @param input_read_RNA_assay A `SummarizedExperiment` object. +#' @param annotation_label_transfer_tbl A tibble with annotation label transfer data. +#' @param celltype_unification_maps A list containing mapping data frames for different sources +#' (e.g., Azimuth, Blueprint, Monaco, and cellxgene). Default is `NULL`. +#' If `NULL`, it retrieves default maps stored in HPCell. +#' @param nonimmune A character vector specifying non-immune cell types. +#' Default is `NULL`. If `NULL`, it retrieves default non-immune types from HPCell. +#' +#' @return A tibble of the input SummarizedExperiment metadata enriched with unified cell type annotations +#' and additional classification details. +#' +#' @importFrom dplyr left_join select rename mutate count as_tibble if_else case_when +#' @importFrom tibble rownames_to_column as_tibble +#' @importFrom purrr map +#' @importFrom tidyr unnest +#' @export +cell_type_ensembl_harmonised <- function(input_read_RNA_assay, + annotation_label_transfer_tbl = NULL, + celltype_unification_maps = NULL, + nonimmune = NULL) { + # Use pre-generated celltype_unification_maps (list) and + # nonimmune_cellxgene (character vector) from Dharmesh + if (is.null(celltype_unification_maps)) + celltype_unification_maps <- HPCell::celltype_unification_maps + if (is.null(nonimmune)) + nonimmune <- HPCell::nonimmune_cellxgene + + # get cell_metadata + try({ + if (inherits(annotation_label_transfer_tbl, "tbl_df")){ + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(annotation_label_transfer_tbl, by = ".cell") + } + }, silent = TRUE) + + # Rename and unnest annotation_tbl + input_read_RNA_assay <- input_read_RNA_assay |> colData() |> as.data.frame() |> + rownames_to_column(var = ".cell") |> + dplyr::rename( + blueprint_first_labels_fine = blueprint_first.labels.fine, + monaco_first_labels_fine = monaco_first.labels.fine, + azimuth_predicted_celltype_l2 = azimuth_predicted.celltype.l2 + ) |> + unnest(blueprint_scores_fine) |> + select(.cell, observation_joinid, + observation_originalid, + donor_id, dataset_id, sample_id, cell_type, + blueprint_first_labels_fine, monaco_first_labels_fine, any_of("azimuth_predicted_celltype_l2"), monaco_scores_fine, contains("macro"), contains("CD4") ) |> + unnest(monaco_scores_fine) |> + select(.cell, observation_joinid, + observation_originalid, + donor_id, dataset_id, sample_id, cell_type, + blueprint_first_labels_fine, monaco_first_labels_fine, any_of("azimuth_predicted_celltype_l2"), contains("macro") , contains("CD4"), contains("helper"), contains("Th")) + + # Unify cell types + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(celltype_unification_maps$azimuth, copy = TRUE) |> + left_join(celltype_unification_maps$blueprint, copy = TRUE) |> + left_join(celltype_unification_maps$monaco, copy = TRUE) |> + left_join(celltype_unification_maps$cellxgene, copy = TRUE) |> + mutate(ensemble_joinid = paste(azimuth, blueprint, monaco, cell_type_unified, sep = "_")) + + # Produce the ensemble map + df_map <- input_read_RNA_assay |> + dplyr::count(ensemble_joinid, azimuth, blueprint, monaco, cell_type_unified, name = "NCells") |> + as_tibble() |> + mutate( + cellxgene = if_else(cell_type_unified %in% nonimmune_cellxgene, "non immune", + cell_type_unified), + data_driven_ensemble = ensemble_annotation(cbind(azimuth, blueprint, monaco), + override_celltype = c("non immune", "nkt", "mast")), + cell_type_unified_ensemble = ensemble_annotation(cbind(azimuth, blueprint, monaco, cellxgene), + method_weights = c(1, 1, 1, 2), + override_celltype = c("non immune", "nkt", "mast")), + cell_type_unified_ensemble = case_when( + cell_type_unified_ensemble == "non immune" & cellxgene == "non immune" ~ cell_type_unified, + cell_type_unified_ensemble == "non immune" & cellxgene != "non immune" ~ "other", + TRUE ~ cell_type_unified_ensemble + ), + is_immune = !cell_type_unified_ensemble %in% nonimmune + ) |> + select( + ensemble_joinid, + data_driven_ensemble, + cell_type_unified_ensemble, + is_immune + ) + + # Use map to perform cell type ensemble + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(df_map, by = "ensemble_joinid", copy = TRUE) + + return(input_read_RNA_assay) +} + + +#' Ensemble Annotation for Cell Type Identification +#' +#' This function creates an ensemble annotation for cell types by utilizing a voting mechanism +#' across different methods. It leverages a hierarchy of cell types, method-specific weights, +#' and an option to override certain cell types to derive a consensus classification. +#' +#' @param celltype_matrix A matrix or data frame where columns represent different annotation +#' methods for cell types. Each element in the matrix represents a cell type determined by +#' each method. +#' @param method_weights Optional numeric vector or matrix specifying weights for each method. +#' If not provided, equal weights are used. If provided as a vector, it should match the +#' number of methods (columns of celltype_matrix). +#' @param override_celltype A character vector of cell types that should override the voting +#' process if they appear. This can be used to set certain cell types as non-negotiable +#' when they are detected by any method. +#' @param celltype_tree An igraph object representing the hierarchy of cell types. If NULL, +#' a default graph named "immune_graph" from the global environment is used. +#' +#' @return A vector representing the consensus cell type for each row in the input `celltype_matrix`. +#' +#' @export +ensemble_annotation <- function(celltype_matrix, method_weights = NULL, + override_celltype = c(), celltype_tree = NULL) { + if (is.null(celltype_tree)) { + celltype_tree <- get("immune_graph") + } + + stopifnot(is(celltype_tree, "igraph")) + stopifnot(igraph::is_directed(celltype_tree)) + stopifnot(is.matrix(celltype_matrix) | is.data.frame(celltype_matrix)) + + node_names = igraph::V(celltype_tree)$name + + # check override_celltype nodes are present + missing_nodes = setdiff(override_celltype, node_names) + if (!is.null(missing_nodes) & length(missing_nodes) > 0) { + missing_nodes = paste(missing_nodes, collapse = ", ") + stop(sprintf("the following nodes in 'override_celltype' not found in 'celltype_tree': %s", utils::capture.output(utils::str(missing_nodes)))) + } + + # check celltype_matrix + if (ncol(celltype_matrix) == 1) { + # no ensemble required + return(celltype_matrix) + } else { + celltype_matrix = as.matrix(celltype_matrix) + invalid_types = setdiff(celltype_matrix, c(node_names, NA)) + if (length(invalid_types) > 0) { + warning(sprintf("the following cell types in 'celltype_matrix' are not in the graph and will be set to NA:\n"), utils::capture.output(utils::str(invalid_types))) + } + celltype_matrix[celltype_matrix %in% invalid_types] = NA + } + + # check method_weights + if (is.null(method_weights)) { + method_weights = matrix(1, ncol = ncol(celltype_matrix), nrow = nrow(celltype_matrix)) + } else if (is.vector(method_weights)) { + if (ncol(celltype_matrix) != length(method_weights)) { + stop("the number of columns in 'celltype_matrix' should match the length of 'method_weights'") + } + method_weights = matrix(rep(method_weights, each = nrow(celltype_matrix)), nrow = nrow(celltype_matrix)) + } else if (is.matrix(method_weights) | is.data.frame(method_weights)) { + if (ncol(celltype_matrix) != ncol(method_weights)) { + stop("the number of columns in 'celltype_matrix' and 'method_weights' should be equal") + } + method_weights = as.matrix(method_weights) + } + method_weights = method_weights / rowSums(method_weights) + + # create vote matrix + vote_matrix = Matrix::sparseMatrix(i = integer(0), j = integer(0), dims = c(nrow(celltype_matrix), length(node_names)), dimnames = list(rownames(celltype_matrix), node_names)) + for (i in seq_len(ncol(celltype_matrix))) { + locmat = cbind(seq_len(nrow(celltype_matrix)), as.numeric(factor(celltype_matrix[, i], levels = node_names))) + missing = is.na(locmat[, 2]) + vote_matrix[locmat[!missing, ]] = vote_matrix[locmat[!missing, ]] + method_weights[!missing, i] + } + + # propagate vote to children + d = apply(!is.infinite(igraph::distances(celltype_tree, mode = "out")), 2, as.numeric) + d = as(d, "sparseMatrix") + vote_matrix_children = Matrix::tcrossprod(vote_matrix, Matrix::t(d)) + + # propagate vote to parent + d = igraph::distances(celltype_tree, mode = "in") + d = 1 / (2^d) - 0.1 # vote halved at each subsequent ancestor + diag(d)[igraph::degree(celltype_tree, mode = "in") > 0 & igraph::degree(celltype_tree, mode = "out") == 0] = 0 + diag(d) = diag(d) * 0.9 # prevent leaf nodes from being selected when trying to identify upstream ancestor (works for any number in the interval (0.5, 1)) + vote_matrix_parent = Matrix::tcrossprod(vote_matrix, Matrix::t(d)) + + # assess votes and identify common ancestors for ties + vote_matrix_children = apply(vote_matrix_children, 1, \(x) x[x > 0], simplify = FALSE) + vote_matrix_parent = apply(vote_matrix_parent, 1, \(x) x[x > 0], simplify = FALSE) + ensemble = mapply(\(children, parents) { + # override condition + override_node = intersect(override_celltype, names(children)) + if (length(override_node) > 0) { + return(override_node[1]) + } + + # maximum votes + children = names(children)[children == max(children)] + if (length(children) == 1) { + return(children) + } else { + # lowest ancestor with the maximum votes + parents = names(parents)[parents == max(parents)] + if (length(parents) == 1) { + return(parents) + } else { + return(NA) + } + } + }, vote_matrix_children, vote_matrix_parent) + + return(ensemble) +} diff --git a/R/functions.R b/R/functions.R index b7b026c9..d5fe293f 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1094,8 +1094,9 @@ preprocessing_output <- function(input_read_RNA_assay, non_batch_variation_removal_S = NULL, alive_identification_tbl = NULL, cell_cycle_score_tbl = NULL, + cell_type_ensembl_harmonised_tbl = NULL, annotation_label_transfer_tbl = NULL, - doublet_identification_tbl){ + doublet_identification_tbl = NULL){ #Fix GCHECKS .cell <- NULL alive <- NULL @@ -1156,7 +1157,8 @@ preprocessing_output <- function(input_read_RNA_assay, try({ if (inherits(annotation_label_transfer_tbl, "tbl_df")){ input_read_RNA_assay <- input_read_RNA_assay |> - left_join(annotation_label_transfer_tbl, by = ".cell") + left_join(annotation_label_transfer_tbl, by = ".cell") |> + left_join(cell_type_ensembl_harmonised_tbl) } }, silent = TRUE) @@ -1183,6 +1185,7 @@ preprocessing_output <- function(input_read_RNA_assay, #' @param x A grouping variable used to aggregate cells into pseudobulk samples. #' This variable should be present in the `preprocessing_output_S` object and #' typically represents a factor such as sample ID or condition. +#' @param container_type A character vector specifying the output file type. Ideally it should match to the input file type. #' @param ... Additional arguments passed to internal functions used within #' `create_pseudobulk`. This includes parameters for customization of #' aggregation, data transformation, or any other process involved in the @@ -1219,6 +1222,7 @@ create_pseudobulk <- function(input_read_RNA_assay, alive_identification_tbl = NULL, cell_cycle_score_tbl = NULL, annotation_label_transfer_tbl = NULL, + cell_type_ensembl_harmonised_tbl = NULL, doublet_identification_tbl = NULL, x = c() , external_path, assays = NULL, @@ -1236,10 +1240,11 @@ create_pseudobulk <- function(input_read_RNA_assay, input_read_RNA_assay, empty_droplets_tbl, non_batch_variation_removal_S = NULL, - alive_identification_tbl, - cell_cycle_score_tbl, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + cell_type_ensembl_harmonised_tbl, annotation_label_transfer_tbl, - doublet_identification_tbl + doublet_identification_tbl = NULL ) @@ -1286,8 +1291,8 @@ create_pseudobulk <- function(input_read_RNA_assay, .abundance = count ) - # Covert pseudobulk to SCE representation as save_experiment_data - # does not support saving SummarizedExperiment + # Covert pseudobulk to SCE representation as zellkonverter::writeH5AD + # does not support saving a SummarizedExperiment if (container_type == "anndata") { pseudobulk = SingleCellExperiment( assays = assays(pseudobulk), @@ -1300,7 +1305,7 @@ create_pseudobulk <- function(input_read_RNA_assay, pseudobulk |> - # Conver to H5 + # Convert to Anndata save_experiment_data( dir = file_name, container_type = container_type diff --git a/R/functions_consensus.R b/R/functions_consensus.R index e8867ddc..7928e4b5 100644 --- a/R/functions_consensus.R +++ b/R/functions_consensus.R @@ -1,6 +1,6 @@ ensemble_annotation <- function(celltype_matrix, method_weights = NULL, override_celltype = c(), celltype_tree = NULL) { if (is.null(celltype_tree)) { - .data_internal(immune_graph) + celltype_tree <- get("immune_graph") } stopifnot(is(celltype_tree, "igraph")) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 6d8641db..6e3cf9f5 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -409,17 +409,18 @@ calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL, target_input alive_identification_tbl = "alive_tbl" |> is_target(), cell_cycle_score_tbl = "cell_cycle_tbl" |> is_target(), annotation_label_transfer_tbl = "annotation_tbl" |> is_target(), + cell_type_ensembl_harmonised_tbl = "cell_type_concensus_tbl" |> is_target(), doublet_identification_tbl = "doublet_tbl" |> is_target(), x = group_by, - external_path = glue("{input_hpc$initialisation$store}/external"), - container_type = data_container_type - ) |> + external_path = glue("{input_hpc$initialisation$store}/external") |> as.character(), + container_type = "data_container_type" |> is_target() + ) |> # merge hpc_merge( - target_output = target_output, - user_function = pseudobulk_merge |> quote(), - external_path = glue("{input_hpc$initialisation$store}/external"), + target_output = target_output, + user_function = pseudobulk_merge |> quote(), + external_path = glue("{input_hpc$initialisation$store}/external") |> as.character(), pseudobulk_list = pseudobulk_sample |> is_target(), packages = c("tidySummarizedExperiment", "HPCell") ) @@ -482,65 +483,65 @@ get_single_cell.HPCell = function(input_hpc, target_input = "data_object", targe #' @param .contrasts Contrasts parameter. #' @return The result of the differential abundance test. #' -setMethod( - "test_differential_abundance", - signature(.data = "HPCell"), - function(.data, .formula, .sample = NULL, .transcript = NULL, - .abundance = NULL, contrasts = NULL, method = "edgeR_quasi_likelihood", - test_above_log2_fold_change = NULL, scaling_method = "TMM", - omit_contrast_in_colnames = FALSE, prefix = "", action = "add", factor_of_interest = NULL, - target_input = "pseudobulk_se", target_output = "de", group_by_column = NULL, - ..., significance_threshold = NULL, fill_missing_values = NULL, - .contrasts = NULL) { - - if(.formula |> deparse() |> str_detect("\\|")) - factory_de_random_effect( - se_list_input = target_input, - output_se = target_output, - formula=.formula, - #method="edger_robust_likelihood_ratio", - tiers = tiers, - factor_of_interest = factor_of_interest, - .abundance = .abundance - ) - - else - - .data |> - - hpc_single( - target_output = "chunk_tbl", - user_function = function(x){ x |> rownames() |> feature_chunks()} |> quote(), - x = "pseudobulk_se" |> is_target() - ) |> - - hpc_single( - target_output = "pseudobulk_group_list", - user_function = group_split |> quote(), - .tbl = target_input |> is_target(), - gr = as.name(gr) |> substitute(env = list(gr = group_by_column)), - packages = c("tidySummarizedExperiment", "S4Vectors", "targets"), - - # I need this because targets does not know the output - # is a list I need to iterate on outside the tiers - iterate = "map" - ) |> - - - hpc_iterate( - target_output = target_output, - user_function = internal_de_function |> quote() , - x = "pseudobulk_group_list" |> is_target(), - fi = factor_of_interest, - a = .abundance, - formul = .formula, - m = method, - packages="tidybulk" - ) - - - -}) +# setMethod( +# "test_differential_abundance", +# signature(.data = "HPCell"), +# function(.data, .formula, .sample = NULL, .transcript = NULL, +# .abundance = NULL, contrasts = NULL, method = "edgeR_quasi_likelihood", +# test_above_log2_fold_change = NULL, scaling_method = "TMM", +# omit_contrast_in_colnames = FALSE, prefix = "", action = "add", factor_of_interest = NULL, +# target_input = "pseudobulk_se", target_output = "de", group_by_column = NULL, +# ..., significance_threshold = NULL, fill_missing_values = NULL, +# .contrasts = NULL) { +# +# if(.formula |> deparse() |> str_detect("\\|")) +# factory_de_random_effect( +# se_list_input = target_input, +# output_se = target_output, +# formula=.formula, +# #method="edger_robust_likelihood_ratio", +# tiers = tiers, +# factor_of_interest = factor_of_interest, +# .abundance = .abundance +# ) +# +# else +# +# .data |> +# +# hpc_single( +# target_output = "chunk_tbl", +# user_function = function(x){ x |> rownames() |> feature_chunks()} |> quote(), +# x = "pseudobulk_se" |> is_target() +# ) |> +# +# hpc_single( +# target_output = "pseudobulk_group_list", +# user_function = group_split |> quote(), +# .tbl = target_input |> is_target(), +# gr = as.name(gr) |> substitute(env = list(gr = group_by_column)), +# packages = c("tidySummarizedExperiment", "S4Vectors", "targets"), +# +# # I need this because targets does not know the output +# # is a list I need to iterate on outside the tiers +# iterate = "map" +# ) |> +# +# +# hpc_iterate( +# target_output = target_output, +# user_function = internal_de_function |> quote() , +# x = "pseudobulk_group_list" |> is_target(), +# fi = factor_of_interest, +# a = .abundance, +# formul = .formula, +# m = method, +# packages="tidybulk" +# ) +# +# +# +# }) # Define the generic function diff --git a/R/tranform_assay.R b/R/tranform_assay.R index 606acf2b..b639b1da 100644 --- a/R/tranform_assay.R +++ b/R/tranform_assay.R @@ -52,7 +52,7 @@ transform_assay.HPCell = function( #' @param input_read_RNA_assay A SummarizedExperiment object to be transformed. #' @param transform_fx A function to apply to the assay of the SummarizedExperiment object. #' @param external_path A character string specifying the directory path to save the transformed object. -#' @param data_container_type A character vector specifying the output file type. Ideally it should match to the input file type. +#' @param container_type A character vector specifying the output file type. Ideally it should match to the input file type. #' @return The function does not return an object. It saves the transformed SummarizedExperiment object to the specified path. #' #' @importFrom SummarizedExperiment assay diff --git a/man/cell_type_ensembl_harmonised.Rd b/man/cell_type_ensembl_harmonised.Rd new file mode 100644 index 00000000..e5d54541 --- /dev/null +++ b/man/cell_type_ensembl_harmonised.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cell_type_curated_constructor.R +\name{cell_type_ensembl_harmonised} +\alias{cell_type_ensembl_harmonised} +\title{Harmonize Cell Types Across Datasets} +\usage{ +cell_type_ensembl_harmonised( + input_read_RNA_assay, + annotation_label_transfer_tbl = NULL, + celltype_unification_maps = NULL, + nonimmune = NULL +) +} +\arguments{ +\item{input_read_RNA_assay}{A \code{SummarizedExperiment} object.} + +\item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} + +\item{celltype_unification_maps}{A list containing mapping data frames for different sources +(e.g., Azimuth, Blueprint, Monaco, and cellxgene). Default is \code{NULL}. +If \code{NULL}, it retrieves default maps stored in HPCell.} + +\item{nonimmune}{A character vector specifying non-immune cell types. +Default is \code{NULL}. If \code{NULL}, it retrieves default non-immune types from HPCell.} +} +\value{ +A tibble of the input SummarizedExperiment metadata enriched with unified cell type annotations +and additional classification details. +} +\description{ +This function integrates and harmonizes cell type annotations across multiple +datasets by applying predefined unification maps and cell type labels. +It uses a combination of transferred annotations and predefined maps to +produce a consensus on cell type identities. +} diff --git a/man/create_pseudobulk.Rd b/man/create_pseudobulk.Rd index 50458a19..1f1dd4fc 100644 --- a/man/create_pseudobulk.Rd +++ b/man/create_pseudobulk.Rd @@ -11,6 +11,7 @@ create_pseudobulk( alive_identification_tbl = NULL, cell_cycle_score_tbl = NULL, annotation_label_transfer_tbl = NULL, + cell_type_ensembl_harmonised_tbl = NULL, doublet_identification_tbl = NULL, x = c(), external_path, @@ -26,6 +27,8 @@ typically represents a factor such as sample ID or condition.} \item{assays}{A character vector specifying the assays to be included in the pseudobulk creation process, such as c("RNA", "ADT").} +\item{container_type}{A character vector specifying the output file type. Ideally it should match to the input file type.} + \item{preprocessing_output_S}{Processed dataset from preprocessing.} \item{...}{Additional arguments passed to internal functions used within diff --git a/man/ensemble_annotation.Rd b/man/ensemble_annotation.Rd new file mode 100644 index 00000000..eaa50830 --- /dev/null +++ b/man/ensemble_annotation.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cell_type_curated_constructor.R +\name{ensemble_annotation} +\alias{ensemble_annotation} +\title{Ensemble Annotation for Cell Type Identification} +\usage{ +ensemble_annotation( + celltype_matrix, + method_weights = NULL, + override_celltype = c(), + celltype_tree = NULL +) +} +\arguments{ +\item{celltype_matrix}{A matrix or data frame where columns represent different annotation +methods for cell types. Each element in the matrix represents a cell type determined by +each method.} + +\item{method_weights}{Optional numeric vector or matrix specifying weights for each method. +If not provided, equal weights are used. If provided as a vector, it should match the +number of methods (columns of celltype_matrix).} + +\item{override_celltype}{A character vector of cell types that should override the voting +process if they appear. This can be used to set certain cell types as non-negotiable +when they are detected by any method.} + +\item{celltype_tree}{An igraph object representing the hierarchy of cell types. If NULL, +a default graph named "immune_graph" from the global environment is used.} +} +\value{ +A vector representing the consensus cell type for each row in the input \code{celltype_matrix}. +} +\description{ +This function creates an ensemble annotation for cell types by utilizing a voting mechanism +across different methods. It leverages a hierarchy of cell types, method-specific weights, +and an option to override certain cell types to derive a consensus classification. +} diff --git a/man/preprocessing_output.Rd b/man/preprocessing_output.Rd index 3426b53e..5e72e21a 100644 --- a/man/preprocessing_output.Rd +++ b/man/preprocessing_output.Rd @@ -10,8 +10,9 @@ preprocessing_output( non_batch_variation_removal_S = NULL, alive_identification_tbl = NULL, cell_cycle_score_tbl = NULL, + cell_type_ensembl_harmonised_tbl = NULL, annotation_label_transfer_tbl = NULL, - doublet_identification_tbl + doublet_identification_tbl = NULL ) } \arguments{ diff --git a/man/test_differential_abundance.Rd b/man/test_differential_abundance.Rd index 0fe4cdaf..87f74b71 100644 --- a/man/test_differential_abundance.Rd +++ b/man/test_differential_abundance.Rd @@ -2,30 +2,10 @@ % Please edit documentation in R/modules_grammar_hpc.R \name{test_differential_abundance-HPCell-method} \alias{test_differential_abundance-HPCell-method} +\alias{evaluate_hpc} \title{Test Differential Abundance for HPCell} \usage{ -\S4method{test_differential_abundance}{HPCell}( - .data, - .formula, - .sample = NULL, - .transcript = NULL, - .abundance = NULL, - contrasts = NULL, - method = "edgeR_quasi_likelihood", - test_above_log2_fold_change = NULL, - scaling_method = "TMM", - omit_contrast_in_colnames = FALSE, - prefix = "", - action = "add", - factor_of_interest = NULL, - target_input = "pseudobulk_se", - target_output = "de", - group_by_column = NULL, - ..., - significance_threshold = NULL, - fill_missing_values = NULL, - .contrasts = NULL -) +evaluate_hpc(input_hpc) } \arguments{ \item{.data}{An HPCell object.} diff --git a/man/transform_utility.Rd b/man/transform_utility.Rd index 7a50dc40..92395a41 100644 --- a/man/transform_utility.Rd +++ b/man/transform_utility.Rd @@ -18,7 +18,7 @@ transform_utility( \item{external_path}{A character string specifying the directory path to save the transformed object.} -\item{data_container_type}{A character vector specifying the output file type. Ideally it should match to the input file type.} +\item{container_type}{A character vector specifying the output file type. Ideally it should match to the input file type.} } \value{ The function does not return an object. It saves the transformed SummarizedExperiment object to the specified path. diff --git a/plots_chunk_1.pdf b/plots_chunk_1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f82636eeeeb38b8d1d900defd56acbcffb9c97c2 GIT binary patch literal 5882 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 literal 0 HcmV?d00001 From 87c4268624c643ed3b212776992ec420e8b77d03 Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 30 Jan 2025 09:33:05 +1100 Subject: [PATCH 107/145] preprocess_simplify as a function not a module --- NAMESPACE | 2 -- R/functions.R | 39 ++++++++++++++++++++++----------------- R/modules_grammar_hpc.R | 25 ++----------------------- 3 files changed, 24 insertions(+), 42 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 758fdc8a..6b54a4e2 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,7 +6,6 @@ S3method(cluster_metacell,HPCell) S3method(evaluate_hpc,HPCell) S3method(get_single_cell,HPCell) S3method(normalise_abundance_seurat_SCT,HPCell) -S3method(preprocess_metacell,HPCell) S3method(print,HPCell) S3method(remove_dead_scuttle,HPCell) S3method(remove_doublets_scDblFinder,HPCell) @@ -58,7 +57,6 @@ export(map_test_differential_abundance) export(non_batch_variation_removal) export(normalise_abundance_seurat_SCT) export(preprocess_SCimplify) -export(preprocess_metacell) export(preprocessing_output) export(pseudobulk_merge) export(read_data_container) diff --git a/R/functions.R b/R/functions.R index 5f44bcd1..e7bc4360 100644 --- a/R/functions.R +++ b/R/functions.R @@ -157,15 +157,15 @@ empty_droplet_id <- function(input_read_RNA_assay, # # Plot bar-codes ranks # plot_barcode_ranks = # barcode_table %>% - # ggplot2::ggplot(aes(rank, total)) + - # geom_point(aes(color = empty_droplet, size = empty_droplet )) + - # geom_line(aes(rank, fitted), color="purple") + - # geom_hline(aes(yintercept = knee), color="dodgerblue") + - # geom_hline(aes(yintercept = inflection), color="forestgreen") + - # scale_x_log10() + - # scale_y_log10() + - # scale_color_manual(values = c("black", "#e11f28")) + - # scale_size_discrete(range = c(0, 2)) + + # ggplot2::ggplot(aes(rank, total)) + # geom_point(aes(color = empty_droplet, size = empty_droplet )) + # geom_line(aes(rank, fitted), color="purple") + # geom_hline(aes(yintercept = knee), color="dodgerblue") + # geom_hline(aes(yintercept = inflection), color="forestgreen") + # scale_x_log10() + # scale_y_log10() + # scale_color_manual(values = c("black", "#e11f28")) + # scale_size_discrete(range = c(0, 2)) # theme_bw() # plot_barcode_ranks |> saveRDS(output_path_plot_rds) @@ -1262,11 +1262,16 @@ preprocess_SCimplify <- function(input_read_RNA_assay, ... ) - list(sc.nw = sc.nw, PCA.presampled = PCA.presampled, - normalized_rna.for.pca = normalized_rna.for.pca, presampled.cell.ids = presampled.cell.ids, - rest.cell.ids = rest.cell.ids, genes.use = genes.use, cell.ids = cell.ids, - do.approx = do.approx, n.pc = n.pc, k.knn = k.knn) - + list(sc.nw = sc.nw, + PCA.presampled = PCA.presampled, + normalized_rna.for.pca = normalized_rna.for.pca, + rest.cell.ids = rest.cell.ids, + genes.use = genes.use, + cell.ids = cell.ids, + do.approx = do.approx, + n.pc = n.pc, + k.knn = k.knn) + } #' Detection of metacells with the SuperCell approach @@ -1290,7 +1295,7 @@ preprocess_SCimplify <- function(input_read_RNA_assay, #' @importFrom Matrix t #' @importFrom proxy dist #' @export -SCimplify <- function(preprocessed, +postprocess_SCimplify <- function(preprocessed, cell.annotation = NULL, cell.split.condition = NULL, gamma, @@ -1386,13 +1391,13 @@ SCimplify <- function(preprocessed, N.blocks <- length(rest.cell.ids) %/% block.size if (length(rest.cell.ids) %% block.size > 0) - N.blocks <- N.blocks + 1 + N.blocks <- N.blocks+1 if (N.blocks > 0) { for (i in 1:N.blocks) { # compute knn by blocks - idx.begin <- (i - 1) * block.size + 1 + idx.begin <- (i - 1) * block.size+1 idx.end <- min(i * block.size, length(rest.cell.ids)) cur.rest.cell.ids <- rest.cell.ids[idx.begin:idx.end] diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 898cdee7..d31ae239 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -384,33 +384,12 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = # Define the generic function #' @export -preprocess_metacell <- function(input_hpc, target_input = "sce_transformed", target_output = "preprocessed_attributes_list", ...) { - UseMethod("preprocess_metacell") -} - -#' @export -preprocess_metacell.HPCell = function(input_hpc, target_input = "sce_transformed", target_output = "preprocessed_attributes_list", ...) { - - input_hpc |> - hpc_iterate( - target_output = target_output, - user_function = preprocess_SCimplify |> quote() , - input_read_RNA_assay = target_input |> is_target(), - empty_droplets_tbl = "empty_tbl" |> is_target() , - alive_identification_tbl = "alive_tbl" |> is_target(), - cell_cycle_score_tbl = "cell_cycle_tbl" |> is_target(), - ... - ) -} - -# Define the generic function -#' @export -cluster_metacell <- function(input_hpc, target_input = "preprocessed_attributes_list", target_output = "metacell_tbl", size_gamma_metacell, ...) { +cluster_metacell <- function(input_hpc, target_input = "data_object", target_output = "metacell_tbl", size_gamma_metacell, ...) { UseMethod("cluster_metacell") } #' @export -cluster_metacell.HPCell = function(input_hpc, target_input = "preprocessed_attributes_list", +cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", target_output = "metacell_tbl", size_gamma_metacell, ...) { input_hpc |> From 0d83ea27be3ba97847872c3e5b6c0973aba4480f Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 30 Jan 2025 09:34:32 +1100 Subject: [PATCH 108/145] fix --- R/functions.R | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/R/functions.R b/R/functions.R index e7bc4360..0c6be3c5 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1262,15 +1262,11 @@ preprocess_SCimplify <- function(input_read_RNA_assay, ... ) - list(sc.nw = sc.nw, - PCA.presampled = PCA.presampled, - normalized_rna.for.pca = normalized_rna.for.pca, - rest.cell.ids = rest.cell.ids, - genes.use = genes.use, - cell.ids = cell.ids, - do.approx = do.approx, - n.pc = n.pc, - k.knn = k.knn) + list(sc.nw = sc.nw, PCA.presampled = PCA.presampled, + normalized_rna.for.pca = normalized_rna.for.pca, + presampled.cell.ids = presampled.cell.ids, + rest.cell.ids = rest.cell.ids, genes.use = genes.use, cell.ids = cell.ids, + do.approx = do.approx, n.pc = n.pc, k.knn = k.knn) } From e50df9528c4a5fdcad07de7af9310be810b4634d Mon Sep 17 00:00:00 2001 From: myushen Date: Fri, 31 Jan 2025 16:58:08 +1100 Subject: [PATCH 109/145] pseudobulk and concensus module dependency --- R/cell_type_curated_constructor.R | 21 +++------------------ R/modules_grammar_hpc.R | 10 +++++++--- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/R/cell_type_curated_constructor.R b/R/cell_type_curated_constructor.R index 8c3c8f82..ab1edfcf 100644 --- a/R/cell_type_curated_constructor.R +++ b/R/cell_type_curated_constructor.R @@ -3,6 +3,7 @@ celltype_consensus_constructor <- function(input_hpc, target_input = "sce_transformed", target_output = "cell_type_concensus_tbl", + target_annotation = "annotation_tbl", celltype_unification_list = NULL, nonimmune_cellxgene = NULL, ...) { @@ -15,6 +16,7 @@ celltype_consensus_constructor <- function(input_hpc, celltype_consensus_constructor.HPCell <- function(input_hpc, target_input = "sce_transformed", target_output = "cell_type_concensus_tbl", + target_annotation = "annotation_tbl", ...) { input_hpc |> @@ -23,26 +25,9 @@ celltype_consensus_constructor.HPCell <- function(input_hpc, target_output = target_output, user_function = cell_type_ensembl_harmonised |> quote(), input_read_RNA_assay = target_input |> is_target(), - annotation_label_transfer_tbl = "annotation_tbl" |> is_target(), + annotation_label_transfer_tbl = target_annotation |> is_target(), ... ) - - # # aggregate each - # hpc_iterate( - # target_output = pseudobulk_sample, - # user_function = create_pseudobulk |> quote() , - # input_read_RNA_assay = target_input |> is_target(), - # sample_names_vec = "sample_names" |> is_target(), - # empty_droplets_tbl = "empty_tbl" |> is_target() , - # alive_identification_tbl = "alive_tbl" |> is_target(), - # cell_cycle_score_tbl = "cell_cycle_tbl" |> is_target(), - # annotation_label_transfer_tbl = "annotation_tbl" |> is_target(), - # doublet_identification_tbl = "doublet_tbl" |> is_target(), - # x = group_by, - # external_path = glue("{input_hpc$initialisation$store}/external"), - # container_type = data_container_type - # ) - # } #' Harmonize Cell Types Across Datasets diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 6e3cf9f5..4ee0ca5f 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -384,12 +384,16 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = # Define the generic function #' @export -calculate_pseudobulk <- function(input_hpc, group_by = NULL, target_input = "data_object", target_output = "pseudobulk_se") { +calculate_pseudobulk <- function(input_hpc, group_by = NULL, target_input = "data_object", + target_celltype_ensembl = "cell_type_concensus_tbl", + target_output = "pseudobulk_se") { UseMethod("calculate_pseudobulk") } #' @export -calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL, target_input = "data_object", target_output = "pseudobulk_se") { +calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL, target_input = "data_object", + target_celltype_ensembl = "cell_type_concensus_tbl", + target_output = "pseudobulk_se") { pseudobulk_sample = glue("{target_output}_iterated") |> @@ -409,7 +413,7 @@ calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL, target_input alive_identification_tbl = "alive_tbl" |> is_target(), cell_cycle_score_tbl = "cell_cycle_tbl" |> is_target(), annotation_label_transfer_tbl = "annotation_tbl" |> is_target(), - cell_type_ensembl_harmonised_tbl = "cell_type_concensus_tbl" |> is_target(), + cell_type_ensembl_harmonised_tbl = target_celltype_ensembl |> is_target(), doublet_identification_tbl = "doublet_tbl" |> is_target(), x = group_by, external_path = glue("{input_hpc$initialisation$store}/external") |> as.character(), From 550561e63190f5be4b4dea6a9ab10ea436766863 Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 6 Feb 2025 13:52:29 +1100 Subject: [PATCH 110/145] metacell functions and unit tests --- NAMESPACE | 6 +- R/functions.R | 205 ++++++------------ R/modules_grammar_hpc.R | 36 +-- ...ate_metacell_for_a_sample_per_cell_type.Rd | 24 ++ man/postprocess_SCimplify.Rd | 44 ++++ man/preprocess_SCimplify.Rd | 67 ++++++ ...cell_type_calculate_metacell_membership.Rd | 21 ++ tests/testthat/test_single_functions.R | 9 + 8 files changed, 248 insertions(+), 164 deletions(-) create mode 100644 man/calculate_metacell_for_a_sample_per_cell_type.Rd create mode 100644 man/postprocess_SCimplify.Rd create mode 100644 man/preprocess_SCimplify.Rd create mode 100644 man/split_sample_cell_type_calculate_metacell_membership.Rd diff --git a/NAMESPACE b/NAMESPACE index 758fdc8a..bed47f2a 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,7 +6,6 @@ S3method(cluster_metacell,HPCell) S3method(evaluate_hpc,HPCell) S3method(get_single_cell,HPCell) S3method(normalise_abundance_seurat_SCT,HPCell) -S3method(preprocess_metacell,HPCell) S3method(print,HPCell) S3method(remove_dead_scuttle,HPCell) S3method(remove_doublets_scDblFinder,HPCell) @@ -16,7 +15,6 @@ S3method(remove_empty_threshold,HPCell) S3method(remove_empty_threshold,Seurat) S3method(score_cell_cycle_seurat,HPCell) S3method(transform_assay,HPCell) -export(SCimplify) export(alive_identification) export(annotate_cell_type) export(annotation_label_transfer) @@ -57,8 +55,8 @@ export(map_split_se_by_number_of_genes) export(map_test_differential_abundance) export(non_batch_variation_removal) export(normalise_abundance_seurat_SCT) +export(postprocess_SCimplify) export(preprocess_SCimplify) -export(preprocess_metacell) export(preprocessing_output) export(pseudobulk_merge) export(read_data_container) @@ -73,6 +71,7 @@ export(run_targets_pipeline) export(save_experiment_data) export(score_cell_cycle_seurat) export(se_add_dispersion) +export(split_sample_cell_type_calculate_metacell_membership) export(split_summarized_experiment) export(target_append) export(test_differential_abundance_hpc) @@ -162,6 +161,7 @@ importFrom(dplyr,count) importFrom(dplyr,distinct) importFrom(dplyr,filter) importFrom(dplyr,group_by) +importFrom(dplyr,group_split) importFrom(dplyr,join_by) importFrom(dplyr,left_join) importFrom(dplyr,mutate) diff --git a/R/functions.R b/R/functions.R index 5f44bcd1..b2507be4 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1290,7 +1290,7 @@ preprocess_SCimplify <- function(input_read_RNA_assay, #' @importFrom Matrix t #' @importFrom proxy dist #' @export -SCimplify <- function(preprocessed, +postprocess_SCimplify <- function(preprocessed, cell.annotation = NULL, cell.split.condition = NULL, gamma, @@ -1482,142 +1482,79 @@ SCimplify <- function(preprocessed, metacell_classification } +#' Calculate Appropriate Gamma Values for Metacell Analysis +#' +#' This function determines viable gamma values to be used in metacell analysis. It calculates gamma values +#' by doubling gamma until the quotient of the total cell count and gamma is less than the specified minimum +#' number of cells per metacell. +#' +#' @param cell_count Integer, the total number of cells. +#' @param min_cells_per_metacell Integer, the minimum number of cells per metacell. Defaults to 30. +#' @return An Integer vector of viable gamma values. If no viable gamma values are found, returns 0. +calculate_gamma <- function(cell_count, min_cells_per_metacell = 30) { + gamma = 2 + gamma_values <- integer() + while (cell_count / gamma >= min_cells_per_metacell) { + gamma_values <- c(gamma_values, gamma) + gamma <- gamma * 2 + } + if (length(gamma_values) == 0) { + return(0) # Return 0 if no viable gamma values + } + return(gamma_values) +} - -#' #' Metacell Clustering -#' #' -#' #' @description -#' #' This function processes single-cell RNA sequencing data to cluster cells into metacells, -#' #' a higher resolution of clustering that groups cells sharing similar gene expression patterns. -#' #' -#' #' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing RNA assay data. -#' #' @param empty_droplets_tbl A tibble identifying empty droplets. -#' #' @param alive_identification_tbl A tibble from alive cell identification. -#' #' @param cell_cycle_score_tbl A tibble from cell cycle scoring. -#' #' @param assay assay used, default = "RNA" -#' #' -#' #' @return A tibble with column 'cell' and 'membership' indicating which metacell cluster each cell belongs to. -#' #' -#' #' @importFrom dplyr left_join filter -#' #' @importFrom Seurat NormalizeData FindVariableFeatures ScaleData RunPCA RunUMAP -#' #' @importFrom SummarizedExperiment assay assay<- -#' #' @importFrom magrittr extract2 -#' #' @export -#' cluster_metacell <- function(input_read_RNA_assay, -#' empty_droplets_tbl = NULL, -#' alive_identification_tbl = NULL, -#' cell_cycle_score_tbl = NULL, -#' assay = NULL){ -#' #Fix GChecks -#' empty_droplet = NULL -#' .cell <- NULL -#' -#' # Metacell config -#' gamma = 50 # the requested graining level. -#' k_knn = 30 # the number of neighbors considered to build the knn network. -#' nb_var_genes = 2000 # number of the top variable genes to use for dimensionality reduction -#' nb_pc = 50 # the number of principal components to use. -#' -#' # Your code for non_batch_variation_removal function here -#' class_input = input_read_RNA_assay |> class() -#' -#' # Get assay -#' if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) -#' -#' if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { -#' assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") -#' -#' input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, -#' counts = assay) -#' -#' # Rename assay -#' assay_name_old = DefaultAssay(input_read_RNA_assay) -#' input_read_RNA_assay_transform = input_read_RNA_assay |> -#' RenameAssays( -#' assay.name = assay_name_old, -#' new.assay.name = assay) -#' } -#' -#' # avoid small number of cells -#' if (!is.null(empty_droplets_tbl)) { -#' input_read_RNA_assay_transform <- input_read_RNA_assay_transform |> -#' left_join(empty_droplets_tbl, by = ".cell") |> -#' dplyr::filter(!empty_droplet) -#' } -#' -#' if (!is.null(alive_identification_tbl)) { -#' input_read_RNA_assay_transform = -#' input_read_RNA_assay_transform |> -#' left_join( -#' alive_identification_tbl , -#' by=".cell" -#' ) -#' } +#' Calculate Metacell Membership Scores Across Different Gamma Parameters +#' +#' This function processes single-cell data to identify metacell membership across various gamma settings. +#' It preprocesses the single-cell data, calculates gamma values based on the number of columns (typically genes), +#' and postprocesses each gamma setting to assign cells to metacells. It then aggregates these results and +#' handles missing values by taking the maximum value in each group, ignoring NAs. +#' +#' @param sample_sce a SingleCellExperiment object containing pre-loaded single-cell RNA-seq data. #' -#' if(!is.null(cell_cycle_score_tbl)) -#' input_read_RNA_assay_transform = input_read_RNA_assay_transform |> -#' -#' left_join( -#' cell_cycle_score_tbl , -#' by=".cell" -#' ) -#' -#' -#' # Normalise RNA -#' # (To Do: Let users decide the normalisation factors OR supercell factors by ellipsis) -#' normalized_rna <- -#' input_read_RNA_assay |> -#' NormalizeData(normalization.method = "LogNormalize") |> -#' FindVariableFeatures(nfeatures = 2000) |> -#' ScaleData() |> -#' RunPCA(npcs = 50, verbose = F) |> -#' RunUMAP(reduction = "pca", dims = c(1:30), n.neighbors = 30, verbose = F) -#' -#' -#' MC <- SuperCell::SCimplify(Seurat::GetAssayData(normalized_rna, slot = "data"), # single-cell log-normalized gene expression data -#' k.knn = k_knn, -#' gamma = gamma, -#' n.var.genes = nb_var_genes, -#' n.pc = nb_pc, -#' genes.use = Seurat::VariableFeatures(normalized_rna) -#' ) -#' -#' # MC.GE <- supercell_GE(Seurat::GetAssayData(normalized_rna, slot = "counts"), -#' # MC$membership, -#' # mode = "sum") -#' # -#' # # Construct the object using metacell -#' # colnames(MC.GE) <- as.character(1:ncol(MC.GE)) -#' # MC.seurat <- CreateSeuratObject(counts = MC.GE, -#' # meta.data = data.frame(size = as.vector(table(MC$membership))) -#' # ) -#' # MC.seurat[[annotation_label]] <- MC$annotation -#' # -#' # # save single-cell membership to metacells in the MC.seurat object -#' # MC.seurat@misc$cell_membership <- data.frame(row.names = names(MC$membership), membership = MC$membership) -#' # MC.seurat@misc$var_features <- MC$genes.use -#' # -#' # # Save the PCA components and genes used in SCimplify -#' # PCA.res <- irlba::irlba(scale(Matrix::t(se.data@assays$RNA@data[MC$genes.use, ])), nv = nb_pc) -#' # pca.x <- PCA.res$u %*% diag(PCA.res$d) -#' # rownames(pca.x) <- colnames(se.data@assays$RNA@data) -#' # MC.seurat@misc$sc.pca <- CreateDimReducObject( -#' # embeddings = pca.x, -#' # loadings = PCA.res$v, -#' # key = "PC_", -#' # assay = "RNA" -#' # ) -#' # -#' # MC.seurat[["RNA"]] <- as(object = MC.seurat[["RNA"]], Class = "Assay") -#' -#' # Return a tibble showing which cell belongs to which metacell cluster -#' metacell_classification <- tibble(cell = MC$membership |> names(), -#' membership = MC$membership) -#' -#' metacell_classification -#' -#' } +#' @return A tibble with metacells membership scores across computed gamma settings. +#' @importFrom purrr map +#' @importFrom dplyr rename group_by summarise group_split +#' @examples +#' # Assume 'sce' is a SingleCellExperiment object with a cell type +#' calculate_metacell(sce) +calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce) { + # Preprocess the single-cell data + preprocessed_sce = sample_sce |> preprocess_SCimplify() + + # Calculate the number of metacells can be produced + gammas <- calculate_gamma(sample_sce |> colnames() |> length()) + + # Postprocess data for each gamma, rename columns, and aggregate results + gammas |> map(~ postprocess_SCimplify(preprocessed_sce, gamma = .x) |> + dplyr::rename(!!paste0("gamma", .x) := membership)) |> + bind_rows() |> + + # Group by cell and summarise by taking the max value across all variables, removing NAs + group_by(cell) |> + summarise(across(everything(), max, na.rm = TRUE)) +} +#' Calculate Metacell Membership for Each Cell Type +#' +#' This function processes a SingleCellExperiment object by grouping cells according +#' to their type, calculates metacell membership for each group, and combines the +#' results into a single tibble. +#' +#' @param sample_sce A SingleCellExperiment object containing single-cell data. +#' @param cell_type The variable from the colData of `sample_sce` used to group cells by type. +#' +#' @return A tibble with metacell membership data for each cell type. +#' @export +split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, + cell_type) { + metacell_gamma_membership_tibble <- sample_sce |> dplyr::group_split(!!cell_type) |> + purrr::map(calculate_metacell_for_a_sample_per_cell_type) |> + bind_rows() + + metacell_gamma_membership_tibble +} #' Preprocessing Output #' diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 898cdee7..9faacb81 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -384,41 +384,23 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = # Define the generic function #' @export -preprocess_metacell <- function(input_hpc, target_input = "sce_transformed", target_output = "preprocessed_attributes_list", ...) { - UseMethod("preprocess_metacell") -} - -#' @export -preprocess_metacell.HPCell = function(input_hpc, target_input = "sce_transformed", target_output = "preprocessed_attributes_list", ...) { - - input_hpc |> - hpc_iterate( - target_output = target_output, - user_function = preprocess_SCimplify |> quote() , - input_read_RNA_assay = target_input |> is_target(), - empty_droplets_tbl = "empty_tbl" |> is_target() , - alive_identification_tbl = "alive_tbl" |> is_target(), - cell_cycle_score_tbl = "cell_cycle_tbl" |> is_target(), - ... - ) -} - -# Define the generic function -#' @export -cluster_metacell <- function(input_hpc, target_input = "preprocessed_attributes_list", target_output = "metacell_tbl", size_gamma_metacell, ...) { +cluster_metacell <- function(input_hpc, target_input = "data_object", + target_celltype_ensembl = "cell_type_concensus_tbl", + target_output = "metacell_tbl", ...) { UseMethod("cluster_metacell") } #' @export -cluster_metacell.HPCell = function(input_hpc, target_input = "preprocessed_attributes_list", - target_output = "metacell_tbl", size_gamma_metacell, ...) { +cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", + target_celltype_ensembl = "cell_type_concensus_tbl", + target_output = "metacell_tbl", ...) { input_hpc |> hpc_iterate( target_output = target_output, - user_function = SCimplify |> quote() , - preprocessed = target_input |> is_target(), - gamma = size_gamma_metacell, + user_function = split_sample_cell_type_calculate_metacell_membership |> quote() , + sample_sce = target_input |> is_target(), + cell_type = target_celltype_ensembl |> is_target(), ... ) } diff --git a/man/calculate_metacell_for_a_sample_per_cell_type.Rd b/man/calculate_metacell_for_a_sample_per_cell_type.Rd new file mode 100644 index 00000000..25c428dc --- /dev/null +++ b/man/calculate_metacell_for_a_sample_per_cell_type.Rd @@ -0,0 +1,24 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{calculate_metacell_for_a_sample_per_cell_type} +\alias{calculate_metacell_for_a_sample_per_cell_type} +\title{Calculate Metacell Membership Scores Across Different Gamma Parameters} +\usage{ +calculate_metacell_for_a_sample_per_cell_type(sample_sce) +} +\arguments{ +\item{sample_sce}{a SingleCellExperiment object containing pre-loaded single-cell RNA-seq data.} +} +\value{ +A tibble with metacells membership scores across computed gamma settings. +} +\description{ +This function processes single-cell data to identify metacell membership across various gamma settings. +It preprocesses the single-cell data, calculates gamma values based on the number of columns (typically genes), +and postprocesses each gamma setting to assign cells to metacells. It then aggregates these results and +handles missing values by taking the maximum value in each group, ignoring NAs. +} +\examples{ +# Assume 'sce' is a SingleCellExperiment object with a cell type +calculate_metacell(sce) +} diff --git a/man/postprocess_SCimplify.Rd b/man/postprocess_SCimplify.Rd new file mode 100644 index 00000000..5bff0286 --- /dev/null +++ b/man/postprocess_SCimplify.Rd @@ -0,0 +1,44 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{postprocess_SCimplify} +\alias{postprocess_SCimplify} +\title{Detection of metacells with the SuperCell approach} +\usage{ +postprocess_SCimplify( + preprocessed, + cell.annotation = NULL, + cell.split.condition = NULL, + gamma, + block.size = 10000, + igraph.clustering = c("walktrap", "louvain"), + return.singlecell.NW = TRUE, + return.hierarchical.structure = TRUE, + ... +) +} +\arguments{ +\item{preprocessed}{A list returned by \code{preprocess_SCimplify} containing preprocessed single-cell data, +PCA results, and kNN graph.} + +\item{cell.annotation}{a vector of cell type annotation, if provided, metacells that contain single cells of different cell type annotation will be split in multiple pure metacell (may result in slightly larger numbe of metacells than expected with a given gamma)} + +\item{cell.split.condition}{a vector of cell conditions that must not be mixed in one metacell. If provided, metacells will be split in condition-pure metacell (may result in significantly(!) larger number of metacells than expected)} + +\item{gamma}{graining level of data (proportion of number of single cells in the initial dataset to the number of metacells in the final dataset)} + +\item{block.size}{number of cells to map to the nearest metacell at the time (for approx coarse-graining)} + +\item{igraph.clustering}{clustering method to identify metacells (available methods "walktrap" (default) and "louvain" (not recommended, gamma is ignored)).} + +\item{return.singlecell.NW}{whether return single-cell network (which consists of approx.N if \code{"do.approx"} or all cells otherwise)} + +\item{return.hierarchical.structure}{whether return hierarchical structure of metacell} + +\item{...}{other parameters of \link{build_knn_graph} function} +} +\value{ +A tibble with column 'cell' and 'membership' indicating which metacell cluster each cell belongs to. +} +\description{ +This function detects metacells (former super-cells) from single-cell gene expression matrix +} diff --git a/man/preprocess_SCimplify.Rd b/man/preprocess_SCimplify.Rd new file mode 100644 index 00000000..946f9cac --- /dev/null +++ b/man/preprocess_SCimplify.Rd @@ -0,0 +1,67 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{preprocess_SCimplify} +\alias{preprocess_SCimplify} +\title{Preprocess metacells with the SuperCell approach} +\usage{ +preprocess_SCimplify( + input_read_RNA_assay, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + assay = NULL, + genes.use = NULL, + genes.exclude = NULL, + n.var.genes = min(1000, nrow(input_read_RNA_assay)), + k.knn = 5, + do.scale = TRUE, + n.pc = 10, + fast.pca = TRUE, + do.approx = FALSE, + approx.N = 5000, + seed = 12345, + ... +) +} +\arguments{ +\item{input_read_RNA_assay}{A \code{SingleCellExperiment} or \code{Seurat} object containing RNA assay data.} + +\item{empty_droplets_tbl}{A tibble identifying empty droplets.} + +\item{alive_identification_tbl}{A tibble from alive cell identification.} + +\item{cell_cycle_score_tbl}{A tibble from cell cycle scoring.} + +\item{assay}{assay used, default = "RNA"} + +\item{genes.use}{a vector of genes used to compute PCA} + +\item{genes.exclude}{a vector of genes to be excluded when computing PCA} + +\item{n.var.genes}{if \code{"genes.use"} is not provided, \code{"n.var.genes"} genes with the largest variation are used} + +\item{k.knn}{parameter to compute single-cell kNN network} + +\item{do.scale}{whether to scale gene expression matrix when computing PCA} + +\item{n.pc}{number of principal components to use for construction of single-cell kNN network} + +\item{fast.pca}{use \link[irlba]{irlba} as a faster version of prcomp (one used in Seurat package)} + +\item{do.approx}{compute approximate kNN in case of a large dataset (>50'000)} + +\item{approx.N}{number of cells to subsample for an approximate approach. By default, 5000 cells are used +for approximation to capture biological meaningful result.} + +\item{seed}{seed to use to subsample cells for an approximate approach} + +\item{...}{other parameters of \link{build_knn_graph} function} +} +\value{ +A list of variables to be passed to the \code{SuperCell::SCimplify} gamma involved function. +} +\description{ +This function preprocesses a single-cell gene expression matrix for downstream simplification using PCA +and k-nearest neighbor (kNN) graph construction. It includes options for scaling, feature selection, +approximate sampling, and PCA computation methods. +} diff --git a/man/split_sample_cell_type_calculate_metacell_membership.Rd b/man/split_sample_cell_type_calculate_metacell_membership.Rd new file mode 100644 index 00000000..ce032c47 --- /dev/null +++ b/man/split_sample_cell_type_calculate_metacell_membership.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{split_sample_cell_type_calculate_metacell_membership} +\alias{split_sample_cell_type_calculate_metacell_membership} +\title{Calculate Metacell Membership for Each Cell Type} +\usage{ +split_sample_cell_type_calculate_metacell_membership(sample_sce, cell_type) +} +\arguments{ +\item{sample_sce}{A SingleCellExperiment object containing single-cell data.} + +\item{cell_type}{The variable from the colData of \code{sample_sce} used to group cells by type.} +} +\value{ +A tibble with metacell membership data for each cell type. +} +\description{ +This function processes a SingleCellExperiment object by grouping cells according +to their type, calculates metacell membership for each group, and combines the +results into a single tibble. +} diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index d7933a3d..cf43a64c 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -12,6 +12,7 @@ input_seurat_abc = as.Seurat(data = NULL) |> subset(subset = Tissue %in% c("Blood")) +cell_type_column <- "Cell_type_in_each_tissue" # sample_column<- "Tissue" ## Defining functions # @@ -52,6 +53,14 @@ preprocessing_output_S = HPCell:::preprocessing_output(tissue, cell_cycle_score_tbl, annotation_label_transfer_tbl, doublet_identification_tbl) + +# Calculate metacell for a sample cell type +metacell_per_cell_type <- HPCell:::calculate_metacell_for_a_sample_per_cell_type(input_seurat_abc) + +# Calculate metacell membership +metacell_tbl <- split_sample_cell_type_calculate_metacell_membership(input_seurat_abc, + cell_type_column) + # empty_droplets_tbl = HPCell:::empty_droplet_id(input_seurat_list[[1]], filter_empty_droplets = TRUE) # # # Define output from annotation_label_transfer From 53eaa6b9741d7703427284ef60d702b2eeda4a1b Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 10 Feb 2025 14:39:28 +1100 Subject: [PATCH 111/145] replace NAs in annotations tibble to save anndata correctly --- R/cell_type_curated_constructor.R | 20 +++++++++++++---- R/functions.R | 36 +++++++++++++++++++++++++------ R/utilities.R | 13 +++++++++++ man/clean_sce_metadata.Rd | 19 ++++++++++++++++ 4 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 man/clean_sce_metadata.Rd diff --git a/R/cell_type_curated_constructor.R b/R/cell_type_curated_constructor.R index ab1edfcf..63a88df6 100644 --- a/R/cell_type_curated_constructor.R +++ b/R/cell_type_curated_constructor.R @@ -57,6 +57,13 @@ cell_type_ensembl_harmonised <- function(input_read_RNA_assay, annotation_label_transfer_tbl = NULL, celltype_unification_maps = NULL, nonimmune = NULL) { + + # Handle missing input + if (input_read_RNA_assay |> is.null()) return(NULL) + + # Handle empty annotation_tbl + if (nrow(annotation_label_transfer_tbl) == 0 ) return(NULL) + # Use pre-generated celltype_unification_maps (list) and # nonimmune_cellxgene (character vector) from Dharmesh if (is.null(celltype_unification_maps)) @@ -73,13 +80,18 @@ cell_type_ensembl_harmonised <- function(input_read_RNA_assay, }, silent = TRUE) # Rename and unnest annotation_tbl - input_read_RNA_assay <- input_read_RNA_assay |> colData() |> as.data.frame() |> + input_read_RNA_assay <- input_read_RNA_assay |> SummarizedExperiment::colData() |> as.data.frame() |> rownames_to_column(var = ".cell") |> dplyr::rename( blueprint_first_labels_fine = blueprint_first.labels.fine, - monaco_first_labels_fine = monaco_first.labels.fine, - azimuth_predicted_celltype_l2 = azimuth_predicted.celltype.l2 - ) |> + monaco_first_labels_fine = monaco_first.labels.fine + ) + + # Sometimes, sce does not have azimuth annotation + input_read_RNA_assay <- input_read_RNA_assay |> + mutate(azimuth_predicted_celltype_l2 = ifelse(!("azimuth_predicted.celltype.l2" %in% names(input_read_RNA_assay)), + NA, + azimuth_predicted.celltype.l2)) |> unnest(blueprint_scores_fine) |> select(.cell, observation_joinid, observation_originalid, diff --git a/R/functions.R b/R/functions.R index d5fe293f..2fb56663 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1155,10 +1155,27 @@ preprocessing_output <- function(input_read_RNA_assay, # Attach annotation try({ - if (inherits(annotation_label_transfer_tbl, "tbl_df")){ + if (inherits(annotation_label_transfer_tbl, "tbl_df") && nrow(annotation_label_transfer_tbl) > 0){ input_read_RNA_assay <- input_read_RNA_assay |> left_join(annotation_label_transfer_tbl, by = ".cell") |> left_join(cell_type_ensembl_harmonised_tbl) + + # Replace NA annotation column with "other", as annotations are single-cell level, not related to pseudobulk + annotation_columns <- c("blueprint_first.labels.fine", "blueprint_first.labels.coarse", + "monaco_first.labels.fine", "monaco_first.labels.coarse", + "blueprint_first_labels_fine", "monaco_first_labels_fine", + "azimuth_predicted_celltype_l2", "azimuth", "blueprint", "monaco") + + cell_type_concensus_columns <- c("cell_type_unified_ensemble", "data_driven_ensemble") + + input_read_RNA_assay <- input_read_RNA_assay |> mutate(across(all_of(annotation_columns), + ~tidyr::replace_na(., "Other"))) |> + + mutate(across(all_of(cell_type_concensus_columns), as.character)) |> + + # Replace NA with Unknown because non-immune cells are regarded as "Other" in cell_type_unified_ensemble + mutate(across(all_of(cell_type_concensus_columns), + ~tidyr::replace_na(., "Unknown"))) } }, silent = TRUE) @@ -1208,7 +1225,7 @@ preprocessing_output <- function(input_read_RNA_assay, #' @importFrom S4Vectors cbind #' @importFrom purrr map #' @importFrom scater isOutlier -#' @importFrom SummarizedExperiment rowData +#' @importFrom SummarizedExperiment rowData colData rowData<- colData<- #' @importFrom digest digest #' @importFrom HDF5Array saveHDF5SummarizedExperiment #' @importFrom SingleCellExperiment SingleCellExperiment @@ -1235,6 +1252,8 @@ create_pseudobulk <- function(input_read_RNA_assay, dir.create(external_path, showWarnings = FALSE, recursive = TRUE) + if (input_read_RNA_assay |> is.null()) return(NULL) + preprocessing_output_S = preprocessing_output( input_read_RNA_assay, @@ -1247,6 +1266,8 @@ create_pseudobulk <- function(input_read_RNA_assay, doublet_identification_tbl = NULL ) + # In rare cases, empty droplets observed across cells in a sample + if (ncol(preprocessing_output_S) == 0) return(NULL) if(assays |> is.null()){ if(preprocessing_output_S |> is("Seurat")) @@ -1270,7 +1291,7 @@ create_pseudobulk <- function(input_read_RNA_assay, # If I start from Seurat if(pseudobulk |> is("data.frame")) pseudobulk = pseudobulk |> - as_SummarizedExperiment(.sample, .feature, any_of(assays)) + tidybulk::as_SummarizedExperiment(.sample, .feature, any_of(assays)) rowData(pseudobulk)$feature_name = rownames(pseudobulk) colData(pseudobulk)$pseudobulk_sample = colnames(pseudobulk) @@ -1281,11 +1302,11 @@ create_pseudobulk <- function(input_read_RNA_assay, # Some manipulation to get unique feature because RNA and ADT # both can have same name genes - rename(symbol = .feature) |> + dplyr::rename(symbol = .feature) |> mutate(data_source = stringr::str_remove(data_source, "abundance_")) |> - unite(".feature", c(symbol, data_source), remove = FALSE) |> + tidyr::unite(".feature", c(symbol, data_source), remove = FALSE) |> - as_SummarizedExperiment( + tidybulk::as_SummarizedExperiment( .sample = .sample, .transcript = .feature, .abundance = count @@ -1301,8 +1322,9 @@ create_pseudobulk <- function(input_read_RNA_assay, ) } - file_name = glue("{external_path}/{digest(pseudobulk)}") + file_name = glue::glue("{external_path}/{digest(pseudobulk)}") + # Maybe do not need to save Anndata externally for cellNexus because pseudobulk can be read by tar_read_raw pseudobulk |> # Convert to Anndata diff --git a/R/utilities.R b/R/utilities.R index 57d75e8c..79a2b8f4 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -2951,3 +2951,16 @@ check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY <- function(input_rea # Return the modified object return(input_read_RNA_assay) } + +#' Clean Metadata in SingleCellExperiment Object +#' +#' This function takes a SingleCellExperiment (SCE) object and removes columns +#' that are completely filled with NA values. +#' The cleaned metadata is then returned as a dataframe. +#' +#' @param sce A SingleCellExperiment object containing metadata to be cleaned. +#' @return A SingleCellExperiment with all completely NA columns removed +clean_sce_metadata <- function(sce) { + sce <- sce |> select(where(~ any(!is.na(.)))) + sce +} diff --git a/man/clean_sce_metadata.Rd b/man/clean_sce_metadata.Rd new file mode 100644 index 00000000..5b61ec87 --- /dev/null +++ b/man/clean_sce_metadata.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{clean_sce_metadata} +\alias{clean_sce_metadata} +\title{Clean Metadata in SingleCellExperiment Object} +\usage{ +clean_sce_metadata(sce) +} +\arguments{ +\item{sce}{A SingleCellExperiment object containing metadata to be cleaned.} +} +\value{ +A SingleCellExperiment with all completely NA columns removed +} +\description{ +This function takes a SingleCellExperiment (SCE) object and removes columns +that are completely filled with NA values. +The cleaned metadata is then returned as a dataframe. +} From 2ef018e9754d0b16da6c80b0cce982c915b13180 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 10 Feb 2025 16:06:13 +1100 Subject: [PATCH 112/145] metacell module --- NAMESPACE | 4 +- R/functions.R | 203 ++++++------------ R/modules_grammar_hpc.R | 13 +- man/calculate_gamma.Rd | 21 ++ ...ate_metacell_for_a_sample_per_cell_type.Rd | 24 +++ man/cluster_metacell.Rd | 31 --- man/eliminate_random_effects.Rd | 21 -- man/postprocess_SCimplify.Rd | 44 ++++ man/preprocess_SCimplify.Rd | 67 ++++++ ...cell_type_calculate_metacell_membership.Rd | 21 ++ man/test_differential_abundance.Rd | 24 +-- tests/testthat/test_single_functions.R | 10 + 12 files changed, 270 insertions(+), 213 deletions(-) create mode 100644 man/calculate_gamma.Rd create mode 100644 man/calculate_metacell_for_a_sample_per_cell_type.Rd delete mode 100644 man/cluster_metacell.Rd delete mode 100644 man/eliminate_random_effects.Rd create mode 100644 man/postprocess_SCimplify.Rd create mode 100644 man/preprocess_SCimplify.Rd create mode 100644 man/split_sample_cell_type_calculate_metacell_membership.Rd diff --git a/NAMESPACE b/NAMESPACE index 6b54a4e2..bed47f2a 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -15,7 +15,6 @@ S3method(remove_empty_threshold,HPCell) S3method(remove_empty_threshold,Seurat) S3method(score_cell_cycle_seurat,HPCell) S3method(transform_assay,HPCell) -export(SCimplify) export(alive_identification) export(annotate_cell_type) export(annotation_label_transfer) @@ -56,6 +55,7 @@ export(map_split_se_by_number_of_genes) export(map_test_differential_abundance) export(non_batch_variation_removal) export(normalise_abundance_seurat_SCT) +export(postprocess_SCimplify) export(preprocess_SCimplify) export(preprocessing_output) export(pseudobulk_merge) @@ -71,6 +71,7 @@ export(run_targets_pipeline) export(save_experiment_data) export(score_cell_cycle_seurat) export(se_add_dispersion) +export(split_sample_cell_type_calculate_metacell_membership) export(split_summarized_experiment) export(target_append) export(test_differential_abundance_hpc) @@ -160,6 +161,7 @@ importFrom(dplyr,count) importFrom(dplyr,distinct) importFrom(dplyr,filter) importFrom(dplyr,group_by) +importFrom(dplyr,group_split) importFrom(dplyr,join_by) importFrom(dplyr,left_join) importFrom(dplyr,mutate) diff --git a/R/functions.R b/R/functions.R index 0c6be3c5..8f444aa7 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1483,142 +1483,79 @@ postprocess_SCimplify <- function(preprocessed, metacell_classification } +#' Calculate Appropriate Gamma Values for Metacell Analysis +#' +#' This function determines viable gamma values to be used in metacell analysis. It calculates gamma values +#' by doubling gamma until the quotient of the total cell count and gamma is less than the specified minimum +#' number of cells per metacell. +#' +#' @param cell_count Integer, the total number of cells. +#' @param min_cells_per_metacell Integer, the minimum number of cells per metacell. Defaults to 30. +#' @return An Integer vector of viable gamma values. If no viable gamma values are found, returns 0. +calculate_gamma <- function(cell_count, min_cells_per_metacell = 30) { + gamma = 2 + gamma_values <- integer() + while (cell_count / gamma >= min_cells_per_metacell) { + gamma_values <- c(gamma_values, gamma) + gamma <- gamma * 2 + } + if (length(gamma_values) == 0) { + return(0) # Return 0 if no viable gamma values + } + return(gamma_values) +} - -#' #' Metacell Clustering -#' #' -#' #' @description -#' #' This function processes single-cell RNA sequencing data to cluster cells into metacells, -#' #' a higher resolution of clustering that groups cells sharing similar gene expression patterns. -#' #' -#' #' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing RNA assay data. -#' #' @param empty_droplets_tbl A tibble identifying empty droplets. -#' #' @param alive_identification_tbl A tibble from alive cell identification. -#' #' @param cell_cycle_score_tbl A tibble from cell cycle scoring. -#' #' @param assay assay used, default = "RNA" -#' #' -#' #' @return A tibble with column 'cell' and 'membership' indicating which metacell cluster each cell belongs to. -#' #' -#' #' @importFrom dplyr left_join filter -#' #' @importFrom Seurat NormalizeData FindVariableFeatures ScaleData RunPCA RunUMAP -#' #' @importFrom SummarizedExperiment assay assay<- -#' #' @importFrom magrittr extract2 -#' #' @export -#' cluster_metacell <- function(input_read_RNA_assay, -#' empty_droplets_tbl = NULL, -#' alive_identification_tbl = NULL, -#' cell_cycle_score_tbl = NULL, -#' assay = NULL){ -#' #Fix GChecks -#' empty_droplet = NULL -#' .cell <- NULL -#' -#' # Metacell config -#' gamma = 50 # the requested graining level. -#' k_knn = 30 # the number of neighbors considered to build the knn network. -#' nb_var_genes = 2000 # number of the top variable genes to use for dimensionality reduction -#' nb_pc = 50 # the number of principal components to use. -#' -#' # Your code for non_batch_variation_removal function here -#' class_input = input_read_RNA_assay |> class() -#' -#' # Get assay -#' if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) -#' -#' if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { -#' assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") -#' -#' input_read_RNA_assay <- input_read_RNA_assay |> as.Seurat(data = NULL, -#' counts = assay) -#' -#' # Rename assay -#' assay_name_old = DefaultAssay(input_read_RNA_assay) -#' input_read_RNA_assay_transform = input_read_RNA_assay |> -#' RenameAssays( -#' assay.name = assay_name_old, -#' new.assay.name = assay) -#' } -#' -#' # avoid small number of cells -#' if (!is.null(empty_droplets_tbl)) { -#' input_read_RNA_assay_transform <- input_read_RNA_assay_transform |> -#' left_join(empty_droplets_tbl, by = ".cell") |> -#' dplyr::filter(!empty_droplet) -#' } -#' -#' if (!is.null(alive_identification_tbl)) { -#' input_read_RNA_assay_transform = -#' input_read_RNA_assay_transform |> -#' left_join( -#' alive_identification_tbl , -#' by=".cell" -#' ) -#' } +#' Calculate Metacell Membership Scores Across Different Gamma Parameters +#' +#' This function processes single-cell data to identify metacell membership across various gamma settings. +#' It preprocesses the single-cell data, calculates gamma values based on the number of columns (typically genes), +#' and postprocesses each gamma setting to assign cells to metacells. It then aggregates these results and +#' handles missing values by taking the maximum value in each group, ignoring NAs. +#' +#' @param sample_sce a SingleCellExperiment object containing pre-loaded single-cell RNA-seq data. #' -#' if(!is.null(cell_cycle_score_tbl)) -#' input_read_RNA_assay_transform = input_read_RNA_assay_transform |> -#' -#' left_join( -#' cell_cycle_score_tbl , -#' by=".cell" -#' ) -#' -#' -#' # Normalise RNA -#' # (To Do: Let users decide the normalisation factors OR supercell factors by ellipsis) -#' normalized_rna <- -#' input_read_RNA_assay |> -#' NormalizeData(normalization.method = "LogNormalize") |> -#' FindVariableFeatures(nfeatures = 2000) |> -#' ScaleData() |> -#' RunPCA(npcs = 50, verbose = F) |> -#' RunUMAP(reduction = "pca", dims = c(1:30), n.neighbors = 30, verbose = F) -#' -#' -#' MC <- SuperCell::SCimplify(Seurat::GetAssayData(normalized_rna, slot = "data"), # single-cell log-normalized gene expression data -#' k.knn = k_knn, -#' gamma = gamma, -#' n.var.genes = nb_var_genes, -#' n.pc = nb_pc, -#' genes.use = Seurat::VariableFeatures(normalized_rna) -#' ) -#' -#' # MC.GE <- supercell_GE(Seurat::GetAssayData(normalized_rna, slot = "counts"), -#' # MC$membership, -#' # mode = "sum") -#' # -#' # # Construct the object using metacell -#' # colnames(MC.GE) <- as.character(1:ncol(MC.GE)) -#' # MC.seurat <- CreateSeuratObject(counts = MC.GE, -#' # meta.data = data.frame(size = as.vector(table(MC$membership))) -#' # ) -#' # MC.seurat[[annotation_label]] <- MC$annotation -#' # -#' # # save single-cell membership to metacells in the MC.seurat object -#' # MC.seurat@misc$cell_membership <- data.frame(row.names = names(MC$membership), membership = MC$membership) -#' # MC.seurat@misc$var_features <- MC$genes.use -#' # -#' # # Save the PCA components and genes used in SCimplify -#' # PCA.res <- irlba::irlba(scale(Matrix::t(se.data@assays$RNA@data[MC$genes.use, ])), nv = nb_pc) -#' # pca.x <- PCA.res$u %*% diag(PCA.res$d) -#' # rownames(pca.x) <- colnames(se.data@assays$RNA@data) -#' # MC.seurat@misc$sc.pca <- CreateDimReducObject( -#' # embeddings = pca.x, -#' # loadings = PCA.res$v, -#' # key = "PC_", -#' # assay = "RNA" -#' # ) -#' # -#' # MC.seurat[["RNA"]] <- as(object = MC.seurat[["RNA"]], Class = "Assay") -#' -#' # Return a tibble showing which cell belongs to which metacell cluster -#' metacell_classification <- tibble(cell = MC$membership |> names(), -#' membership = MC$membership) -#' -#' metacell_classification -#' -#' } +#' @return A tibble with metacells membership scores across computed gamma settings. +#' @importFrom purrr map +#' @importFrom dplyr rename group_by summarise group_split +#' @examples +#' # Assume 'sce' is a SingleCellExperiment object with a cell type +#' calculate_metacell(sce) +calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce) { + # Preprocess the single-cell data + preprocessed_sce = sample_sce |> preprocess_SCimplify() + + # Calculate the number of metacells can be produced + gammas <- calculate_gamma(sample_sce |> colnames() |> length()) + + # Postprocess data for each gamma, rename columns, and aggregate results + gammas |> map(~ postprocess_SCimplify(preprocessed_sce, gamma = .x) |> + dplyr::rename(!!paste0("gamma", .x) := membership)) |> + bind_rows() |> + + # Group by cell and summarise by taking the max value across all variables, removing NAs + group_by(cell) |> + summarise(across(everything(), max, na.rm = TRUE)) +} +#' Calculate Metacell Membership for Each Cell Type +#' +#' This function processes a SingleCellExperiment object by grouping cells according +#' to their type, calculates metacell membership for each group, and combines the +#' results into a single tibble. +#' +#' @param sample_sce A SingleCellExperiment object containing single-cell data. +#' @param cell_type The variable from the colData of `sample_sce` used to group cells by type. +#' +#' @return A tibble with metacell membership data for each cell type. +#' @export +split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, + cell_type) { + metacell_gamma_membership_tibble <- sample_sce |> dplyr::group_split(!!cell_type) |> + purrr::map(calculate_metacell_for_a_sample_per_cell_type) |> + bind_rows() + + metacell_gamma_membership_tibble +} #' Preprocessing Output #' diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index d31ae239..9faacb81 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -384,20 +384,23 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = # Define the generic function #' @export -cluster_metacell <- function(input_hpc, target_input = "data_object", target_output = "metacell_tbl", size_gamma_metacell, ...) { +cluster_metacell <- function(input_hpc, target_input = "data_object", + target_celltype_ensembl = "cell_type_concensus_tbl", + target_output = "metacell_tbl", ...) { UseMethod("cluster_metacell") } #' @export cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", - target_output = "metacell_tbl", size_gamma_metacell, ...) { + target_celltype_ensembl = "cell_type_concensus_tbl", + target_output = "metacell_tbl", ...) { input_hpc |> hpc_iterate( target_output = target_output, - user_function = SCimplify |> quote() , - preprocessed = target_input |> is_target(), - gamma = size_gamma_metacell, + user_function = split_sample_cell_type_calculate_metacell_membership |> quote() , + sample_sce = target_input |> is_target(), + cell_type = target_celltype_ensembl |> is_target(), ... ) } diff --git a/man/calculate_gamma.Rd b/man/calculate_gamma.Rd new file mode 100644 index 00000000..3e495d13 --- /dev/null +++ b/man/calculate_gamma.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{calculate_gamma} +\alias{calculate_gamma} +\title{Calculate Appropriate Gamma Values for Metacell Analysis} +\usage{ +calculate_gamma(cell_count, min_cells_per_metacell = 30) +} +\arguments{ +\item{cell_count}{Integer, the total number of cells.} + +\item{min_cells_per_metacell}{Integer, the minimum number of cells per metacell. Defaults to 30.} +} +\value{ +An Integer vector of viable gamma values. If no viable gamma values are found, returns 0. +} +\description{ +This function determines viable gamma values to be used in metacell analysis. It calculates gamma values +by doubling gamma until the quotient of the total cell count and gamma is less than the specified minimum +number of cells per metacell. +} diff --git a/man/calculate_metacell_for_a_sample_per_cell_type.Rd b/man/calculate_metacell_for_a_sample_per_cell_type.Rd new file mode 100644 index 00000000..25c428dc --- /dev/null +++ b/man/calculate_metacell_for_a_sample_per_cell_type.Rd @@ -0,0 +1,24 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{calculate_metacell_for_a_sample_per_cell_type} +\alias{calculate_metacell_for_a_sample_per_cell_type} +\title{Calculate Metacell Membership Scores Across Different Gamma Parameters} +\usage{ +calculate_metacell_for_a_sample_per_cell_type(sample_sce) +} +\arguments{ +\item{sample_sce}{a SingleCellExperiment object containing pre-loaded single-cell RNA-seq data.} +} +\value{ +A tibble with metacells membership scores across computed gamma settings. +} +\description{ +This function processes single-cell data to identify metacell membership across various gamma settings. +It preprocesses the single-cell data, calculates gamma values based on the number of columns (typically genes), +and postprocesses each gamma setting to assign cells to metacells. It then aggregates these results and +handles missing values by taking the maximum value in each group, ignoring NAs. +} +\examples{ +# Assume 'sce' is a SingleCellExperiment object with a cell type +calculate_metacell(sce) +} diff --git a/man/cluster_metacell.Rd b/man/cluster_metacell.Rd deleted file mode 100644 index 6cc8e24b..00000000 --- a/man/cluster_metacell.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/functions.R -\name{cluster_metacell} -\alias{cluster_metacell} -\title{Metacell Clustering} -\usage{ -cluster_metacell( - input_hpc, - target_input = "data_object", - target_output = "metacell_classification_tbl", - ... -) -} -\arguments{ -\item{input_read_RNA_assay}{A \code{SingleCellExperiment} or \code{Seurat} object containing RNA assay data.} - -\item{empty_droplets_tbl}{A tibble identifying empty droplets.} - -\item{alive_identification_tbl}{A tibble from alive cell identification.} - -\item{cell_cycle_score_tbl}{A tibble from cell cycle scoring.} - -\item{assay}{assay used, default = "RNA"} -} -\value{ -A tibble with column 'cell' and 'membership' indicating which metacell cluster each cell belongs to. -} -\description{ -This function processes single-cell RNA sequencing data to cluster cells into metacells, -a higher resolution of clustering that groups cells sharing similar gene expression patterns. -} diff --git a/man/eliminate_random_effects.Rd b/man/eliminate_random_effects.Rd deleted file mode 100644 index a1bbf256..00000000 --- a/man/eliminate_random_effects.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/HPCell.R -\name{eliminate_random_effects} -\alias{eliminate_random_effects} -\title{HPCell Package Functions} -\usage{ -eliminate_random_effects(formula) -} -\arguments{ -\item{formula}{An object of class \code{formula}, representing a mixed-effects model formula.} -} -\value{ -A formula object with random effects parts removed. -} -\description{ -Functions for the HPCell package. -Eliminate Random Effects from a Formula -} -\examples{ -eliminate_random_effects(~ age_days * sex + (1 | file_id) + ethnicity_simplified + assay_simplified + .aggregated_cells + (1 + age_days * sex | tissue)) -} diff --git a/man/postprocess_SCimplify.Rd b/man/postprocess_SCimplify.Rd new file mode 100644 index 00000000..5bff0286 --- /dev/null +++ b/man/postprocess_SCimplify.Rd @@ -0,0 +1,44 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{postprocess_SCimplify} +\alias{postprocess_SCimplify} +\title{Detection of metacells with the SuperCell approach} +\usage{ +postprocess_SCimplify( + preprocessed, + cell.annotation = NULL, + cell.split.condition = NULL, + gamma, + block.size = 10000, + igraph.clustering = c("walktrap", "louvain"), + return.singlecell.NW = TRUE, + return.hierarchical.structure = TRUE, + ... +) +} +\arguments{ +\item{preprocessed}{A list returned by \code{preprocess_SCimplify} containing preprocessed single-cell data, +PCA results, and kNN graph.} + +\item{cell.annotation}{a vector of cell type annotation, if provided, metacells that contain single cells of different cell type annotation will be split in multiple pure metacell (may result in slightly larger numbe of metacells than expected with a given gamma)} + +\item{cell.split.condition}{a vector of cell conditions that must not be mixed in one metacell. If provided, metacells will be split in condition-pure metacell (may result in significantly(!) larger number of metacells than expected)} + +\item{gamma}{graining level of data (proportion of number of single cells in the initial dataset to the number of metacells in the final dataset)} + +\item{block.size}{number of cells to map to the nearest metacell at the time (for approx coarse-graining)} + +\item{igraph.clustering}{clustering method to identify metacells (available methods "walktrap" (default) and "louvain" (not recommended, gamma is ignored)).} + +\item{return.singlecell.NW}{whether return single-cell network (which consists of approx.N if \code{"do.approx"} or all cells otherwise)} + +\item{return.hierarchical.structure}{whether return hierarchical structure of metacell} + +\item{...}{other parameters of \link{build_knn_graph} function} +} +\value{ +A tibble with column 'cell' and 'membership' indicating which metacell cluster each cell belongs to. +} +\description{ +This function detects metacells (former super-cells) from single-cell gene expression matrix +} diff --git a/man/preprocess_SCimplify.Rd b/man/preprocess_SCimplify.Rd new file mode 100644 index 00000000..946f9cac --- /dev/null +++ b/man/preprocess_SCimplify.Rd @@ -0,0 +1,67 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{preprocess_SCimplify} +\alias{preprocess_SCimplify} +\title{Preprocess metacells with the SuperCell approach} +\usage{ +preprocess_SCimplify( + input_read_RNA_assay, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + cell_cycle_score_tbl = NULL, + assay = NULL, + genes.use = NULL, + genes.exclude = NULL, + n.var.genes = min(1000, nrow(input_read_RNA_assay)), + k.knn = 5, + do.scale = TRUE, + n.pc = 10, + fast.pca = TRUE, + do.approx = FALSE, + approx.N = 5000, + seed = 12345, + ... +) +} +\arguments{ +\item{input_read_RNA_assay}{A \code{SingleCellExperiment} or \code{Seurat} object containing RNA assay data.} + +\item{empty_droplets_tbl}{A tibble identifying empty droplets.} + +\item{alive_identification_tbl}{A tibble from alive cell identification.} + +\item{cell_cycle_score_tbl}{A tibble from cell cycle scoring.} + +\item{assay}{assay used, default = "RNA"} + +\item{genes.use}{a vector of genes used to compute PCA} + +\item{genes.exclude}{a vector of genes to be excluded when computing PCA} + +\item{n.var.genes}{if \code{"genes.use"} is not provided, \code{"n.var.genes"} genes with the largest variation are used} + +\item{k.knn}{parameter to compute single-cell kNN network} + +\item{do.scale}{whether to scale gene expression matrix when computing PCA} + +\item{n.pc}{number of principal components to use for construction of single-cell kNN network} + +\item{fast.pca}{use \link[irlba]{irlba} as a faster version of prcomp (one used in Seurat package)} + +\item{do.approx}{compute approximate kNN in case of a large dataset (>50'000)} + +\item{approx.N}{number of cells to subsample for an approximate approach. By default, 5000 cells are used +for approximation to capture biological meaningful result.} + +\item{seed}{seed to use to subsample cells for an approximate approach} + +\item{...}{other parameters of \link{build_knn_graph} function} +} +\value{ +A list of variables to be passed to the \code{SuperCell::SCimplify} gamma involved function. +} +\description{ +This function preprocesses a single-cell gene expression matrix for downstream simplification using PCA +and k-nearest neighbor (kNN) graph construction. It includes options for scaling, feature selection, +approximate sampling, and PCA computation methods. +} diff --git a/man/split_sample_cell_type_calculate_metacell_membership.Rd b/man/split_sample_cell_type_calculate_metacell_membership.Rd new file mode 100644 index 00000000..ce032c47 --- /dev/null +++ b/man/split_sample_cell_type_calculate_metacell_membership.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{split_sample_cell_type_calculate_metacell_membership} +\alias{split_sample_cell_type_calculate_metacell_membership} +\title{Calculate Metacell Membership for Each Cell Type} +\usage{ +split_sample_cell_type_calculate_metacell_membership(sample_sce, cell_type) +} +\arguments{ +\item{sample_sce}{A SingleCellExperiment object containing single-cell data.} + +\item{cell_type}{The variable from the colData of \code{sample_sce} used to group cells by type.} +} +\value{ +A tibble with metacell membership data for each cell type. +} +\description{ +This function processes a SingleCellExperiment object by grouping cells according +to their type, calculates metacell membership for each group, and combines the +results into a single tibble. +} diff --git a/man/test_differential_abundance.Rd b/man/test_differential_abundance.Rd index 7956a833..8c81d813 100644 --- a/man/test_differential_abundance.Rd +++ b/man/test_differential_abundance.Rd @@ -2,30 +2,10 @@ % Please edit documentation in R/modules_grammar_hpc.R \name{test_differential_abundance-HPCell-method} \alias{test_differential_abundance-HPCell-method} +\alias{evaluate_hpc} \title{Test Differential Abundance for HPCell} \usage{ -\S4method{test_differential_abundance}{HPCell}( - .data, - .formula, - .sample = NULL, - .transcript = NULL, - .abundance = NULL, - contrasts = NULL, - method = "edgeR_quasi_likelihood", - test_above_log2_fold_change = NULL, - scaling_method = "TMM", - omit_contrast_in_colnames = FALSE, - prefix = "", - action = "add", - factor_of_interest = NULL, - target_input = "pseudobulk_se", - target_output = "de", - group_by_column = NULL, - ..., - significance_threshold = NULL, - fill_missing_values = NULL, - .contrasts = NULL -) +evaluate_hpc(input_hpc) } \arguments{ \item{.data}{An HPCell object.} diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index d7933a3d..3f9f374a 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -12,6 +12,7 @@ input_seurat_abc = as.Seurat(data = NULL) |> subset(subset = Tissue %in% c("Blood")) +cell_type_column <- "Cell_type_in_each_tissue" # sample_column<- "Tissue" ## Defining functions # @@ -52,6 +53,15 @@ preprocessing_output_S = HPCell:::preprocessing_output(tissue, cell_cycle_score_tbl, annotation_label_transfer_tbl, doublet_identification_tbl) + +# Calculate metacell for a sample cell type +metacell_per_cell_type <- HPCell:::calculate_metacell_for_a_sample_per_cell_type(input_seurat_abc) + +# Calculate metacell membership +metacell_tbl <- split_sample_cell_type_calculate_metacell_membership(input_seurat_abc, + cell_type_column) + +# # empty_droplets_tbl = HPCell:::empty_droplet_id(input_seurat_list[[1]], filter_empty_droplets = TRUE) # # # Define output from annotation_label_transfer From 5d47cdb7130e44f8dddd97f869e169de654351be Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 12 Feb 2025 17:21:16 +1100 Subject: [PATCH 113/145] make metacell module work --- R/functions.R | 17 +++++++++++------ R/modules_grammar_hpc.R | 6 ++++-- ...e_cell_type_calculate_metacell_membership.Rd | 8 ++++++-- tests/testthat/test_single_functions.R | 3 +++ 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/R/functions.R b/R/functions.R index 235cc460..a373d542 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1157,8 +1157,9 @@ preprocess_SCimplify <- function(input_read_RNA_assay, NormalizeData(normalization.method = "LogNormalize") |> FindVariableFeatures(nfeatures = 2000) |> ScaleData() |> - RunPCA(npcs = 50, verbose = F) |> - RunUMAP(reduction = "pca", dims = c(1:30), n.neighbors = 30, verbose = F) |> + RunPCA(npcs = min(50, ncol(input_read_RNA_assay) - 1), verbose = F) |> + RunUMAP(reduction = "pca", dims = c(1:min(30, ncol(input_read_RNA_assay) - 1)), + n.neighbors = min(30, ncol(input_read_RNA_assay) - 1), verbose = F) |> Seurat::GetAssayData(slot = "data") N.c <- ncol(normalized_rna) @@ -1549,14 +1550,18 @@ calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce) { #' results into a single tibble. #' #' @param sample_sce A SingleCellExperiment object containing single-cell data. -#' @param cell_type The variable from the colData of `sample_sce` used to group cells by type. +#' @param cell_type_concensus_tbl A tibble of cell type. #' #' @return A tibble with metacell membership data for each cell type. #' @export split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, - cell_type) { - metacell_gamma_membership_tibble <- sample_sce |> dplyr::group_split(!!cell_type) |> - purrr::map(calculate_metacell_for_a_sample_per_cell_type) |> + cell_type_concensus_tbl, + x="cell_type") { + metacell_gamma_membership_tibble <- sample_sce |> left_join(cell_type_concensus_tbl) |> + dplyr::group_split(!!sym(x)) |> + # Calculate metacell only if sample cell_count >=60 as starting from gamma2. + # For sample cell_count less than 30 after splitting, it's not meaningful to construct metacell. + purrr::map( ~ if (ncol(.x) >= 60) {calculate_metacell_for_a_sample_per_cell_type(.x)} else return(NULL)) |> bind_rows() metacell_gamma_membership_tibble diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 0ccdb209..7df82198 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -386,14 +386,15 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = #' @export cluster_metacell <- function(input_hpc, target_input = "data_object", target_celltype_ensembl = "cell_type_concensus_tbl", - target_output = "metacell_tbl", ...) { + target_output = "metacell_tbl", group_by = NULL, ...) { UseMethod("cluster_metacell") } #' @export cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", target_celltype_ensembl = "cell_type_concensus_tbl", - target_output = "metacell_tbl", ...) { + target_output = "metacell_tbl", + group_by = NULL, ...) { input_hpc |> hpc_iterate( @@ -401,6 +402,7 @@ cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", user_function = split_sample_cell_type_calculate_metacell_membership |> quote() , sample_sce = target_input |> is_target(), cell_type = target_celltype_ensembl |> is_target(), + x = group_by, ... ) } diff --git a/man/split_sample_cell_type_calculate_metacell_membership.Rd b/man/split_sample_cell_type_calculate_metacell_membership.Rd index ce032c47..b582b57e 100644 --- a/man/split_sample_cell_type_calculate_metacell_membership.Rd +++ b/man/split_sample_cell_type_calculate_metacell_membership.Rd @@ -4,12 +4,16 @@ \alias{split_sample_cell_type_calculate_metacell_membership} \title{Calculate Metacell Membership for Each Cell Type} \usage{ -split_sample_cell_type_calculate_metacell_membership(sample_sce, cell_type) +split_sample_cell_type_calculate_metacell_membership( + sample_sce, + cell_type_concensus_tbl, + x = "cell_type" +) } \arguments{ \item{sample_sce}{A SingleCellExperiment object containing single-cell data.} -\item{cell_type}{The variable from the colData of \code{sample_sce} used to group cells by type.} +\item{cell_type_concensus_tbl}{A tibble of cell type.} } \value{ A tibble with metacell membership data for each cell type. diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 3f9f374a..712479e9 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -59,6 +59,9 @@ metacell_per_cell_type <- HPCell:::calculate_metacell_for_a_sample_per_cell_type # Calculate metacell membership metacell_tbl <- split_sample_cell_type_calculate_metacell_membership(input_seurat_abc, + input_seurat_abc[[]] |> + rownames_to_column(var = ".cell") |> + as_tibble(), cell_type_column) # From d85abbe96c1a2abd6be14d3faccb79aee8f06e02 Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 13 Feb 2025 17:19:52 +1100 Subject: [PATCH 114/145] fix metacell function error for large pipeline --- NAMESPACE | 2 +- R/functions.R | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 2cb020ea..a40a1253 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -164,8 +164,8 @@ importFrom(dplyr,count) importFrom(dplyr,distinct) importFrom(dplyr,filter) importFrom(dplyr,group_by) -importFrom(dplyr,if_else) importFrom(dplyr,group_split) +importFrom(dplyr,if_else) importFrom(dplyr,join_by) importFrom(dplyr,left_join) importFrom(dplyr,mutate) diff --git a/R/functions.R b/R/functions.R index a373d542..ed159d11 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1246,7 +1246,19 @@ preprocess_SCimplify <- function(input_read_RNA_assay, } if(!fast.pca){ - PCA.presampled <- stats::prcomp(normalized_rna.for.pca, rank. = max(n.pc), scale. = F, center = F) + PCA.presampled <- tryCatch({ + stats::prcomp(normalized_rna.for.pca, rank. = max(n.pc), scale. = FALSE, center = FALSE) + }, error = function(e) { + # Print error message + cat("Error in PCA computation: ", e$message, "\nUpdating data and retrying...\n") + + # Update normalized_rna.for.pca to exclude columns with zero variance + normalized_rna.for.pca <- normalized_rna.for.pca[, apply(normalized_rna.for.pca, 2, var) != 0] + + # Rerun PCA on the updated dataset + stats::prcomp(normalized_rna.for.pca, rank. = max(n.pc), scale. = FALSE, center = FALSE) + }) + } else { set.seed(seed) PCA.presampled <- irlba::irlba(normalized_rna.for.pca, nv = max(n.pc, 25)) @@ -1557,6 +1569,11 @@ calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce) { split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, cell_type_concensus_tbl, x="cell_type") { + + if (sample_sce |> is.null()) return(NULL) + + if (cell_type_concensus_tbl |> is.null()) return(NULL) + metacell_gamma_membership_tibble <- sample_sce |> left_join(cell_type_concensus_tbl) |> dplyr::group_split(!!sym(x)) |> # Calculate metacell only if sample cell_count >=60 as starting from gamma2. From 2f482ac700f0370d21a0511d0b562a97d9f404af Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 4 Mar 2025 16:25:48 +1100 Subject: [PATCH 115/145] argument for users to choose mininum cells in metacell --- R/functions.R | 21 ++++++++++++------- R/modules_grammar_hpc.R | 9 ++++++-- ...ate_metacell_for_a_sample_per_cell_type.Rd | 8 ++++++- ...cell_type_calculate_metacell_membership.Rd | 10 ++++++++- tests/testthat/test_single_functions.R | 6 ++++-- 5 files changed, 40 insertions(+), 14 deletions(-) diff --git a/R/functions.R b/R/functions.R index ed159d11..57c99213 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1531,19 +1531,21 @@ calculate_gamma <- function(cell_count, min_cells_per_metacell = 30) { #' handles missing values by taking the maximum value in each group, ignoring NAs. #' #' @param sample_sce a SingleCellExperiment object containing pre-loaded single-cell RNA-seq data. -#' +#' @inheritDotParams calculate_gamma min_cells_per_metacell #' @return A tibble with metacells membership scores across computed gamma settings. #' @importFrom purrr map #' @importFrom dplyr rename group_by summarise group_split #' @examples #' # Assume 'sce' is a SingleCellExperiment object with a cell type #' calculate_metacell(sce) -calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce) { +calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce, + ...) { # Preprocess the single-cell data preprocessed_sce = sample_sce |> preprocess_SCimplify() # Calculate the number of metacells can be produced - gammas <- calculate_gamma(sample_sce |> colnames() |> length()) + gammas <- calculate_gamma(sample_sce |> colnames() |> length(), + ...) # Postprocess data for each gamma, rename columns, and aggregate results gammas |> map(~ postprocess_SCimplify(preprocessed_sce, gamma = .x) |> @@ -1563,12 +1565,14 @@ calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce) { #' #' @param sample_sce A SingleCellExperiment object containing single-cell data. #' @param cell_type_concensus_tbl A tibble of cell type. -#' +#' @inheritDotParams calculate_gamma min_cells_per_metacell #' @return A tibble with metacell membership data for each cell type. #' @export split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, cell_type_concensus_tbl, - x="cell_type") { + x="cell_type", + min_cells_per_metacell = 30, + ...) { if (sample_sce |> is.null()) return(NULL) @@ -1576,9 +1580,10 @@ split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, metacell_gamma_membership_tibble <- sample_sce |> left_join(cell_type_concensus_tbl) |> dplyr::group_split(!!sym(x)) |> - # Calculate metacell only if sample cell_count >=60 as starting from gamma2. - # For sample cell_count less than 30 after splitting, it's not meaningful to construct metacell. - purrr::map( ~ if (ncol(.x) >= 60) {calculate_metacell_for_a_sample_per_cell_type(.x)} else return(NULL)) |> + # By deault, calculate metacell only if sample cell_count >=60 as starting from gamma2. In this case, + # for sample cell_count less than 30 after splitting, it's not meaningful to construct metacell. + purrr::map( ~ if (ncol(.x) >= min_cells_per_metacell*2) { + calculate_metacell_for_a_sample_per_cell_type(.x, min_cells_per_metacell)} else return(NULL)) |> bind_rows() metacell_gamma_membership_tibble diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 7df82198..a4104084 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -386,7 +386,9 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = #' @export cluster_metacell <- function(input_hpc, target_input = "data_object", target_celltype_ensembl = "cell_type_concensus_tbl", - target_output = "metacell_tbl", group_by = NULL, ...) { + target_output = "metacell_tbl", group_by = NULL, + cell_per_metacell = 30, + ...) { UseMethod("cluster_metacell") } @@ -394,7 +396,9 @@ cluster_metacell <- function(input_hpc, target_input = "data_object", cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", target_celltype_ensembl = "cell_type_concensus_tbl", target_output = "metacell_tbl", - group_by = NULL, ...) { + group_by = NULL, + cell_per_metacell = 30, + ...) { input_hpc |> hpc_iterate( @@ -403,6 +407,7 @@ cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", sample_sce = target_input |> is_target(), cell_type = target_celltype_ensembl |> is_target(), x = group_by, + cells = cell_per_metacell, ... ) } diff --git a/man/calculate_metacell_for_a_sample_per_cell_type.Rd b/man/calculate_metacell_for_a_sample_per_cell_type.Rd index 25c428dc..47291b26 100644 --- a/man/calculate_metacell_for_a_sample_per_cell_type.Rd +++ b/man/calculate_metacell_for_a_sample_per_cell_type.Rd @@ -4,10 +4,16 @@ \alias{calculate_metacell_for_a_sample_per_cell_type} \title{Calculate Metacell Membership Scores Across Different Gamma Parameters} \usage{ -calculate_metacell_for_a_sample_per_cell_type(sample_sce) +calculate_metacell_for_a_sample_per_cell_type(sample_sce, ...) } \arguments{ \item{sample_sce}{a SingleCellExperiment object containing pre-loaded single-cell RNA-seq data.} + +\item{...}{ + Arguments passed on to \code{\link[=calculate_gamma]{calculate_gamma}} + \describe{ + \item{\code{min_cells_per_metacell}}{Integer, the minimum number of cells per metacell. Defaults to 30.} + }} } \value{ A tibble with metacells membership scores across computed gamma settings. diff --git a/man/split_sample_cell_type_calculate_metacell_membership.Rd b/man/split_sample_cell_type_calculate_metacell_membership.Rd index b582b57e..b137a26d 100644 --- a/man/split_sample_cell_type_calculate_metacell_membership.Rd +++ b/man/split_sample_cell_type_calculate_metacell_membership.Rd @@ -7,13 +7,21 @@ split_sample_cell_type_calculate_metacell_membership( sample_sce, cell_type_concensus_tbl, - x = "cell_type" + x = "cell_type", + min_cells_per_metacell = 30, + ... ) } \arguments{ \item{sample_sce}{A SingleCellExperiment object containing single-cell data.} \item{cell_type_concensus_tbl}{A tibble of cell type.} + +\item{...}{ + Arguments passed on to \code{\link[=calculate_gamma]{calculate_gamma}} + \describe{ + \item{\code{min_cells_per_metacell}}{Integer, the minimum number of cells per metacell. Defaults to 30.} + }} } \value{ A tibble with metacell membership data for each cell type. diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 712479e9..dbbc9d75 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -55,14 +55,16 @@ preprocessing_output_S = HPCell:::preprocessing_output(tissue, doublet_identification_tbl) # Calculate metacell for a sample cell type -metacell_per_cell_type <- HPCell:::calculate_metacell_for_a_sample_per_cell_type(input_seurat_abc) +metacell_per_cell_type <- HPCell:::calculate_metacell_for_a_sample_per_cell_type(input_seurat_abc, + min_cells_per_metacell = 10) # Calculate metacell membership metacell_tbl <- split_sample_cell_type_calculate_metacell_membership(input_seurat_abc, input_seurat_abc[[]] |> rownames_to_column(var = ".cell") |> as_tibble(), - cell_type_column) + cell_type_column, + min_cells_per_metacell = 10) # # empty_droplets_tbl = HPCell:::empty_droplet_id(input_seurat_list[[1]], filter_empty_droplets = TRUE) From 42db5193e87d05a9e0a5d297fdba404fc76566b5 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 17 Mar 2025 16:48:58 +1100 Subject: [PATCH 116/145] fix metacell module --- R/functions.R | 20 +++++++++---------- R/modules_grammar_hpc.R | 4 ++-- inst/scripts/example_run.R | 11 ++++++++-- ...ate_metacell_for_a_sample_per_cell_type.Rd | 11 +++++----- ...cell_type_calculate_metacell_membership.Rd | 15 ++++++-------- tests/testthat/test_single_functions.R | 2 +- 6 files changed, 33 insertions(+), 30 deletions(-) diff --git a/R/functions.R b/R/functions.R index 57c99213..61aecef8 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1531,7 +1531,7 @@ calculate_gamma <- function(cell_count, min_cells_per_metacell = 30) { #' handles missing values by taking the maximum value in each group, ignoring NAs. #' #' @param sample_sce a SingleCellExperiment object containing pre-loaded single-cell RNA-seq data. -#' @inheritDotParams calculate_gamma min_cells_per_metacell +#' @param min_cells_per_metacell An integer of minimum cells in each metacell. #' @return A tibble with metacells membership scores across computed gamma settings. #' @importFrom purrr map #' @importFrom dplyr rename group_by summarise group_split @@ -1539,13 +1539,13 @@ calculate_gamma <- function(cell_count, min_cells_per_metacell = 30) { #' # Assume 'sce' is a SingleCellExperiment object with a cell type #' calculate_metacell(sce) calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce, - ...) { + min_cells_per_metacell) { # Preprocess the single-cell data preprocessed_sce = sample_sce |> preprocess_SCimplify() # Calculate the number of metacells can be produced gammas <- calculate_gamma(sample_sce |> colnames() |> length(), - ...) + min_cells_per_metacell) # Postprocess data for each gamma, rename columns, and aggregate results gammas |> map(~ postprocess_SCimplify(preprocessed_sce, gamma = .x) |> @@ -1564,21 +1564,21 @@ calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce, #' results into a single tibble. #' #' @param sample_sce A SingleCellExperiment object containing single-cell data. -#' @param cell_type_concensus_tbl A tibble of cell type. -#' @inheritDotParams calculate_gamma min_cells_per_metacell +#' @param cell_type_tbl A tibble of cell type. +#' @param x A character vector of cell type aggregation column. +#' @param min_cells_per_metacell An integer of minimum cells in each metacell. #' @return A tibble with metacell membership data for each cell type. #' @export split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, - cell_type_concensus_tbl, + cell_type_tbl, x="cell_type", - min_cells_per_metacell = 30, - ...) { + min_cells_per_metacell = 30) { if (sample_sce |> is.null()) return(NULL) - if (cell_type_concensus_tbl |> is.null()) return(NULL) + if (cell_type_tbl |> is.null()) return(NULL) - metacell_gamma_membership_tibble <- sample_sce |> left_join(cell_type_concensus_tbl) |> + metacell_gamma_membership_tibble <- sample_sce |> left_join(cell_type_tbl) |> dplyr::group_split(!!sym(x)) |> # By deault, calculate metacell only if sample cell_count >=60 as starting from gamma2. In this case, # for sample cell_count less than 30 after splitting, it's not meaningful to construct metacell. diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index a4104084..372f0ce8 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -405,9 +405,9 @@ cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", target_output = target_output, user_function = split_sample_cell_type_calculate_metacell_membership |> quote() , sample_sce = target_input |> is_target(), - cell_type = target_celltype_ensembl |> is_target(), + cell_type_tbl = target_celltype_ensembl |> is_target(), x = group_by, - cells = cell_per_metacell, + min_cells_per_metacell = cell_per_metacell, ... ) } diff --git a/inst/scripts/example_run.R b/inst/scripts/example_run.R index 500442cc..638cb982 100644 --- a/inst/scripts/example_run.R +++ b/inst/scripts/example_run.R @@ -1,6 +1,9 @@ data(celltype_unification_maps) data(nonimmune_cellxgene) - +cell_metadata = tbl( + dbConnect(duckdb::duckdb(), dbdir = ":memory:"), + sql("SELECT * FROM read_parquet('/vast/scratch/users/shen.m/Census_final_run/cell_annotation.parquet')") +) # unify cell types cell_metadata = cell_metadata |> left_join(celltype_unification_maps$azimuth, copy = TRUE) |> @@ -33,4 +36,8 @@ df_map = cell_metadata |> # use map to perform cell type ensemble cell_metadata = cell_metadata |> - left_join(df_map, by = join_by(ensemble_joinid), copy = TRUE) \ No newline at end of file + left_join(df_map, by = join_by(ensemble_joinid), copy = TRUE) |> + mutate(cell_type_unified_ensemble = ifelse(cell_type_unified_ensemble |> is.na(), "Unknown", cell_type_unified_ensemble)) + +cell_metadata |> write_parquet_to_parquet(path = "~/scratch/Census_final_run/cell_annotation_new_substitute_cell_type_na_to_unknown.parquet") + diff --git a/man/calculate_metacell_for_a_sample_per_cell_type.Rd b/man/calculate_metacell_for_a_sample_per_cell_type.Rd index 47291b26..4db494cb 100644 --- a/man/calculate_metacell_for_a_sample_per_cell_type.Rd +++ b/man/calculate_metacell_for_a_sample_per_cell_type.Rd @@ -4,16 +4,15 @@ \alias{calculate_metacell_for_a_sample_per_cell_type} \title{Calculate Metacell Membership Scores Across Different Gamma Parameters} \usage{ -calculate_metacell_for_a_sample_per_cell_type(sample_sce, ...) +calculate_metacell_for_a_sample_per_cell_type( + sample_sce, + min_cells_per_metacell +) } \arguments{ \item{sample_sce}{a SingleCellExperiment object containing pre-loaded single-cell RNA-seq data.} -\item{...}{ - Arguments passed on to \code{\link[=calculate_gamma]{calculate_gamma}} - \describe{ - \item{\code{min_cells_per_metacell}}{Integer, the minimum number of cells per metacell. Defaults to 30.} - }} +\item{min_cells_per_metacell}{An integer of minimum cells in each metacell.} } \value{ A tibble with metacells membership scores across computed gamma settings. diff --git a/man/split_sample_cell_type_calculate_metacell_membership.Rd b/man/split_sample_cell_type_calculate_metacell_membership.Rd index b137a26d..1685bc30 100644 --- a/man/split_sample_cell_type_calculate_metacell_membership.Rd +++ b/man/split_sample_cell_type_calculate_metacell_membership.Rd @@ -6,22 +6,19 @@ \usage{ split_sample_cell_type_calculate_metacell_membership( sample_sce, - cell_type_concensus_tbl, + cell_type_tbl, x = "cell_type", - min_cells_per_metacell = 30, - ... + min_cells_per_metacell = 30 ) } \arguments{ \item{sample_sce}{A SingleCellExperiment object containing single-cell data.} -\item{cell_type_concensus_tbl}{A tibble of cell type.} +\item{cell_type_tbl}{A tibble of cell type.} -\item{...}{ - Arguments passed on to \code{\link[=calculate_gamma]{calculate_gamma}} - \describe{ - \item{\code{min_cells_per_metacell}}{Integer, the minimum number of cells per metacell. Defaults to 30.} - }} +\item{x}{A character vector of cell type aggregation column.} + +\item{min_cells_per_metacell}{An integer of minimum cells in each metacell.} } \value{ A tibble with metacell membership data for each cell type. diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index dbbc9d75..71e5f99e 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -63,7 +63,7 @@ metacell_tbl <- split_sample_cell_type_calculate_metacell_membership(input_seura input_seurat_abc[[]] |> rownames_to_column(var = ".cell") |> as_tibble(), - cell_type_column, + x = cell_type_column, min_cells_per_metacell = 10) # From 420cbf1c63d9992e16776b86839bf6bfeeba17c7 Mon Sep 17 00:00:00 2001 From: Mengyuan Shen Date: Thu, 20 Mar 2025 14:32:05 +1100 Subject: [PATCH 117/145] gamma documentation --- R/functions.R | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/R/functions.R b/R/functions.R index 61aecef8..29f2d392 100644 --- a/R/functions.R +++ b/R/functions.R @@ -611,7 +611,7 @@ alive_identification <- function(input_read_RNA_assay, # Returns a named vector of IDs - # Matches the gene id’s row by row and inserts NA when it can’t find gene names + # Matches the gene id's row by row and inserts NA when it can't find gene names if (feature_nomenclature == "symbol") { location <- mapIds( EnsDb.Hsapiens.v86, @@ -1503,12 +1503,23 @@ postprocess_SCimplify <- function(preprocessed, #' Calculate Appropriate Gamma Values for Metacell Analysis #' -#' This function determines viable gamma values to be used in metacell analysis. It calculates gamma values -#' by doubling gamma until the quotient of the total cell count and gamma is less than the specified minimum -#' number of cells per metacell. +#' This function determines viable gamma (γ) values to be used in metacell analysis. Gamma is a graining level +#' parameter that controls the degree of cell aggregation when creating metacells. It represents the ratio +#' between the original number of cells and the desired number of metacells. +#' +#' For example: +#' - γ = 2: combines cells to create metacells, aiming for half as many metacells as original cells +#' - γ = 4: aims for one-fourth as many metacells +#' - γ = 8: aims for one-eighth as many metacells +#' And so on, using powers of 2. +#' +#' The function starts with γ = 2 and doubles it repeatedly (2, 4, 8, 16...) until the ratio of +#' cells/gamma would result in metacells that are smaller than the minimum allowed size. Higher gamma +#' values mean more aggressive aggregation (fewer, larger metacells), while lower gamma values preserve +#' more granularity (more, smaller metacells). #' #' @param cell_count Integer, the total number of cells. -#' @param min_cells_per_metacell Integer, the minimum number of cells per metacell. Defaults to 30. +#' @param min_cells_per_metacell Integer, the minimum number of cells allowed per metacell. Defaults to 30. #' @return An Integer vector of viable gamma values. If no viable gamma values are found, returns 0. calculate_gamma <- function(cell_count, min_cells_per_metacell = 30) { gamma = 2 From d6249b7310bfeddc780c69f19158b5f77e760a9d Mon Sep 17 00:00:00 2001 From: myushen Date: Fri, 28 Mar 2025 15:54:22 +1100 Subject: [PATCH 118/145] fix alive identification module --- R/functions.R | 59 +++++++++++++++++----------- R/modules_grammar_hpc.R | 4 +- R/utilities.R | 42 +++++++++++++------- man/alive_identification.Rd | 8 ++-- man/calculate_gamma.Rd | 22 +++++++++-- man/duplicate_single_column_assay.Rd | 13 +++--- 6 files changed, 96 insertions(+), 52 deletions(-) diff --git a/R/functions.R b/R/functions.R index 29f2d392..827bb981 100644 --- a/R/functions.R +++ b/R/functions.R @@ -529,7 +529,8 @@ annotation_label_transfer <- function(input_read_RNA_assay, #' @param assay The assay to be used for analysis, specified as a character string. #' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing RNA assay data. #' @param empty_droplets_tbl A tibble identifying empty droplets. -#' @param annotation_label_transfer_tbl A tibble with annotation label transfer data. +#' @param cell_type_ensembl_harmonised_tbl A tibble with annotated cell type label data. +#' @param cell_type_column A character vector indicating the cell type column used for grouping during quality control and dead cell removal. #' @param assay assay used, default = "RNA" #' #' @return A tibble identifying alive cells. @@ -556,8 +557,8 @@ annotation_label_transfer <- function(input_read_RNA_assay, #' @export alive_identification <- function(input_read_RNA_assay, empty_droplets_tbl = NULL, - annotation_label_transfer_tbl = NULL, - annotation_column = NULL, + cell_type_ensembl_harmonised_tbl = NULL, + cell_type_column = NULL, assay = NULL, feature_nomenclature) { @@ -567,9 +568,11 @@ alive_identification <- function(input_read_RNA_assay, .cell = NULL high_mitochondrion = NULL + if (input_read_RNA_assay |> is.null()) return(NULL) + if( - !is.null(annotation_column) && - !annotation_column %in% colnames(as_tibble(input_read_RNA_assay[1,1])) + is.null(cell_type_column) && + !cell_type_column %in% colnames(as_tibble(input_read_RNA_assay[1,1])) ) stop("HPCell says: Your `group_by` columns are not present in your data. Please run annotate_cell_type_hpc() to get the cell type annotation that you can use as grouping for the cell-type-specific quality control and removal of dead cells.") @@ -583,6 +586,12 @@ alive_identification <- function(input_read_RNA_assay, dplyr::filter(!empty_droplet) } + # In rare cases, all cells in a sample are empty droplets + if (ncol(input_read_RNA_assay) == 0) return(NULL) + + # In rare cases, a cell in a sample is non empty droplet + if (ncol(input_read_RNA_assay) == 1) input_read_RNA_assay = input_read_RNA_assay |> duplicate_single_column_assay() + # Calculate nFeature_RNA and nCount_RNA if not exist in the data nFeature_name <- paste0("nFeature_", assay) nCount_name <- paste0("nCount_", assay) @@ -634,13 +643,13 @@ alive_identification <- function(input_read_RNA_assay, # as_tibble(rownames = ".cell") |> # select(-sum, -detected) |> # - # # Join cell types if annotation_label_transfer_tbl provided + # # Join cell types if cell_type_ensembl_harmonised_tbl provided # {\(x) - # if (inherits(annotation_label_transfer_tbl, "tbl_df")) { - # left_join(x, annotation_label_transfer_tbl, by = ".cell") |> + # if (inherits(cell_type_ensembl_harmonised_tbl, "tbl_df")) { + # left_join(x, cell_type_ensembl_harmonised_tbl, by = ".cell") |> # # # Label cells - # nest(data = -all_of(annotation_column)) |> + # nest(data = -all_of(cell_type_column)) |> # mutate(data = map( # data, # ~ .x |> @@ -689,43 +698,46 @@ alive_identification <- function(input_read_RNA_assay, #mutate(subsets_Ribo_percent = PercentageFeatureSet(input_read_RNA_assay, pattern = "^RPS|^RPL", assay = assay)[,1]) |> mutate(subsets_Ribo_percent = percentage_output) - # Add cell type labels and determine high mitochondrion content, if annotation_label_transfer_tbl is provided - if(annotation_column |> is.null() |> not()) { + # Add cell type labels and determine high mitochondrion content, if cell_type_ensembl_harmonised_tbl is provided + if(cell_type_column |> is.null() |> not()) { if ( - inherits(annotation_label_transfer_tbl, "tbl_df") && - annotation_column %in% colnames(annotation_label_transfer_tbl) + inherits(cell_type_ensembl_harmonised_tbl, "tbl_df") && + cell_type_column %in% colnames(cell_type_ensembl_harmonised_tbl) ) { mitochondrion <- qc_metrics %>% - left_join(annotation_label_transfer_tbl, by = ".cell") + left_join(cell_type_ensembl_harmonised_tbl, by = ".cell") ribosome = ribosome |> - left_join(annotation_label_transfer_tbl, by = ".cell") + # Only retrieve metadata so nesting in the next step won't break + left_join(cell_type_ensembl_harmonised_tbl, by = ".cell") |> as_tibble() } - else if (annotation_column %in% colnames(as_tibble(input_read_RNA_assay[1,1]))) { + else if (cell_type_column %in% colnames(as_tibble(input_read_RNA_assay[1,1]))) { mitochondrion <- qc_metrics %>% - left_join(input_read_RNA_assay |> select(.cell, all_of(annotation_column)), by = ".cell") + left_join(input_read_RNA_assay |> select(.cell, all_of(cell_type_column)), by = ".cell") ribosome = ribosome |> - left_join(input_read_RNA_assay |> select(.cell, all_of(annotation_column)), by = ".cell") + # Only retrieve metadata so nesting in the next step won't break + left_join(input_read_RNA_assay |> select(.cell, all_of(cell_type_column)), by = ".cell") |> as_tibble() + } mitochondrion = mitochondrion %>% - nest(data = -all_of(annotation_column)) + nest(data = -all_of(cell_type_column)) ribosome = ribosome |> - nest(data = -all_of(annotation_column)) + nest(data = -all_of(cell_type_column)) } else { # Determing high mitochondrion content @@ -757,8 +769,11 @@ alive_identification <- function(input_read_RNA_assay, # Merge mitochondrion |> left_join(ribosome, by=".cell") |> - mutate(alive = !high_mitochondrion) # & !high_ribosome ) |> - + mutate(alive = !high_mitochondrion) |> # & !high_ribosome ) |> + # Select informative columns + select(cell_type_unified_ensemble = cell_type_unified_ensemble.x, + .cell, contains("subsets"), contains("observation"), + donor_id, dataset_id, sample_id, contains("high"), alive) } diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 372f0ce8..61b94286 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -280,8 +280,8 @@ remove_dead_scuttle.HPCell = function( user_function = alive_identification |> quote() , input_read_RNA_assay = target_input |> safe_as_name(), empty_droplets_tbl = target_empty_droplets |> safe_as_name() , - annotation_label_transfer_tbl = target_annotation |> safe_as_name() , - annotation_column = group_by, + cell_type_ensembl_harmonised_tbl = target_annotation |> safe_as_name() , + cell_type_column = group_by, feature_nomenclature = "gene_nomenclature" |> is_target() ) diff --git a/R/utilities.R b/R/utilities.R index 94eb925d..680e2753 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -95,40 +95,54 @@ save_experiment_data <- function(data, ) } -#' Duplicate Single-Column Assay in SingleCellExperiment Object +#' Duplicate Single-Column Assay in a SingleCellExperiment or Seurat Object #' -#' This function handles SingleCellExperiment (SCE) objects where a specified assay +#' This function handles a `SingleCellExperiment` or `Seurat` object where a specified assay #' contains only one column. It duplicates the single-column assay to avoid potential #' errors during saving or downstream analysis that require at least two columns. #' The duplicated column is marked with a prefix `DUMMY___` to distinguish it. #' Corresponding entries in the column metadata (`colData`) are also duplicated. #' -#' @param sce A `SingleCellExperiment` object. +#' @param data A `SingleCellExperiment` or `Seurat` object. #' @importFrom SummarizedExperiment assay assays colData #' @importFrom SingleCellExperiment SingleCellExperiment +#' @importFrom Seurat GetAssayData CreateSeuratObject #' @importFrom rlang set_names -#' @return A modified `SingleCellExperiment` object with the single-column assay -#' duplicated if applicable. If the assay already has more than one column, the -#' function returns the original object unchanged. -duplicate_single_column_assay <- function(sce) { +#' @return A modified `SingleCellExperiment` or `Seurat` object with the single-column assay +#' duplicated if applicable. +duplicate_single_column_assay <- function(data) { - assay_name = sce |> assays() |> names() |> magrittr::extract2(1) + assay_name = data@assays|> names() |> magrittr::extract2(1) - if(ncol(assay(sce)) == 1) { + if (inherits(data, "SingleCellExperiment") && ncol(data) == 1){ # Duplicate the assay to prevent saving errors due to single-column matrices - my_assay = cbind(assay(sce), assay(sce)) + my_assay = cbind(assay(data), assay(data)) # Rename the second column to distinguish it colnames(my_assay)[2] = paste0("DUMMY", "___", colnames(my_assay)[2]) - cd = colData(sce) + cd = colData(data) cd = cd |> rbind(cd) rownames(cd)[2] = paste0("DUMMY", "___", rownames(cd)[2]) - sce = SingleCellExperiment(assay = list(my_assay) |> set_names(assay_name), colData = cd) - sce + data = SingleCellExperiment(assay = list(my_assay) |> set_names(assay_name), colData = cd) + data } - sce + + if (inherits(data, "Seurat") && ncol(data) == 1) { + + my_assay <- GetAssayData(data, layer = "counts", assay = assay_name) + my_assay <- cbind(my_assay, my_assay) + colnames(my_assay)[2] <- paste0("DUMMY___", colnames(my_assay)[2]) + + cd <- data[[]] + cd <- rbind(cd, cd) + rownames(cd)[2] <- paste0("DUMMY___", rownames(cd)[2]) + + data <- CreateSeuratObject(counts = my_assay, meta.data = cd, assay = assay_name) + data + } + data } #' Gene name conversion using ensembl database diff --git a/man/alive_identification.Rd b/man/alive_identification.Rd index 51d67206..0f64f37e 100644 --- a/man/alive_identification.Rd +++ b/man/alive_identification.Rd @@ -7,8 +7,8 @@ alive_identification( input_read_RNA_assay, empty_droplets_tbl = NULL, - annotation_label_transfer_tbl = NULL, - annotation_column = NULL, + cell_type_ensembl_harmonised_tbl = NULL, + cell_type_column = NULL, assay = NULL, feature_nomenclature ) @@ -18,7 +18,9 @@ alive_identification( \item{empty_droplets_tbl}{A tibble identifying empty droplets.} -\item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} +\item{cell_type_ensembl_harmonised_tbl}{A tibble with annotated cell type label data.} + +\item{cell_type_column}{A character vector indicating the cell type column used for grouping during quality control and dead cell removal.} \item{assay}{assay used, default = "RNA"} } diff --git a/man/calculate_gamma.Rd b/man/calculate_gamma.Rd index 3e495d13..51ccc54c 100644 --- a/man/calculate_gamma.Rd +++ b/man/calculate_gamma.Rd @@ -9,13 +9,27 @@ calculate_gamma(cell_count, min_cells_per_metacell = 30) \arguments{ \item{cell_count}{Integer, the total number of cells.} -\item{min_cells_per_metacell}{Integer, the minimum number of cells per metacell. Defaults to 30.} +\item{min_cells_per_metacell}{Integer, the minimum number of cells allowed per metacell. Defaults to 30.} } \value{ An Integer vector of viable gamma values. If no viable gamma values are found, returns 0. } \description{ -This function determines viable gamma values to be used in metacell analysis. It calculates gamma values -by doubling gamma until the quotient of the total cell count and gamma is less than the specified minimum -number of cells per metacell. +This function determines viable gamma (γ) values to be used in metacell analysis. Gamma is a graining level +parameter that controls the degree of cell aggregation when creating metacells. It represents the ratio +between the original number of cells and the desired number of metacells. +} +\details{ +For example: +\itemize{ +\item γ = 2: combines cells to create metacells, aiming for half as many metacells as original cells +\item γ = 4: aims for one-fourth as many metacells +\item γ = 8: aims for one-eighth as many metacells +And so on, using powers of 2. +} + +The function starts with γ = 2 and doubles it repeatedly (2, 4, 8, 16...) until the ratio of +cells/gamma would result in metacells that are smaller than the minimum allowed size. Higher gamma +values mean more aggressive aggregation (fewer, larger metacells), while lower gamma values preserve +more granularity (more, smaller metacells). } diff --git a/man/duplicate_single_column_assay.Rd b/man/duplicate_single_column_assay.Rd index ace1953a..c656de48 100644 --- a/man/duplicate_single_column_assay.Rd +++ b/man/duplicate_single_column_assay.Rd @@ -2,20 +2,19 @@ % Please edit documentation in R/utilities.R \name{duplicate_single_column_assay} \alias{duplicate_single_column_assay} -\title{Duplicate Single-Column Assay in SingleCellExperiment Object} +\title{Duplicate Single-Column Assay in a SingleCellExperiment or Seurat Object} \usage{ -duplicate_single_column_assay(sce) +duplicate_single_column_assay(data) } \arguments{ -\item{sce}{A \code{SingleCellExperiment} object.} +\item{data}{A \code{SingleCellExperiment} or \code{Seurat} object.} } \value{ -A modified \code{SingleCellExperiment} object with the single-column assay -duplicated if applicable. If the assay already has more than one column, the -function returns the original object unchanged. +A modified \code{SingleCellExperiment} or \code{Seurat} object with the single-column assay +duplicated if applicable. } \description{ -This function handles SingleCellExperiment (SCE) objects where a specified assay +This function handles a \code{SingleCellExperiment} or \code{Seurat} object where a specified assay contains only one column. It duplicates the single-column assay to avoid potential errors during saving or downstream analysis that require at least two columns. The duplicated column is marked with a prefix \code{DUMMY___} to distinguish it. From 005efc4738d022a0fa7b379c98c5832e335a1471 Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 1 Apr 2025 17:42:02 +1100 Subject: [PATCH 119/145] cell chat module --- NAMESPACE | 11 +++ R/data.R | 19 ++++- R/functions.R | 113 +++++++++++++++++++++++++ R/modules_grammar_hpc.R | 31 +++++++ data/CellChatDB.human.rda | Bin 0 -> 1393904 bytes man/calculate_gamma.Rd | 22 ++++- man/cell_communication.Rd | 38 +++++++++ tests/testthat/test_single_functions.R | 8 +- 8 files changed, 236 insertions(+), 6 deletions(-) create mode 100644 data/CellChatDB.human.rda create mode 100644 man/cell_communication.Rd diff --git a/NAMESPACE b/NAMESPACE index a40a1253..4e98063f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,6 +6,7 @@ S3method(celltype_consensus_constructor,HPCell) S3method(cluster_metacell,HPCell) S3method(evaluate_hpc,HPCell) S3method(get_single_cell,HPCell) +S3method(ligand_receptor_cellchat,HPCell) S3method(normalise_abundance_seurat_SCT,HPCell) S3method(print,HPCell) S3method(remove_dead_scuttle,HPCell) @@ -20,6 +21,7 @@ export(alive_identification) export(annotate_cell_type) export(annotation_label_transfer) export(calculate_pseudobulk) +export(cell_communication) export(cell_cycle_scoring) export(cell_type_ensembl_harmonised) export(celltype_consensus_constructor) @@ -50,6 +52,7 @@ export(hpc_single) export(initialise_hpc) export(internal_de_function) export(is_target) +export(ligand_receptor_cellchat) export(map2_test_differential_abundance_hpc) export(map_add_dispersion_to_se) export(map_de) @@ -102,6 +105,14 @@ import(tidySummarizedExperiment) import(tidyseurat) importFrom(AnnotationDbi,mapIds) importFrom(Azimuth,RunAzimuth) +importFrom(CellChat,computeCommunProb) +importFrom(CellChat,createCellChat) +importFrom(CellChat,filterCommunication) +importFrom(CellChat,identifyOverExpressedGenes) +importFrom(CellChat,identifyOverExpressedInteractions) +importFrom(CellChat,subsetCommunication) +importFrom(CellChat,subsetDB) +importFrom(CellChat,subsetData) importFrom(DelayedArray,blockApply) importFrom(DropletUtils,barcodeRanks) importFrom(DropletUtils,emptyDrops) diff --git a/R/data.R b/R/data.R index a4f56b72..7abd600e 100644 --- a/R/data.R +++ b/R/data.R @@ -44,4 +44,21 @@ #' #' @keywords datasets #' @docType data -"ensembl_genes_biomart" \ No newline at end of file +"ensembl_genes_biomart" + +#' CellChatDB.human database +#' +#' A curated human ligand–receptor interaction database provided by the CellChat package. +#' +#' This object is typically used as input to the CellChat pipeline. It contains signaling pathway data +#' for cell-cell communication analysis. +#' +#' @format A list with multiple elements, each representing different parts of the signaling network. + +#' @usage +#' data(CellChatDB.human) +#' +#' @source CellChat::CellChatDB.human +#' @noRd +#' +"CellChatDB.human" \ No newline at end of file diff --git a/R/functions.R b/R/functions.R index 29f2d392..fd45fc2e 100644 --- a/R/functions.R +++ b/R/functions.R @@ -2022,6 +2022,119 @@ map_add_dispersion_to_se = function(se_df, .col, abundance = NULL){ } +#' Perform Human Cell-Cell Communication Analysis +#' @description This function performs ligand-receptor cells communication analysis. +#' It processes single-cell RNA sequencing data to identify and analyze intercellular communication networks. +#' @param input_read_RNA_assay A SingleCellExperiment or Seurat object containing gene expression data +#' @param empty_droplets_tbl Optional tibble identifying empty droplets to be filtered out +#' @param cell_type_tbl Optional tibble containing cell type information +#' @param assay Character string specifying which assay to use +#' @param cell_type_column Character string specifying the column name containing cell type annotations +#' @param feature_nomenclature Character vector specifying gene in Symbol or Ensemble format +#' @param ... Additional arguments passed to \code{CellChat::subsetDB} +#' @return A CellChat tibble containing cells communication result. +#' @importFrom CellChat createCellChat subsetDB subsetData identifyOverExpressedGenes +#' identifyOverExpressedInteractions computeCommunProb filterCommunication subsetCommunication +#' @importFrom tibble as_tibble +#' @importFrom dplyr filter +#' @export +cell_communication <- function(input_read_RNA_assay, + empty_droplets_tbl = NULL, + cell_type_tbl = NULL, + assay = NULL, + cell_type_column = NULL, + feature_nomenclature, + ...){ + + if (input_read_RNA_assay |> is.null()) return(NULL) + + # CellChat identifyOverExpressedGenes() would only support at least 2 groups + if (cell_type_tbl |> distinct(.data[[cell_type_column]]) |> pull() |> length() == 1) return(NULL) + + # Get assay + if(is.null(assay)) my_assay = input_read_RNA_assay@assays |> names() |> magrittr::extract2(1) + + # Identify cell type column + if( + is.null(cell_type_column) && + !cell_type_column %in% colnames(as_tibble(input_read_RNA_assay[1,1])) + ) stop("HPCell says: Your `cell_type_column` columns are not present in your data. Please run celltype_consensus_constructor() to get the cell type annotation that you can use as grouping.") + + # Avoid small number of cells + if (!is.null(empty_droplets_tbl)) { + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(empty_droplets_tbl, by = ".cell") |> + dplyr::filter(!empty_droplet) + } + + # Append cell type + if (!is.null(cell_type_tbl) && + cell_type_column %in% colnames(cell_type_tbl)) { + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(cell_type_tbl, by = ".cell") |> + select(everything(), !!cell_type_column) + } else if (!is.null(cell_type_tbl) && + !cell_type_column %in% colnames(cell_type_tbl)) + stop ("HPCell says: Your `cell_type_column` does not present in `cell_type_tbl` data") + + # Note: CellChat only takes gene symbols as input, thus conversion step is required for ensemble IDs + if (feature_nomenclature == "ensembl") { + + gene_map = rownames(input_read_RNA_assay) |> convert_gene_names(current_nomenclature = feature_nomenclature) |> + filter(!is.na(gene_name)) + + input_read_RNA_assay = input_read_RNA_assay[gene_map$gene_id, ] + rownames(input_read_RNA_assay) = gene_map$gene_name + } + + # Construct cellchat object + if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { + cellchat = createCellChat(object = input_read_RNA_assay, group.by = cell_type_column, assay = my_assay) + } + else if (inherits(input_read_RNA_assay, "Seurat")){ + cellchat = createCellChat(object = input_read_RNA_assay, group.by = cell_type_column, assay = my_assay) + } + + CellChatDB <- CellChatDB.human + + # Giving users option to choose the communication annotation + CellChatDB.use <- subsetDB(CellChatDB, key = "annotation", ...) + cellchat@DB <- CellChatDB.use + + # Preprocessing + # subset the expression data of signaling genes for saving computation cost. By default, feature=NULL means subsetting the expression data of signaling genes in CellChatDB.use + cellchat <- subsetData(cellchat) # This step is necessary even if using the whole database + future::plan("multisession", workers = 4) # do parallel + cellchat <- identifyOverExpressedGenes(cellchat) + cellchat <- identifyOverExpressedInteractions(cellchat) + + # Compute the communication probability and infer cellular communication network + cellchat <- computeCommunProb(cellchat, type = "triMean") + + # Filter the number of cells in each group are less than 10 + cellchat <- filterCommunication(cellchat, min.cells = 10) + + # Extract the inferred cellular communication network as a data frame + # By default, slot.name = "net" extracts the inferred communication at the level of ligands/receptors + # Set slot.name = "netP" to access the the inferred communications at the level of signaling pathways + # If all arguments are NULL, it returns a data frame consisting of all the inferred cell-cell communications + cell_communication_tbl <- tryCatch( + subsetCommunication(cell_chat), + error = function(e) { + message("Error in subsetCommunication(): ", e$message) + return(NULL) + } + ) + + if (!is.null(cell_communication_tbl)) { + cell_communication_tbl |> + # In this case, we want to see the communication between the matched source and target cell types + filter(source == target) |> + as_tibble() + } else {NULL} + +} + #' Test Differential Abundance in SummarizedExperiment Object #' diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 372f0ce8..42809701 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -462,6 +462,37 @@ calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL, target_input } +# Define the generic function +#' @export +ligand_receptor_cellchat <- function( + input_hpc, target_input = "data_object", target_output = "ligand_receptor_tbl", + target_empty_droplets = "empty_tbl", target_cell_type = "cell_type_concensus_tbl", + group_by = "cell_type", ... +) { + UseMethod("ligand_receptor_cellchat") +} + +#' @export +ligand_receptor_cellchat.HPCell = function( + input_hpc, target_input = "data_object", target_output = "ligand_receptor_tbl", + target_empty_droplets = "empty_tbl", target_cell_type = "cell_type_concensus_tbl", + group_by = "cell_type", ... +) { + + input_hpc |> + hpc_iterate( + target_output = target_output, + user_function = cell_communication |> quote() , + input_read_RNA_assay = target_input |> is_target(), + empty_droplets_tbl = target_empty_droplets |> is_target() , + cell_type_tbl = target_cell_type |> is_target(), + cell_type_column = group_by, + feature_nomenclature = "gene_nomenclature" |> is_target(), + ... + ) + +} + # Define the generic function #' @export get_single_cell <- function(input_hpc, target_input = "data_object", target_output = "single_cell",...) { diff --git a/data/CellChatDB.human.rda b/data/CellChatDB.human.rda new file mode 100644 index 0000000000000000000000000000000000000000..d6ee0db3be67de19357c13ac2f996c7f9852b05b GIT binary patch literal 1393904 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
78@cy-WxF`*031pzsNf4TD-&(+8=# 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%0Av&TBn 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

*N>bq-WoaXUfaB z5hr?6n7y7fFgFqE(;qY}S=zGA^LP1nCph}Wj7gxqckWfX@`Q-~nDS9;!QOd9)t8FS z>VahBwDAU|uD~*peF+eV#^CkM#NcEkLlx~70lAqem#-77xr?;6Pv5fDPz^a$EMVl;3%NlO_G_g=>%Q1@8hQt2K4Wr# zRd$3z(e1sgjNo`-9E?%S7=$GKD}S+fV5v9Rx|>L8 z8m|k)NY>XEsOX0crYEO=x-$U_BnG-UfO<*ppDkV^IV=y_UJZbbY2Te1v5>7%GY-DA-k_?& zR~XopQ>yN^q2OQgWr~!uF{ld%BOG>_IiarRMubitS1yy-MC@PjKzrGGA@$s7^Ns_q zKI=S+@Oi2L^X|2E{g)K*@0i`4>iczk{(R~4j$;i8pkDn0U3FLId*=Z#N6_coA1pjE ziN9jBk}bBsB78o6f8uHs*VtmfQ?E08fAd!|j+obf;_Cq5p`e;|4unNS{=^H;N_2?j@lc(Ha;iLiUDKr zU7YM$nKMDYLaQ!zZ9-nexhCz1PW~WG$<3df%n4#4%>G$I-ZwzzJ4H%2Yx$FsnuB$O zRtXsb@f{ISbvv(!>-RukZHlW-2fCbXWugTP@P0H|!yvk9t{oKgw~GQKQpo&hh=~bl zB%usc^d;n?bVBpr&-RpJSnh6zMeHBNmNQB+oPd3a@~+J%(965hzCNye$3b6DrUS zTa&o_8c3VS?Ennesi~WstZiI_5Vz^iUfU{Ix%RbLzHQ7y87uTbct0iK$+C*{an!#y z$cW#j>{F$of0!tE3X(^Tz%0IA@m5pa4LGlqXx>+2zd7{Ir8hM4QmjqoTUVhnL|D-D z^D*l+z#nP3K<-xirD@bJl8D9#oUdQz&-x>$Rga*XK&!`PSO?Gnu(ym3(BG?}PhI>y3F zpAHsj@8Q-Qx)ZBH(C^pjH)t({0}(=`9Hg!GdE30t>ue@Q#uQElp_%zgS~6E86sCBqya74 zd`aX}$({>TVKC$g8){-kiNx)(TJtit_}-R&70}f6v_EVkfQPUBA-JxfcU=@9g^>bL zheWOPi;X1~zG=V>>W8CJq3?AQet~z<(Yvo@L}aeV(!0VyIQq0#eEd)+1u)Q7Q-b@W z)R|eaVdHmv&V6!7ci&N!TcZPjrG8&5Wcg7T6@yZU+MXc0MvPtx{h+>JH4aMes3zTJ z9N4Tj0coU)OGL*vk&QjhVUFUS5sp5++-``YO{igc9fCb~{8CqHGx&1!Ek|JPr*CdL zyEaYH2;y+l#W8Y2bem#^|NS(r^2u9nrH??<9{?Z=Wr-}NQ8i<0ePS*}DjjJJhyr+Q zEd>kWxCFAlB@ zC0~q2gLHB3QYq7IADnR%ppa?3B7A;dE7^5x{6mTIXk$;pv@E4~)D|s`Vyj6lRdM;6 zTKgovzrSfvN!T{5kAq7nzlJF02PF)t9SW1^n&d0~*KdsxPkOoGP7YBU`tSCD><>t$73vPGB2|1eBeHtRC@~Npv0Z zC-CKfnnv@yx;YuN9OnUhqa~vZp^k7TO^@OIpD_+V4E=(qy9!Nb)f#6wdv@0CRaD}7 zSm^d}AzLBl2#!s#pgclrbeqck?1~umK>2`zC~cc1cr7*bd><3nw~g~dPdOIMY3b_g zz+W71LY(fKX&FhgWrjpoXLdzPgKhh833N(lP(fe%YK2H-h2AuLCc}Ht--~Xu`ZA7I zWie_MbO3acHuj)EcW2puE9SyYMV`7)*|jc@3lQpS9bEK)oI6Ga zpLYejnMkvRtP-=DPPS5+pC~&-__dcs`qnnV$r{R=Tx~TtoVA(g#LUcohxSz}fXfZA ze zoHqmNmySYkH|cq7ui~#~#qf_{w5-1>`i~r?P8Zr!9-fy$`+Ca*Di4lDcS%Zkv{$U$ z3lX4Ll_I?+@THE@B4XgV{9B}ttY!TOX^!XJm~tmzH+^pw+=VuP zeo+~j!mn~Lp8DIs41M&wVk{m(5ZrY8_w`c%gitQR*7$AwHN!c(hYqYjFYt$<0(F{v zw~j}$z-oWqeV4Y`&>ohQ04^T9a?5|gG5VEpL`62jPW{Hz!RPN491xYL0T-Wpj2Hv< z?A<~g64&sEIV*vUKEhE;)P06VB9t>lc8wXG zU$&6QxF0#Dz7y(R3Ez7d^TS%6bcuqI_?m}k-i1^!rohB5n*a$pHetaE)Le0?YLbk{ zvco?nPQL_XsXfH69|cb9LA0s8LQm~f?53b%GIg)bz00~NZk)9CI98_ess=ukf8_Q& zqMpWUMj(}>9Jcy`_?$rIpt#9o{Wo)l5@`QXu!Jw>Tv9!M&h1L_j$Z~7$3>546#?o zIA|Kd&U5!m$JC!7;&io-|Gm-jI8lHq8& z?#i~K3X;S}9(XTu#^)t`-WMPnN7tl!5?54*Jv*+~0QOx*bw9PQV}Y5{GkNgZ(%qt( zZV}X-wwd3m;eUqkGjt+dr5Aurfcvo9_V~v83FOnoqOW8AjSX0kNpk`|Um82GPOXv8@!@S8BVp1gcII8j%^v1Ps zX@1+z+@o>Av~e1sZlge^VN;AB(2Nl&2$Q(K8=$5lyKJjY1+w_FA7gL*N#KlnxVhA@ zV;j>uR&Ibv$;6;+z)vXhB=D}1D&ffrLH2t5WCVQVjE^(BDbK!g1EV* zn1+mI#s`eI;z}d+W{Caz5kahvf#2&Gs5ncC-83NADYlL!7u){$)c11zEb;V92Sz99MTsLRh=S1 z{+buTm#1a&D!gevjSo!sdD%Fv?lXltG;jfk?HY9jHv#sT$g7A`R4<>P(b-`s`m5cFx{B>Sb&~4Yo6X|*)bp1f70x-{^zl={j)O-TMN9%P z1pc1!jHz6u(BGillle*D=sB~xTs1svU_&6nIWF`Qt}G3|xM7U1;e>vWqa)>D$>TmE z=XBpF3UN&9&aKAoBPl=$$BlF|;iSV3hrH3Zp-VShcKCADw3DFpCd1r+XT8u>FKWOo6YOfw1UO&KI?{)Z zmqcwLv0w={!R|YC9_69V98$>>4vGL@WCII16w14);ySL}V-(6~CXR)udNk(DJ;e^Y zoi?`}@9PPpn%1(}=B_3qSsg0phJncvu`9-Q2=2_^SomK85v{w9h-0Q3+LcuCp~;z_;c=%S z@f03FLOS&aRoIu1*#2o|+$Da5J5|>ETLq6l6c$8VWH0N{PDhr~{KuxAe6mrhvEI6i z3DdE6_h9m)SBWG!NL>U)!_agPGU`0y6PHHt2LWZ?j-$95){P6Wj<(RhBXol%c5JG) zO*8f`B5biPN>RoJ8mzG}YBL49Jn=to8M^jTQW+d_GjmU;_%nF(5U9QCU0uz9OcK#n zRS*x-OVUL>z?B?PMa~4(ThspNR*lxwrjeLiIK5!BE5}t5^aUtp;tdtjKk6fT-h(*x zAG&dHh&wyLHxLKjW5Bf4^2wEOV!8_U&u9BCdjsB$zZ%J1cmtz{mY6m*w(@Sx-}#KX zymI6=>k-t-3=SlAOn* zV|2{C2TroGTGA9=m#&*09H~b8Wm8V&es<8jzrkDFzDbrq z`&;W3tVdj6hFu2>U_LVgGXRfiyS^a@>C=O1PnMdW^5M5^MN#OfDQ6yl59C>(HDpT= zilg3X*Z&!uELk?1LZxg<A(arZ-8x-? zw2*0kZXa!gSQ``5?IsdSTf{t)?{b|MHJeN$+{F_Ub@TVG6C+dn$hC z=h(*5!lld7J?R^e(P#ON2SWJ_Mx!;ABY$j1rE3aW`r0xX#G6bg%ojGKOsRcVX5G1K zH+%QzOdy<^6N-PUp*anuZ<$n%E*Hfx8@OIy$AeN1|)hS1zOg!R2n|%kEra+HVjl|W8BO(PPP7v zJiF=&pj)y^Hbg1{4My8WX8^8t+?$@c78?H?{tlnqtjDhacye%3xPV*hVwv5|t-a#o zM8lhx%VD>bHCYL3x1dJfj2NEo+ftPGie_Nmk%z^wAWjKI3n5KW_Q_zMg81J;ep9!x;+Qpg;8tF=QU@~0#+KuVvU|RQ_dXG^=JNe-hseGVI%cQaoEW%=tl&o?#n5=9CBT^l zKwjEMW~i{A2?X<2veWfDSK4Arue4f}%ZB0)3esFS^=@zty5#IhH3{a6RFISw@1yfX zU@>lXx6kh2*Y;!`{&d2Sin+k1&Dmt3>@C&kfe-&@ECP%;%P*70`oEVQw!`PfQ)6({ zsce*g^pW;|EQ9xO3cB1%ja@7W+x=v7k@8aZMwi+b3s!A3m$rINySshdTp|Z(iz4UZ z>-NM~i_W}0n-vuvE@0&T;_?b}Kp%9zJML%zu%L*{CCz6E8_I7J=6sy)L97~88^-@> zH9OYjIRVSM5iX)eC!7xDa@8g3a9?E{gn_;EJ2Qau%vSK&Q7fP`KKVClsm0;9t`B1f z7b@f*`e5)RtK1!_$8E_of^Ma1-R^W>E8>GK6G!*fUVsiC6IvJYQD^8oEMDv4)0~_*SWCt+bwEIRKDwINKv9GB5wGl zXyBNVMgzim)M6WdKivb!jS=sZL@|EthVgS%X9AX=b$Guu>x zuj2gsqm*ixR_Qw`TuR2_u{)G3T(gGNfS&T+xcO%lQSo*>*)_VG^T2+?%zbm%#G@%p zG;5pJpE-t`^~yHt`hP&y^~>lY!DmvISuMq(1b ziK!;b60?iVtNe*zXfp<&!cNsDKi79cw9Mf70z!+tp`CdM949;@FD#;@pq<*{a6c z1&;m4D=qq3&UwGpjO6ySF*$FSaek+cmwRrN*|0q)^(9XCJ=_!-p(BzlynlY zEgL+>h}c1yzItSrH$T1>u6Y}m?5^1u+UC_ke&EDp?h;yY8A_c|w$=D`&;*FVorj|< znR^7Vi?t^f%qN$CF~0Y!P1<$Y6RMP9<&luOT+5uVG)5lYJ|aqKWu!Mlwu)F+yVs! z`0^1*IE|EqE(=H-bX_a?4E?XlB@o`E5+f6?(g~grb0Ls-Onez<;uDn{SAW}^!er}2 zy`Cntr{cN5s<+F;&}pH#gJ1}(lyaZaHvVmXcmRv1VAp? zlwsadnOZLXKxE#M=s9%zuY$GgWBKvp;|tJtH^kdOkhd-d& ze@!;D4aY(9?=+!+Dr3mKyTtBeCx)SKL#!gpRvgRIov%i^6FM=nB8W-!rMXVxc>C)E zVKNcy;|1dk7c40hr0I?#!MLIC6L}&xDtXaz-CcbJhxy+9mU3OW(OkvfktQNWMaA-r zL+pBN1#uyDjYgTtFQR84mG-HT@K4v+W_eJc82rZ>_s*9`FtBa4XdxiW*_oHC~64 z?Kq5hCzByTa5YHgaAG6su`7M_^yi&FU2l#5+?D1>1;=(}RSiome1jik6E=ii@&g%eH1=f@*^i2be(o#dvxH$* z@_R2Frl6hft*4lqePS(a`ZD3olN$U%d} zybnY?A>T})3Y5Xr&C3cIdwVM-_XfAE9LCRfn<89ld0*O~XU)&(3oxx|W3NCVk5=xy zQIPALa=<#Qma(vfyyLGv@a~nl=%+>&)%28_+*Z@R(XfLo|2=cuzO}w)?Mx*?H`%g8fP+f)_5ii@Zu-Rbr;Fx~u^pujaZ%fk0B@f@$z{un zxo`u9yrnX+sVLl-N9|puhyQVjiUbwB!Rf&ow@#$mJz32GHcDPiU-OP=j?!7q}P)vZ(LMLENhD4=BCSYY2Z2fl?=y0cbvV*QiJ&dS-DtHd1f8}yQmD<&D~^H2 zoVw2%VG>ET^|@PO%#aH&uPztSUakO1i^*V@+*VJz(BJ&k?#;#}q>v2A8{JIoE%8Kv z6wx6ujqlcO%MWzfM|h#j*M>lH+*Z8HuTK3+{wO_kp_&VvAJ{H!2Ic4VFd{pUtOTOk zSZoFsx94MWQQbEHmKdjY?@3f^$??C1Tdknwt;Uj;6;^$(d~qFBEG&!zQfv8|n+wvZM#>s-J$RH}}Df`+Vr62`omQT@=J7O`t#w1EYU5|uY5Z6818l2k5 ztWW{^aL{}N+WBU5i-RvsokOF~)e-0DLI5k1pZO!KD;|G-r$EL4JS->2f2jXYKPg&H zalTm@W!98^Wqm&6cfGU76xQ%Q5ZC!YIM$A%FQYL^;&rXE1Q68%_H|oRQ^LwBCS%1a zW!ZEEkne%(9&#hMA!D?~Dq{0BP*}J};194Fg6wHL1+cMcY0CA^m)CGJCnb($VC)lz zQ_n*6&;Z2A`7VfHG-__`p$U1XDmK5EtlsaD3?3aN0c3m0l_6BJQDv1%f8#{LH6VYd zemehQE|6aK%^QGFRsa2dad`t!h#TPxXuB&W2nMxc;I-x)1ztiW&|(NFrI)V+ijNep z^UrCnmXokh$lwf+T!HlcJ2nqx8_hiEcZ#RRK1uc?v0C3N0wqlzu4%id1a}uK^tu1H zI9>2?B1@SeKw1qik<2S}9{bh^v#EFU_hXgXkn<#;yGr$?q zMg4^BuK%oIhYGaghD;r$27rG_&GKCwf|O^XV_Qr*_|NHm?SDq)lU%QWJ{BV9S>WzE z7nL@rc^rq8km(C_DRqV!QTmDXN0jLJpF#cStU!cTjyGL}z5gdq14XIkuhd~~!kEr$5J*N$64hznLBInVKF_Zc z<~WT(xgOJRf9@>Nv~1EceKpSV4c}&iv!u`S69kNc{j;}#j$obsLY`ksCvTZ*53rid z;`hx~{;;7OA&7;+Dyw98X}{_YLvcIeQr~^oC^DA+S-yCojJ71WQAi&tdJq|ISz&hc z`&bXY_{ZW6Po*EZd{%?&ymQI3)%65C*H8D(n{SrtgUK=NGh113DDFaFU92~R zAzv%;$)oT&AK2vlqEUo85AaU`r#;Hk;Hopt8x_&3b+=WfI~agXu-wq`#BHHHl1N%Qf=BQZGo|xz zD-!|v?JE&!4UbApdnA$@%ruO7AGF^&lf#DJV1(}jHpt4At@u+v;|%Yi5mOm@nID#-;4`?IM~ zY9ibfRwtjDSt0bWy=FHP9w&QM2-?;bNoP9K^Y46ITsuQ|Uw~o$?_o1#a!_T~^w(VP zqt{4MN;ME#w|vI&0wyfqf3hWm_ocV=jBgz(JQ45nH+ZSM*h--Njq^8xinImv0MhJCMM z90>%s!84#ImHguuH}@}Nc#tzCi?jFyT^2dBuzq&EiZS3EV8A(UV7}iP2XzsyTh%Y* zpDKFo5~he3xN@2guP~6ByO(YmXud|IKw5x(1H$ zQfZn>Zy7q4^A;2qmBkmoQAagAopKb5`aa+*ZCi_$)e%I)foWZ8wb{WlN4X)T%|CTx z4%Jji)@16GyFQ*MflYqeK$3h3`L0Cxp7U?epI_V?v5bd#u&tc*#ctms4U?K0vKJt; zIH4<>pN*@i!VInlMpQ-p^;8dcr4ZC4Bl=KV06B&I z53UHy`^@IqES@-K5k2exaKs$y+%%c#>~k9;51&)dz+ZT3ld6pU0>A42#LAUTDEhjo zy|G_}yV~!g3hzh%ZeX8C|EUvPj^c-7BehP6hyCMJ&ZQ(gHoVu1UmbnWulH{kgj72POy4OafoY@Wc<5vt?2AkP{dB98)LbwsbrS)0535qV{Wx~41OyjZy z?~TOhU@)9vdJSJYR3lKx1k%+HGS!u7VnFcMZLSD&?!_UiT*MjJEhoUKlxu0`)Nv!^ z4nKbFQ7GC~*{2f?S3yV*h0Lm{#=7gK^YDfbaQ(BoT7vv8^|ZY$v71-|eDsxy-`k#} zZhEQ%$SfGj2VlQ(Ry*|Tlyl_6)x@wlon-V8^jc3GM=T(P+BCA9hxU~em@rel!(h85 zGBFp^FpP_-D-_vO;4vj-8hL&HO2@OfOW>IhU_y^z(0#YZ6{cClnnD=C1`xYuGs<^k+K?dawM?X3zQN&Mm>l znd5h*5JoihNRP6Tg@`QR1_ufvZ^6!{q?d4#8BQntQ`8ilf4{}NOv>P8;%K)!bu8== zss)0?8&yp!_0>V$Mwiv#M&ap*&Ti4qT-N+psKs`we4UN;_QqOCql0^YqWGm@N9*d9Kk0m|fK zI`m-Bmyrh$2(--gMLtLws0r*&vt@nl>c<%*%#q}Hx%vcigT#M~l{YxU9@&gl%TL+4 z)}ziZuqDVMqwi&I8aF}hO@mti5TO{XHH(4tPq|0A={M~WPdB>4alxN<7JO9WSU+)$ zo)$oeXrZXUi3%nUIfTIz{!EDP@dEwqLoy3!Pk>J)_!!@{8t*UK85hd*SSegI^zF$B zjnLnApj4=1i$8IebYG|(ydYKYkdEphic57`Ck+}u0o{BP-Ff_*dYhiO7n30$a!-pd zy%>7%qU~@sZ-#~&80KvsMS;k&xH^B?q5(JJb_l5VAC9B;cQDpd6&jC9SB&!tG!mSX zn#q7FTDx9I)avSg>KVl*cz$eX+GG?ymD@W1{EQ1T_dus=YP;5DA{B@zmHlgoChdiqR0~yd$lCo;t!ujDQvdUE4)Ud;8M$qQvL@1Dq58s z%bJ)&YmoCg4fk=b=y$)JMo&HZ(m!>5<(UO0>Q?sCm zw>t@o<5B0vdqVCL8*_lHl(0qn1qk3p^WtNWX?w59)+o;!3s!gi+~)+NMfyU2jK95k zfZ|!+b96--ejocB&*-F`N6VSvpR|o@Yb|3IrKhNL%b-1nU@Hd`)9+RakCuT@FCX0O z_+3Y$U6ngS>Ze-R^7xQK>=0?iuf^`XSjFmF!~$RavcN`0BDXVW7UdU?Eh$XmO2!ZN zT1tC?LE!iDGpu3+{2^f>YJHGNuTwEPjun*63)oP66Rs{pzZAFEw}2ag5`tmS#EzRi zO5mH9HfdQPT0KLhk8}_n{oU)B!Fl$B9UvBx5-RH$iaVrc(Vw+oHc9eL*C!LSd=$zj z%`=~imBk`&u~4Da>P5s2f-2BJA`H%kZtUC~%Y|V(CX)gtVspGTgZ!_FxFX&~m7PB?efJEuz`h%q<~G(0RdVG{8a*6Ij46?>J-YkwpsT@GWZQU% z;7WBLTa1!g5bdJNj?|{!qUwL%D2N@v5_gFc7wCUT$QeZ5Vuz3f11YA!RQo z{kAn$_dCryxh>uLIY><@7qW*JuAgY^q6ji$oP;RF5c#gDC{tFkUq6xTm0g2$VPL+d zCS!|(zmeD3QAg2pz$8B9x~h*TQG}wnlH%hh9sb&j= z%OP`$%;)Dw<*~W35RMiL7h`P$8eEB`Us-{33B9iHE(A&d$IQ~##X5F(8#8JYyKcxj zg&X?7k#Hf!iXKnne-G^yVb)b1fgNuH;^Z!x!yVt18{`s>N-!8rZu}q3|Iv!i-g_a9 z$F-srh0`SArmcUas~@(9MxaIq&D?I6gz>qLqruQstx48wQ*+qX=0wjXX0Ynjv>8NK zM}(#H@QcxMPeP+KY*}mQzzKnRNH`-WuQ%}zkO2%9Aho~p^h-Sg-B@${f`LTohEj3h zF9xijd&FYvlf?0!@}7-&4w}fyqJE%AiA;fpl?mWK8T;PiBAL91KF5ZiT>aZxH2c*o zTIR#`T#ZC;ijV9U^B*@S3DYu0qO30LL9zQe;V)5BTjbe{il1X78TuYa&Vv3(-HoKn zUSvNr;tP3`wg_&;T(keu6jC1WI-3RG;H&Y!BQ|B-&o5mei*rSE zehu&6As9BB+s7% za!tOyqj3Wz7|XX3T_gUtO$!O>rPBnM6dyUTcLv`oY0iIZ9^PqI@KRQ^-DaT%;wS=cUvmDZ_z27@(7BtZ$KdEOk0N>H$;gJXh#i0-F%r_0<^ zW$Iq}N}E(2(w0LUgTC3r?Ct${gTUjJG!+m zosBsi<4P906SYg70xWwdIyi^YaJv=hc(!*M9mg@b0|SB%_?WP>Ig)5z6!Ve^OWY zg_M%3j_57Oo{c^dg_VoD#8|uWg30Axux!MIEk&cK28#vqIol3ED>i*@%l2Ch1|30l4@v1RZT>+8DxMdRp z-hDoFg87Muo6Tjy*FS#8g^;4(b!%R;!nBQ6kuhZ9G;ZjU&^-mW_2reb%s06ik2T`G zMl9w3oVJ09p&cG9P2!)W35o>02{BV$RmKt|Jerybct@49A-SF2{#E^}Kfa`%^4duB zs?Lf|L}McG0mYh~PQ5I}H97GWiX~0MsvvS2A|cDo5*Aw&#w7%)=)@<%fRnxI=mOg0 z4*<$sr6mwDmhF)=^TEOuqdV*uLSZWPEKvM{usv+iR!0cjY)SLzEiT-i!n4+KimoF2 z39-hke{ChWx$E0nRKfc^?^CAMMFW!j_OTnnYJ^p-yu&UFm!hGi0dMh^TLgEfEjb8zdIH2H&8cVg{jlY_% z-BmpCyXjlm5-~Y9a9w^uY`AjaADdo~;z?eud4ZZUZwS;*n_*JQpO5V=g^cSOhQo7s zg>vURFY%7V>!!Caw%s?ly`{3hJE@e)TA$(*Nyf_8;{-|%LzdHei)>H{fc1->a}kdvnrY?ns=RIIn_zkt-Av=oMx5q+?-DIVScv8a}0`G`s1$Vb@122tADkyIL z89jRAQ`~K-Q64_t8b)r$VppeuW6gnoiqttf}#t6nlNloco2uMH*N-S%PZ zskq>gwSnA|$2o2Pmy7duG1a~FlurEjS0BomB*+EA_1RWI51TM6|M3M_C4f6!Esb`U zb^sXp7GA_5?ITE;FRr0S@ljvPV1&D|N2$}y(A%Syr0sN-4&+b;!?_}65Q#Yy%e-_q zcr_?I_$|`u!_uBrYY1=UboB-7SR1)ap$%v?esQLVEqX2m>lmUH9X)XG=7kJ+^k~Y; z4AhZjfMs^EF;=a8-#Gm&;(lFOHw>jj%#$4|U>PT+pS-1RD`hP1&ViE*hHea^(JVt1 znBkx8ck1E+Vr5ksKsR-1x4wWo)XpVo6y4_jri$7gL|j;X$c8pU26>L&8L z_L_#i%*Ux8TRh{5wr8TcTEr?3zTHVS8m3!_I&Jgfc4C4hlTXGPzsnwa2pQ*Nb*oJX zl{OmKI^tED@Car+a1leK90+w5SXkhKQ#iY>rHx&}^xltILBeJAqq)l?xseX*d~5Bq zKVtrD$bI^1qgA9bdn`L}5}*eT%hp|~{agqyLdtSkjrIp%w4*sUR(^4NHfo(^MhCMO z(aju6&bz*kOWYdI-mJwrSW{JuE}4MZmk^3PpfU)MvPln@!WQ-OG~Ogn$zn-ly;drB z@@!FT10SE0h*3div)TY0@Tb}S=>5bY-JZ{UZ1{xcwamezh}C9^B(w3hME}fx}BRF*TL2Rx}|b_|UdZ<5EPL^_e$A^tpk5?^|^W#^KWS z)L^l@Bv82>uyq0*Tt$48u;c-D9X=fd?}}(Yu{K}K{!YpdiDLWZUVywv_~*3Br#?)a zxV?6Q()ykUPi1v8*&Av_$SA2}b@4g&vCr$@q)^shfX=$dnn8fcz{OBi9?`Y%TgbUe z1fHP&(Gs9W88W}Rbu!}UZKc#S=ZLvFA*L73dg_zkEJ#LCo>kq!MC>k7G6mmcZ}DM< z2p4gooCa{Q8@|Shg>>^_eh6&y+g|^&0XPp(OLnnWN<~JJalV*z@OI&~h4NYQ`hpZx z-N@MnSNqz3v@yUsX4jP3FAI#*!)k*k*bl+35&&xq#WmP20nbyP!RKDWDJ0Va2YK5| zJ@70=Q&ZZgF1_|S!`wQtXcXf-U+XePSZKoz!X?i<-zdg9Cu~Y&Zz2NItQCdcT{6HU zY357S&%n$+tfEd_h@NxP^#Dvev)TF})w3C7&zd2`<15oL#By~zRWTQgTk_-0EpL(x z1c8V;W$VrgmExMQ7lwrbc)Q@?J-Wfp{{*poG58LnmY`i%wB7`XTt|x~k)wGlSlqmS-C{?$s7it2%%_o4!f% z=Zmn-fi@6ji&Kxhz*eS`eZWrDK?I+iV~WJi{7_?9!QL+JZ;OxPUR-f@E8iX$miwwm7@m338) z`A^K-ttd%isY4=);Fh;}_+`;$+r4h18riytJQFXAb$oRpRyR52G|! zW1x^O!7Q38M}$MMD*%HT0?DP{tK}G10KR>MfQZr!HOO~*&4v;ovLu@&+yjb<)xe!9 zLTnSoxA}PgzQD^x_IZK)G(10GGcgRtl`Fph!6i&4^lIY=aV7W`)(u&&)v+G3@+<;R4qM4Iv zn1IBR(vAG=&i@B*lT}EYR_&$1JS!MJo2C%HsYf&@2B9o>LWfrpk?7bp4dxnbp6i=W z>F3`c4-?E3$yos7Zrh`Skkx%nIEO+`$$-dl))uKx2bE=Sy1F$f zl(>qn5AXi|S=#8M58e=jRyXR`K*|5*duj=!7z_E}B0R_UjRD$-&alseF9o;+I&t)O zk0Trl!4dgZ>3B;M7w?3#+o#q+NcJHr{B9ChCjx(QVYy{3AV?96CzX#30^ky!>O#o| zM_AG}oYRDgFbb8}?A1WOA`swXAc)X6OWpS>Whm+^?Je?dI2aPMtAjn1M2Og2(EfiQ z6Qw2@P3=04-&FiHyk*f`1TQr(7QYGx017!3+Z(&h;|BNhi1dNMKAH80jlaYo?vjI) z?z6o32L*aH8op9Nggfdv`Hxz%LhO8Yjegd}HccAAqEhe|2D<5XgBCMbcTFV-gRyDJ zu9G7`l@P~u)0qC`=wYAXdQ~F=Eehs99J=SH5E%Zm)QWE7Y#cn&ctUdYk zLuSu1=OT4ouS#&JXRM#l(_f*>!ZCMWD1{BCfik!*1{g5FH=>?3UQY8}O+Cmesz+{A zp*AXFjj5JkHDHzUci^tY;Tdk0Vz~fTkv}N~Ytv{BHL6 z$n#=ZVOSR+^&mT=`}1a@0RN)!Q&`z!*1@A(#cOhbsXwX#zuPI86pt)+@;?LX9 z*NP5Wo+~(tK6;80N4%E?jWHS=6ZuV4DjeL@f$RO0n81T2`7=(`A7GQYpyTK57m)5D zrEAuh(=lI*EtR;>K-`pG*5^%?srFJmEDRb?`U5h$iu{72IVOjD{}UrcBoeqwO$~6E z`(@KjgA<_=1g?I_f3Im?E{Xt_A%$4!Gal1gH-)3vvUH1K(tpI?eVv<7KAZ-+aCD=V zklUA?a_lIiDx0OjZM!@1k9VhY6X+%4;Qm;_MARup>((ARXp?2#(IyaI*iLwx`y>mw zh&CMEX5= zKJ6TmqzsUpL-Ns^EQM$zL<58=`7P#JR~?@~SV6kkY|Oc3hJkM~7~6Qc+aI>Z@{+s< zb4B<+?%C%`3Km~bfR+bor(WZ*l?-+)Ez4YUa-JNv8~R)+&dg~Jg?nQRUYG(Mddmr| zxGF;e45Vd4gexFGWhBND^g?tr!^A?MH>4;IDyIcR^R$-HAplbTsaRClJVB`QyxVUy z$nNizYXiK~oT9Bj!>{pjzs)^wM@pi^Hfd=sd)iLa90kk>lSHtfhh!_$j>?=vw0!nT z7@g#lh0703b8X9CE&obSeD^Qs>b>ykr-tVyQpEOj0IeB4o0y=pe7IHO@ClD(9~Tl> zmMq34wld(TVZYlc^xX^-E!ou!L-3vEXis+DE5knJedCDaHIeebu7{e8>&vyXUHa%m~`a|sQXJnsKbqozmB~gI^7(j^s5d#m_zWg zC-k{-tLej^W@1-IOPiuk>5}|-XDI|xwABfETiZ?clRUFtdO}lGKskZW@$Lu@TT5z1 zRLZ(73pKJ2;w5*MF9U2G3=3HDD~&q;onF?&KVOAy@#g&-N z^0>+&Kn3eo;(kf1tA0X7sZMn%_c)lTbk}YYXbd+$$HD~%J(c{q-iKnK+0Q*UWN-e+4stF#4EaCVKv*V-@+r~o^)FO#&xEb7oP!%*hK2g79VH9&#asITr_?|l%(|SK z?u5N#*v0>tb^9RwJ%Jw8i1JjuDk^3-$vt1JdjM!yVO+xpfS6IByZR1tGkFgaf>A+M z-$P@BL<`0iOsoW9{apavSuj8V&|%y>a~p!e(o6yZN(Dnd0UH9<#YD8@lL{2qKSPnA z4~ZBbN0gSTEsp+A(|LL1qp7WZN;($dD8U~^F|+24HHyupC+VUOUv)PNK3--HkT+;? zEIMmEX7{|n&`f#fc-|)B8`3&HE95#X2X!76*Rej0`{YBBi0{tGSgA@PyR68KAgK7`EX+Qk{(#W zvjtuH4)pz1LT96}=gyt#fLs$b8fdXa%-(FJcfDi6^-zGa0MFDcEQcgc#)+K z&Uv&gW@Y+ZwiH_8W1n&oI5nI<9Dl;7uU$RdFRZ0t#_Oc7%Zf3ZLH#x{E&T#}_f-ZD zWTVhCfGe!6(7*Wt@?i6r!wENhRD759j^LJf&jvM6bsoz6H-K||jB=)HK0{pC#|SD=S=3&i|L95P)|?FsyMEan-QhyZgL zH>Y2+v;Q)*@5OSlAYE7=42U~88}a~SF3l2y^FZ}0f0lfxgEuSh`@l5$`w$;s4sao| zMtbGwtESGa=B)1)aej6d_eN7NQ>oiCN&(%Bk8{}n@>D**W-GFrdB>wqx%9Pj=ipW0 z_TIi1gP^K2oErj^i0N>1CFzUA?3347%r;rGU1ex%bWqC0?~R7&&#D}a3cald43~gX zkgu1Bmtz_0jrT^!c@BNHIY>78x@>%kxbxt(l+K`a`~krZUJ#Bz+WiH+@Qf>vp7W3fB^2ZNN3tYBE>3vBHgp;AHENW zCM&<=mvA{?TywJlEE{cmMqs65rHCLkd;~;|8a&#&oBA}bk^JLKGV>s-`LSs$-G4I! zS7(;&8)QgBjVDp!T&@|cr1To<=D%9Fi+U2nm|bp)V=Y8W?%W&Qw$i~CxVNs5zIcx( zwWi%zzk^!aE?$u&f!7YUCz|f)Vu)2j>sys0EZ)ZFEs%5f5;c;8?XSJyd-mS$&Bp#) z1p$SOn9Rp;524i=W;6`3=Fxgu1-z8kY*oeD1^esDHenT#R@QGvZQT358fH?rXF-g# zBAz`x4GSZZK}6G|sufzfUe7}Glr#lbbN-YW&KNU&8ldc!Ha?t(JJ>u^C5E1FF#TGH zkD1paOnX_P=f2TDOL91Uj}+R?R4Trnqj|rmzS&3={&|z@>2!?R)}Nq7PH_p!OWwqw z_pryLnfH>#KRe**W@`Oqf!;%VyKgeS)WL+pyab9$CRMSgj)aEc#r7!>QmUgV3AV{UB87dwT;P{sels9i80!SPg?n!E7E?EmDyj*Mk+` zzUb5_-71PnC~Xs#Ka+a7$NJ7T#Bo~2v&&)S@u{13gCPEHu+PaXwu!{6uwIOAW~8uY zO^l=cX{mfD#|a_n^^*a2je>Ct%V4S=*jp{RnvL3IWNESh`K32Nmx))wgRSMI)Qs&! z>oADRE05TymEDu1M&K8_VifTVnYJYBd@dYRb z7+{zx8vgoLU^su#ORiGfSX8TO5u34C+y|U@h28W$>nE$!*ndpzeo9AM18eS&V2Pnn zIu^}_cg_dSZP3v9wK4_mdNr!$dg9_yj&jy*SX$Ku7H26pgS8@xF$Y|)bEcWEB3yfK z=ZzAJypTcLkwbzny~W13j4ia*1H2!*q$t({E7-d2&UBr+Zo`Vr6aq$i)%je#g>1of z-V$PJcD=)W((qI>aGQWvd>#1qn>=O9VUIg|j$wqky+^C!ClfKiO{l1YYaeaM+veET zi#>iT16u3r8a_j34sXQVl!Z&9%PKF0ELRfs(-FJ|M*-JuCNv4 ziteMy3az1wnS<4a!Nptxi(e%k-xY&W{f9*~r(G-qTYPr^&@B~&dI2Ld?3O8IMep9X zY|yk2_V;iG?88eV7vMt5H-KYL%m`<+4N=Gk@5w*Q zjzHY%Rmy_zvVq3hdXAbJj{X{*O}HbYQ_0u!sOxraR7ruNygg!@u;9Dk8aVaw^6~Qk zTOP?;Fdk`r{V<>%>0KdNI{gul9PJ_z#qhP9#oc)d@*SDuH{d;QgP+>sJNJT#x(d*0 z7+{!VbUc<_M&G*ZP9q5-M?SICl$eGCoaFQ7yv8f#abK}o%1BA5eMv@+KN7eAm!L>& z_r!S@Zoi{*iorX^u1tS0)u*tf{HJqD^?JdO71#r#?fBsP#kY=sj$(PWVB zwG{70+FRT3Dquvmon`9+)Mw1+Z*@FAU%Qqu;)ac1-iAfHVF0IDVg7&gCDZ8j4nzC7-24U94#pU$T2AC4g@!t76Zo6jg>Yy-MSV4xVv)IFK%x+@X{3^hLm{C4EgWufZXqxvta|F0eDCXGNYO58LLxv)m zzwLgXXP(MeKG-hjhw0VfIR!Cqh7BQOV4;PP#nTd9h?pAPVOGRSydtmI+)cA)_b*U@ zca$QEkHI86+Z@r#|CTly?~C3kM6w;x77q<6^ocCF4v$Zz>L+|LElpa;5D$&THUVyF ziOez|YtbN*FGSkD{Rk@K&?s5hF6+i7p=29n2YI9P)k%Pt`98Ff;K%0kca{ngVqXv0UJJ<(99K|8!M^zsF&_xJ zGLg$s(v9nx{1Wv^Nn+M3DZxc)SmXzFoUua<6t~g+SBX$7n?5!Nl*Y5|Vydthb}U)iuPPIb3}WmAx4Z0Zk**9iCW})_+T*!L`H&T@bdW#Qr|!)4 zm>CL0*uF^W9fq6lxwm<$rZ*v})#YvUk49qV!eeip^>!S48Henrr<|s@V84wawI{Nc z4J?bn%Io;K+ZdNr_jB;D(pFtd-IURCV0wLzpzruK+fNINvg5_P-&iJ2&u&ArVJxwS z+4uFNhz2km%!h$vSJ;($0T&VEeg>Rj4_q#p%84&{%a@&$!zgbM@7P^p)N>S{mR;n1 zfpGD8xywV&&B#Z!@V+R&-s=v2%K#kN@PI4lQ4tGp?pd;fcA$vBNDLuKeHk3-VdXyO z2m|_s#6qb5wU?dGMv!;D!^ClRo{N?~mBBXON3#owV(4-$ib-#{ZBP*Aryj5U7cCx! zFQx~5CcAuZlqS>@rtpVi=UK*yPf;<4!tEp6*fC$PzosRv^1ZTvLRP~?NQwdXr_fl8 z0F5HTobWjXC3s>t!LfVK=0S28+tVYeF&PTr6uMgCd1JWOzblG0dTbxH9ji*-xvZF) ztMn8(m3#d+>6TeE9d#5>Ydu<3=T+HAG&Sm~e>aIWU7GAX))`wK_pw*>+?%+@l6wSI zHGwIJXU840IhC;$H+iJW8hR?#Mx9nX^ZT7|hmuvSqPk(CZdbh(Sm1n#o@ux)ul8RR z9gdD^esJ;xdP(=RhjzDPl;1>oN78<>) zPG`jI6F_>)(??ZVDeb=R36qEwld{@NtKaz^ z&U_5&wJxR;cvw6v*4;C%vn5q3mRCkn4G5mI8_Xyn0|I>X9uM?>`TbIKN_ zYG3Us?eUZBc&K?X<8U)*f;LxrBpH&H60qwi%h+{$<-zKC`2d_js59iuzO9_{i51MN zk_XW01;%z1zE`kK2eu#D&g?He1{+&m?<}6rKyp83P~|FSG6fRp$&6^DZ<7vvv9vMW zV&AF?k4#;Ynn#);F-Qh3Rn$0ax&leb4oaL5U=opch%4%{eq%OsXAP3H5@<#;^;5H^ zU3_79@!mpRT?VAI9l0REC#Ty#-0<$uu|p6QFKzyB?U*FT0wX%PaOiPHsJC(9 zyeZbZ7Cp>)D@+NeFVKT{1vYv2_U$%YfLh|uGn*{3Lz@*|QwiU#S=#RtuR?a29yMnG zCv$!=>r^g%%W@^zLet7u4sFp?-|Gs+`ymhTH3sP*Ib8L4tW0z38&5`DfNGQlhPetM z<=blY?oH*JEF`MqmKBNN!=g(Zkb>6IX*yg`%@AJ5dXszUDH5iv@E(9svtM0F_%)+= zMWL^}lLjIz(}fWD&iARl_rfpOJP~%+^Lo_X?_;m%Y9MW9Cj+Lvy2VrQZ@iz)fK{h+ zsQ|Q|;Ru-#)_YRyk~@ZMIYLWeM)Hb(gvircG*Nn`g=dO9yq9DwI{s+wYAowQ&0zS z2D{j+)pdCaLzRPbAikf*LAq_qmVB*b(;&;~&Lk7R z>bYoqe3#cXs5)+@mNoROhxs?u{2LWO+E8na6h+MsZ_$i^RD)m zR}=ci2QASwO7FuErj_%Ft|acg8{}axcvNhhk`hD-5c1W8=xA*6Fm<~?>m+HVvl01% zEX#kM>BJGukvy}jRx)NsdR=g~D9>DFh`dvmA10tmj-!pJcha(3ax)n(F4f_>c+qaF zizp94Oh2Tdm~dgjHuND9C6GYk&U3wEq#UVSd%BzkF7aR1wuCRT$u)|vbU2weF+f%a zY4uFwRh%jn8DygQl_*$+-4}!o0T)}&P@iqCPb3K<=%(qmFx;m$lqO0sJ8=*BSSo5w;+{)#UlB&C+*_#WyElxz zXEz2H@x27`fw5)avujUP726n<-0JY+J#8&r`+NIs@Auh)qm^P15!5`9oEmx9$DRAwV%Ag?*4(NLY)l1Ge=1FMpWvFeu&c}u56Yj$DJt0+}t zN0_1W(D;0hNYYH;_sO=Q`y+Pw!)(JfIcvyS1eKL&!}Tb}%kr&ih&G%q6gTBcS|jO~ zobXtvj0c?0(SnS(p7+DQ59d220pbHZJ0j0wGBO?T6h=Zb`24<=+yeEdS8Z%t*(D!Y zH{o;9bwLU@uKrUY>kynBMQ*5W6+<{^a^f4A3Gw!HfcpuMpB6&f1#OW}FNFZ$!^59Z zrnHT%>pNm;s-@~!kQ?j2!S9FZsW&!Pk--}$4XjO25Cg5|skb`_pM91{%pUtt9YgT0 zJa?ZO#v!`Zc>m|bU2*$geIHThdrDS9FCCTb80-xfDjFi7D%FC8B7KceF6Hx1)3vDX zRj!4<`iZb-*!|>0-24~LkiQ2KfE(|w zK!eSQjP*7AjcY26qJ*XHJOE4?UYdpq4|Ps)q!Hy!Qt*a_YhOO*J2bqqy)=UKN)CE3 zh&s#8S`(UI+;`0u>VbbC`j{BKos5YUvnSPVe=PH)70ef6SY3y!pJBvcb^e#n!@l}1 zD3Eb{vvhS_>Jz>nEAz$#|9<7*fs|T7hI$9+QmjN5sD1VZ4lf;5B9`{%amZDN1e6zA z$)E+Zz%l()Dz9EYH4;y?pHFrK;?~UhwM3os=mgz?b$r6qYLg?n$F{SZDMN5 zr6^~+&s7pF?X#~LjDR%~ui(>&S2=)ToC&XC4#TCyvqmg}R;$T_M%w4Nr_z_r-HAlw zVeD|BKQJO%0Qm7uN;sD8>@xZp?35*xVlv!0G1e{90?F{i1Dw8di5Lj0?LwGR4XO_Z zauXmV-_CwR_TkqDmAiySb#&Xm#Q1qhC)}?y%!V*&)oG zx_zL-!tRd<)WjbAK}q4-gbLy3mm=iOhbz3|rY|qy1ogCnw}4p(?1PsN-fMnq6dAmu6lVl(N(XYGKz)1*z9%O<-bQVduzw{ zIlNJMgr-(mxM5T1*q|{88abV!4WrTw2W-N;K7L)Gyj{+S1_c=Gn_e^W@bfaBhBoW@ zDP=gZ^G_u?4efS_dll*5A(kWMh&0e0=IJxo2h&Q1_z z{^UbdM@RLPXcfD24F{Cd^0 z^i^^6W6g%4dg1!aXvUB_kTKyeh0Y*gnARy4Tpc1oIhBonM&5|rMXm!250m63-!@v6 z(O8oEQhz^VdQ%FKjd!;d*)CMWP1RCA5$bpWEkS;6LE@-?lRD8}0jtutjmW<4Y)4g8 zAF_&rHzB~FS$JT86nLqIH=XN!eXu&Bi$KB>3Gi#Ik`AjeAfg&oNcauv4o&7dbO#F7_A;mf=p(WvBAOhKV$1Z_KgRxFL<15Mg7g;8U#-=c2~S zsp(E4V8#+TZk0cnYt`R!FD6F%D` zTe8&q~bUSBs)C9V4ChO&X}f9Y%bH-17eJRV*r*-0(*cO8u$2)fElo zrU7{>*f}%dM=jI&j3Y|%RRpeEEi&g1Sx)`Y8}z~bsg>+eLG8uT^g3NfDrWhzq+BmB zv(uK;OeBC(YV$5axJwT=(ODL4yjRtITnoWmw>s8zzeY`e2` zEZn>A(C&(s((}frMWYumd(b<#Mm#j7x;+L+$oJk;I&%bz#(DK9pG+pJBJ$cG3_kb; z`X{zZ{^LpM#gp&e^r*$MFbM|c29$Q!upG;V<(BO~Mk!XIkaLUkHgWfCipA2C(J*Me zZGUWNM#(E!ljIEj!$GP|J=pslrk}f0{*@zW$GNp+PgEr`^s~6AoYU-9@RrpagH_?g ztn@Z!bX(Y~Oj#6~>sfl7FiobR;yHQgma4bw(T{`k-K>J|(xM-H1Jqg45|`C?z@d=s z#mhewi1YNOoRxfhP&wYW#Rv7!wSpXpFZK!o?-|yIB^Y)jWU5vz;33$#ycqrcYZYzp zOIZZdYncMwtze^|uNDv4px)K)b%O^DPAb!sd`0GDiy7;nt>mrirC2W(KA81bANQXq z=%S5mF({M+7>tn>0C_R7J85$Utg}1UWd}^uFlcQw5(dBekSYBN``(dtHJVkk{RM#r zUsg+|Y+u|zLk9P(Eu)hF?ZP{Mj_%=#RDlgH`Jydja&-Qd*>cvL~m@cIaI7- z=}iW*u$P=Vg=WW+)JXC;OV7HGPbb0e+~y%{?1*au8{?bwmgRv~q~CEUr!c7pP=cGJ zRkfwsNHo#-?${qc;NFvurbMceN(yNXXQ3v*_#N#>60=@k8;+#1G+zID zl^QWWlFPs|%EzY$tmnJAi~$N|2whUi>V7c%K1ROO+@;YIRFF|h6WQxWD;x%jsH%MM zgzR*z>$7R5R9s4wAJ|>E00GRyvGyfaK~K|o35v>~;cE!x9qfYN=`B!&+l~KB%&-VzlB6B>t4+70lbtLu1To* zkELGFXegw+-$JAorspoC`2qIR^TQkejQcm!85Tuiar6o1VaKBr4$vQo;BOrtx$mM6 zfL?^{Zie?iU~zp8gFDmtMZlmW&INWWR=?Y7{k=y-#gm6ysT~ zBG~h`IORZav4HU7h~C7k7y+yH`q?l>VmPfc!1#%iUN5a#?I<))ak05{8)bjI_}OVy zM`e0vr?&JB^wDERlgQYfs|t0YDmq?IsL-`?REr5Pztp+s(8y5M%5iQ;YEAPl1I7YK z;w5l*bAy2hh3`}Y&3_V>4;J0ZCGe}*N6Z9+o9Xed&<=e^7J8PQXnZvTFz~v_R3f)T z;;J;lk{8ebvTr(A{1`kPgo=wE+#DDAx}%MZ!wb`V6O47FNLcaZHyJAa)XKzO{X$&p zL|pa2_91+&MP%4uV!3!rU~r-4+ywdy(29A-9Mg%^I!m5z%+NVgln{Y3WP&HklB$nz zFc{DBdSsr2NCk{Ovi^=$-!iU22EpM#_0PiY=o-adaKk76wWeS`;iE-?j?GdwIJv$+z8>4B?Ua4e~j@%dO#i4#L*LLZ_6P~NB zXrG4ROzcJpmJUuP|E$tuPp4?yr#eSsQZ&k0HF$YGLa{|jYh4sObHG5c!PIC zX9!e7XP|cINTQPM3~i>hXQhWjxklqQbGZj}!oqbMR1^z`NTEzl58!pgp6PqLdLFQpanB~->1{e{c}d=D(U6IYO3%Tjhs$jDVJK&5570yW7} zbcuACBvE?o+}DId^)zqM_x7}}O>M&z#+?A?o(LV}Q+amGg7!bH!p*@a<&`e>2hpIz zV_Fmo*4a)f%m`}3VwC++Fh7`Lk@7KS5$+mi?kAxqf8k#SIf>X?M~@$e*I=v2X;vPo z#pSm<#N(nluXfAjE4|nd2NR&VQh-aQ9h^^ zkRP6yJ#HYf&w7CbTvo!9v|zTs$s3!Hhw-eP#7ZKPm9}?Q7!y^IIYu>K1%;W5H|;Bi`}Vku6E;nLLj&x!rhWA?2y^G1o?9loRoq*xT(7A)9? z{3_$VavDCExxZOU#oc1G_O2}4H+X_lOQY3v;RO&A_P|=19HaV%qhz$St{H*z z!O`>!S>N=LbExwb4hJF(69*0C4yTQr5=8@4$#=5;mlaXCqQrq28Um7c#MDY(Caq4_ ze}mK))YbEyCSWw=-+a6r!BD7#-;rov#X{g5_~^-aTv!sFp3d)*sm7RLj5iwyaU^<% zi9K()9<|vYnT)&o9i$H%uzacA7TdbyT?WedTfpq@x7Di#V_f4&+hnz(^_5p=EHFwB z4wgiw~p{5eu{gZBXnccXCBhbV`p)CcM44L4CbR z%=JA_#GfJenLR0CwwN3QGZu9|P6#fSS|9o7isP9S45Ncmb)Q`Ay(8LF+rJ z_W*PeA{444ZJyxQubvqgiKWE#fX`@t5@m`R4Xwy~LFzexjEH!!Umz!>O}iS^EbkOh z-=h(j_ta{i(DLKda0i5~MnJs>b+33u!TwfdM+!-w_vbf@hjCGd&A*T&XGytE%Nfyp zHT`n)1vt&<@eQoU52ol1XW&16q;v53((&VqM7l0dmcxH&Mby4(;<4Pl?^ZqLgX20E z|I203UC*{6-NE1<1mthbK{<%?{=|(At}!@0jnL0;S)~S9pKv?v@@euJ^3ls2zY&j@ zEoH#_4Z<>LzWo6?t~-|?b%Ie)japJwM=xr2Rh{N4jXG^1$|>lYCvmxBhL4y*n~t~(f`8}6* z;SX&sGJM86M^?LnoX;Gm%?{yGIm?+cZZC!DfkQf2p6GS4Im;o`nZb_14Zaa+!bL%4 zQ_9q;;&V-^sTC;Q$dEDn<@$0D1GniC1n#4AtDH8(9Tv!>0@qeT&jCIG`3gfs5pA^e~bldIt#*S z--_h8FENT~qKQUZHXnfF+vwUfT0Gj<#^S2K5M!p6>FRmu?RrCkaT+YA`);9U+)S>A zwJ1jY1L0-qc?pS^uk+qB3 zdYGpds_DZs!*7m6);XVvVB7rbG{1iMm=pV~-hgiEKI48QOT_tj(}P~q+hIO$h|XIZ zxV!=GZwRoh{gCmyt!cZqhh)Z&@M8!F>PXZy_C@V?@pv4qCUM=kx)4Nby@xeR`G;?T{d7M!FG zBP-AIh`5Y8fBx0$5S^9APBW4w-k)${X8Cs2XKYkbSD-paFZ`$BfmO~;b*zebo{Y@N zBsKxX*G-1Gj`8arBjw0mqS9`%vAUq|alW16kwY}STqd_37PC5i`cM4|HTEyQJ`<>b zF%bjM<(C0G(~};;yQ(sVmq+snW{>63%)qc!L?+uxnIB-}U`Alt)r@*G^LYl=))==M z&x#AU9h4W5s(O!EhgVYhV_1$v^ssWYTU8$?C8I7?<=GDbAy+ZCE6Ux7J0)HfFizAv zJ_xk^FYLVr#R0(pAR;Vq?R&Msq?`7aM}P)#o5hFSzgA&Kw$4_=-Fy z8KAJJZ<`&~y)XiUe67>BvVBmqroJowg9z64IjAv|rW?~dbRPME1)&dtAtuwcSWV)8 zaIJy*8dmALb|mKp1C8bB6Y zNpZ^0X3=b^uvIO?ncb16ohu2H4I|q9f}Sp;Atz2}g=Y8IGo;+NHeEMNj}Jc|4;w@7 z8l?%wwA#Uq=q#bo=k%lQ|HKf#e62C?{h~7 zYA!BtfnkG-{xu04u6DB71Lfm?{8~NLQ$|f=b0nUPIcUw z&|^H%h%GM>`4r4ddr`C!yc~hbXY_-EfT=o`ccAcR;Dv{U>mah_5v7j(eM;2FX<85X zoTr5`?_38uCcI$d*a{RVfe&Bg{Vzp+%+x=;W(BZujUL2`LULxHCX=O;i?_vj?1n)- zN<|BcZ%n#%JOwf8&Z}%(@N*ulq*d{y!jmlhHtQr9I-s=*kBh6(qoBS62@P$93&7Mg8e5r)|f(uM_$E5`PSmbjRz1(#a)XVMthZfhy->GDCHyT$ahFz><9juvZ)I z#8beH91T3S@v` z5}ntAJ@<|rx|Ho=$K}2p5blgRIdpoS{|%pO_CtMO4xeXZ!el^g&8%UOycF=nE^i5+ zaws_i>o0xe=2d*XJ6Q%JPM`ulK&qMpA&5S>K(SzxOp-alWyb6_FjnQD9Cd3m1aNPL zUcs}joHezqkw2@U9E~qTbpfmDg7zqn1SS5Fc2vVuwvz>)EKoB(5X+3GGo*|h+NFa% z$N$f3Gr}17e^!w^tI|!_OKOW7Uu7;kSX!L9pW&AF0a@9Y2kE971;7L4agb~sCv8N& z)#*0^!~v;5?(uDzvV0!R59dq#@C1ueZyE^=H|i@Uh?(}u@n3*}H;@CmCRkc^61(kp zJkR*>fJ_r=`Es&}%?o`Yt`On1Jni&ze3p9$3M>B<>?|M_t*WUalo@|XNY<1W(tiKk z(DA2v=ak41h;6a%_(W^=W)Os6uuQ6H4s;_y&66WmwK(a`ZWn8jZmz#1mS%c#_l8 z{xtryLZpKpk_CsU?1pz}q($g?)|O6Id;582Yz46D=QglviUt!R5Whntf^7?qC7WRQ z(>&LBO^xLBIHqpWX^h&hFFR5Tyf%E`G!`hn*oixW-6t3WH?jg z%Nsr`9kA`qWua`Drq6e7{;3Y@@ln6e<=w(Z-}!s_7zV>;!#r@j{2psCFUN)lm4C+! z6Uw^h+8|a}rfHEg8XFt2kc5xBA5L119PjD^sW@0nx2=A2bbo(Nl`<7ZTThtiU%U>;#ASy{X)w;3DIr1%gg~N>;J;V#a3<<2@pEXng&c>up)J;{1HugUtVvKch@B0K6h(mp z9i3zIuvK`+Mlz(d+54lD*eH$z4;P-QL*|3dNuBSdQ0+lp8UaI2>=Tp=chuZls8#OZ z^UHiQi6;OnC-ydtciB)Fu}%S#?H&27US5;wwGda4Ahp2t%b+=c_xxN{LK;X86HOwE zL(}z11nT&?*t;Z10$v;DGCTS5CE~oN9A*;D*6wu=>fE~#2btkOMj~_Cps&vqhuT3$r?=hP7yS}yYcwy1@;g3uk^|6jc^~{NRw%M`?Gc4 z2I`sUi&~2^iPQAgYZ5nAY;_TUfDQN=d#Om!ues zbrN63#N8iwt+r~sU%*(OdgjQ>Hpha5l0vy3%o{7bo^Ke5hf6&Ap}a#EH?f1k5u4xm zs>fN#!7JV+@1QzJ7Z?=%V|vW=|K?Ckj!O=S8%Ua(jug26${2ryOX$8!Xsh%yj%~xa zSRu*V;o{!`B-*I=GxK*o6YhXdslcw6A4wSTS1$U+$W=~EYWG?33JDR^>z=d1UtODu zXA4w8bPAO{H}M2?Q6E=MV`hyqIv*^GZN|PuNkVaE(P~-2#R@(1SGwLl6QW}&8_h&}`0E5ZC-Ns3mMA!i~mM!n6@<)0P zp6SYW`i@Ne`0mcAVtee~CD4fc9ud%d?a~8P_9#Z9^>F_9b}S7ip!&;8*#alP5n}ku2pIyiO`BIkO$ z{b}n~l=+{)Kbn#hwKV7Ey{wB24Hi#JHqUWeSYw>WAC;b(4$0{M;>D*1Xe+?Y`VWC+ zsIGn1_kN>LS-OZtFV?kNoNLH3?|NqFD9Ei??o1`DNee_d*|=tN@Hsh$w1X>Lf#-ij z#^xeLdvBWG^b{udT{ziJ^~q}?ENs^sqo=c4Ox~`jua$Qi&np$)F#0)UGL@1sY2xyM z?bj76dDwuvHetc?@^PlYE7GSHHgo!s@J|99vf~+&&z10PSYLP2tBGOasz+3~as$sk zM${ppy96@}HpTx%1=7HZEJO+X-IelM5vQ1`BagFBbV@&Sk`$=$HsD76Xwi7HonK!m zH}~0s6^|Q^pzozKao&kN$i(h@*9GEW=^vFn7}VY*7q*cJ*w~K0xnNH$`I<*;QLP3W z)qENQAmiFMB#W^90mF)lGPSe~u8IbN9`i9#_pDfg2HlReI9eFZq(F{Gjy*gcf0Q8& za=0rRm80KME5)c$K0St2lRED4R%E6NcPj=AUTeV3?wk=NPGJ>X zOGt^Es7IE_Xm*O81U<#7U3D9;f72J1!I=i0lu3MTUGxKF$2sF4DnY$1CslOF<+J03iR!9 zS5t2l=aW4dIaAahA`Ek{Alti5*Bd>*k6kMI!Gp&{x%WozBo|Naw1VprC9o8yS8oVL zvwUz+xpo3s*s#!&;v-k_+aw8Q=1L;gO6eQrV z!&NwE9Vbre=q8!S9Cl%2DBtd1e(e#TNsMGM*5Y_Qp8lWM0Z%NDZ`Sm4pUIQ{*D)xX z?8BO~!FfI-={Fz`oj!z~L07TIu4cCk`_BL9!i^eJg*J*!XBw3U7aa_`BY2$dAslD# zYJM@@KKcw3y0?%`8?u-9OOt8va-FoJhwF{{xgaHX>tk>fiXFkfUY*4HxJarrq`ty6 zUTU|#ZE`46z0y%vn~6a9tcx`pscD>V(}#c3A`E$q-#sW#BtUN`^*8T?9EJ`5#swO+0SgztA;B|4Bu$xwAth1ya^Jn2h zp;|>RgX1C%+P;=pI`c>>-xL|nD)I|gl~ z;zyV&iHRSQ5l9vS&RdzIHh`7RV|t*zsUMl81Nac&dijK!n89gacL?h-bh94*AkINh zNJwO8mk#Fk2}0_6^m9y8!aP3w+*}6{gK3T)A!)>Bc_HD^W2Q&2n*aiDfZH^PVH1%< zlq+}w>kY?B;nv6#G9!4$$x8_?nzUG(@i<8B?9gCAYVD2ZNmX*|_{X~Ys*9=Tw;QK2 zn*?G2DsH!Sc2#wbHp2k}=Ju$8&jh>^{+VXbVMfc9vFZ@FDppOQjDBqUVjdegu4JOY zg3XP?%e9rN-?(ay8&7GG$O;4ne&A170(Bh>QQskHv1^((rHIe?ubBTsBl1*UW9q=f zTs~>^upY)~BgS2*$GBTs2>>4@tP?E;Qn)Jy4*JktCqu}@4n6_x4Dv-?+MFd_!*(3N zcXc1u`kkD3+tQTJxS}G>QXa#(rl|^PDL~ayokhjA+w3{tN%{EubwNjLpu7#lX|p&^)6G001yAz=;}eJx#V zas+WP4pPx#pDU9%M6yyVsacgQ#Ag#`#?T<&`EL)tT|OP+AiPsw)go_jFAba$Fq{ht zSnZvSm9CH`pJvNs0+Ur7B9Qto??&iHTQ&zR5NaV2yCLSE`G(&&?B(ByQ&77umQJJy zr7%1i8&|7H_XdCLiFE<>f+TAoB>YRq*(MyFRh#&b(>#JlLFV6FtBuFQ7TB$35 z-w~MOVFQ9#pfn^f!%f?tSIoO7Gu!(s)ul%qMzI2nebG3#o5Sz?7Bd5}PAkB+MY#3) zOUH;_<>F<5mGa6VgDWLZk*4S%mMqaa!-W_F~5G1|!by>Q7mKdg{ zyPRjl-St6*<~4ERrjNWSavccGfmB(%{A3R!xLM3C}Z0w0uw_K#==ykGkZjcM{Q_}P& zo!1%C2hS*b*A6-0V+jr4R$g~#!;`+7LZvOnFaDhcN2f!LPum|CB7;fkLUs1 z93g>~I2|>(Q2t+enpZ31;#NDy)%}Zwf@QHE_ zgn%_crr%Bh>GuG}~SyHxs*1^r`s(hURmSR{1zIY?vD#Thq+dfKRVhK zm+X8V_G{Xk!fPu)>&r^{_IbfBY_o2zcX5cd+h>xq9+J0hvZLgmZa|LL4`OhsLxGto zl+127=gxEP{{9o6P!~TRi1hy{P=_HApPww%BzA&j;_Uv0+s&=6e@>5+Nm!?Qw z!=(s0ajUx)t^3#tQ`%^^3hQ?nH6g|quXg*Xd&9*_hqwv_JU(^85Uwrsg=6%|j6h^b z<#99Twtw2}+~Ap_oHOs{mbgjs%FsrrFLusqJ^BWq7kBi@>8uF6ma2cXvSKntoouDjc$3e<9Rfb3 zGBY$!MfdY(X2EwFRc(NlwtSOW^>FBbTXU-fmd+?a2OFbRg!t7|mE{|j(M61Cw7Y;# zGeY#xUkoR$oImv51n`|n%^;bm>dFe6gcsrE5gb3ovJl?r$rh#*)=_5>RW|wFD}&Fu3vm>j$mF)C6a`1)2wMD{HyN$LM9?1#|!TftWb^S^_Cb& ze2ml}Bqg8J@cDKh!R-?DZk7bh0*u{?CEko@+s-eqsdtd;2cjH4p8af2KIJHsI2TdS zHf~gq(aWow@MCz>3cuEosv{Duu6cn)>mVv#q7EO_Yr4^!U(v}Rtk)q~O_3hf* zD)q<+KDJ?-_F}>;fKRs)$bDTZIy~}>h0<{oHC!A~70IbRmx*UJqk8K4Y=fiK*|&;Y zrtIBtCaWB83=A72b1jaSV#ZpV*}OQQUZc&H|Dxel!drRcS_MWv5tR2~OH3y?_UC$b znP!!m3UDCqpU4SuYOa0HbFOg77-&STf1Kry& z0Lymy>V3If;77JN`Fe){u?M0^(qYvhPxZ!=oi#L`_43M4f!m7tf1*pli?tjm>yg;~ ziQFuA#Z^t^oqZ2XmtdIl1k@z}S|Z&^Ec6X2DmIRwZ1ke|YV=on zQ-ttH6^vGRuRhM9K>YlOx30x^6#g(L6>H?Qu$B4<4HHfy#AI!mEUhkT_#+>MVup)s zNiLass(nV$s_*L|*zff%GY{B%9{s5HBxa#yPkCP#7U^e&DOzgXZr8v`{x19uD~hKY z22Z7#sv-t#4uZksS4#m0243Xq-{+Sa8;WYY=F24*tTVkwD!5_I)ON^D$1r0tD(=Yt z%A15rqRN{`v>ye32aatcyqd*v!F-l$Gl;!P%LvUOP)+INt&@cy?804EIxcMJT}vSN zg?*H_xz&(1V-mE$R`dhxhaI%xFtR9{uLR@AEG0lubyK0D4b*D#QQY+pG++^{~fDa!h zocsx)hN#QCUyt>iOcEA)=NDcaQc0J1*LQE1yc^6q>=(H+bYp9R$v%Tz#!b(Ld@m$+ zNn(X;x-k{xfk}#EZf$<}0f+gO)!4baVXSS>i)lk*#)Dis94hdA z^J=;7Ft+6!g&LH3vBZJpx`Zdg5dibgU;AY9WZS7t*u}A4LA(R)Vld5JtPSZCbn{fu z>Mo6*icFmRl=)K{zp;RNZ19tapfZSpiDaIgsbh^A)N5KBHduTpOF{hzu0wT)6~4KK zFU0wgn(X(L1MGcq&UAzm7bWCA1Q^;}t`oCkuK(a*9uwd)Dpa22@krTj2~>=K_mX?8 zwTT&KVsb61F{HBa=7we)Xbre8IeTxE%TJA;KR z_`0Ti9nrgI5lf}KBhX|S+enXLtyO;CJ9^p=t;flFy;Hu@c7U+nu6m&%OTRf^%EmWq z1!!^tkwbQ%z8M|Pp>xnF!>MWM$M(+fEhtNA(^kGmoE1hdj<0n)op71kY(rx}? zGr0bcdBZ6e21gd4mq>dPuSk?3m2%!!qZ?%5e($8PK9*Pd5hn`5K>9Wd)Y3sE@%@FO z>^oVPw|HGh99C*rZGKniJ?;jS7&5}TgxDd5H!ZwhuGCNu<1^X}aR{Ez$~Mdcon_a? z_)Bx}0GF<5vf4mz&Js+maU}0*v}sx!+)SEYOK%epg!Y-Q?5!^ZZ<;3&OQabRVCAfC zQo?{gf@1acNhgF@o%ugt>-*@+4}jkyW~k}%@a@f%9K|dDPu`>5 z>E0)I>hT?mMYHcq(?s&JpKV#BMmn;x$cS5TsP>2Q8q?nHX2l28*3oAf5p*%L=ZECB zodI}geNV*PEXH^VbD1Dx$ocHOqDbr3d!W-JWYUeWismRE8XbDxYb~aQ*s&}YE(cG? za@(wRD7Hpam{uNRKiv@6yD6KrXnAvzg!Z$2JEKwdLy&>@QEi zmeJwtooV&HWMeSB@?g`Gx4UorSWB(bLCKZfgD!4eUWM!)@?oa&abDyyy@V30m}$mI zNhBsVYzM>FjojTPyHnIIv6G)o7$?XzHq;~%n^K!D(g6ZHaD8bYXwlA2J$2KLJ78G; zjlhTx84EoEStXE2AW^V<)Y-j!A(OB?B*nq)p9bPQV{{~W4|5q=SXesa=tsb}(npG_ z2StvrdFBAfp{RLtcH4kHLSJ*9S-!fy9~j;lO@YW*xRvg2mHf zjp9Cn^({Jx*^y!4@qd7=T= z%s;DTJzi8~lddU050RK)5M~ib6i+)IUYqiH0sG$KkvtHv*G{<5ep)sBNcFdMN5w?j zqM4J6>h~Sg&!Bd#k`uX~7`FBYq6@1{LIaxrInx^H5%Xuk&iexP%Fa+cVK z^cUY>?RSr|S4f@SD&|Pf=@(z+h=SU2F?_@raVr90yY$UYVEFltjEH21_R5E|l&g&0 zuMI#B#iyhCw=|cW!fs^}XTR|9pPD?10m6MGt*Ek;wG(9<{t$K*ahIxVy+T3{v9Rse zGhJC{T4ah6lwU63$u5qBSM8`mc4&ZWjoW2qMBoyod%K}gGK>P@acG_hLZ(Zt;n_-VQ}c>gOlG95l5;}Yqq5R29w4ZLe2GH z34(N0p5d-(Y0ZW;_0S0e1DNDD>9Q~>G9alRq#Ig*O?taLmW5GO8le!PHk#qYO)`KQ zX2u zD|-uF7^7X+*8Eg0r=&V<3Z%e|anB!|xcWiNu6tN)6^Wq3DY?vAk4wAZrQFZEqPkDw z+~ZSl4x6>wIVaRK_5j(V*36qhHoQGih~e5`+3H;h^hP{?G+L z8b7tv&M`li#T2?sbw<*(pRpZ6>Ui9+jUFi)H>qIbVJT?WDfuuAOsgmI;<|iIMXct0 zHM*aae0_+dIm0^V4KlXZF z9$#d1Gw}XQZ-w~%=HcE`>Qo>kHM_93aIn&GWoda?#G?9v3H-J>_l_xMQ&mj3c8=JN zV#UZ>3qC16T~5R!Q2Og)Cre1YP^0!^>QW^4*oF6fq+dU|q{_aFY?NH|ebZUTWV9wi z!T(OKgx9jSwJlU-pmwl-E{*?G+Wcbm=rQ$Vs-gQF@U@h!Ew<~hmI9o5=1$K*?0ro) zvOm-LW&a3q2G@y5_Yk+Y8KIBlr6L3k9DJ1Hwz(|B+!>vKVJgEESZtPGQC3Q8TUF3;AIzTH@?W-4A;QZ~0@up|_@&&3WVW!rmL1;VvjAGNvACkQZY zG4(RYIN5GP^Oxb`3s}^6nSyogdt-C!;CNYqsO;5V*J_VpWEF-AK0-VF3KuNqf@K4C zXLW!gmqelF@%AvtRmaczQ79^6qBxHS9yz}89R@(&ZLlDsJ=u15c35BP>a{n$8fajlWFZk6tn(2u7MvqSS$N{cGJ}9{c zWn|B)Y4PKh7C;z75t|tkv(1xNe!P#TsqRP;of(r3&&Dn({^C;3_~_m8^zlV&QbYgl z^=F7)TulNs@C_^O@h3VzAe?(}Xmw5FR50N`wsEYE5?4SrD)w$~kETb*RZ#Ph%SwZA z(inG~*1MESreH6D%n#GGqI!fbn01sX>Ohvx!jgI|q8uo08v(8<zpW@qo50?D=bVTDk+I!ZjC~cq^x|3n*ZJhc) z`1kuc+xpwgJNB4RP$lq|AZZRK%rfPA3>sXxtZ?5R);d{1qbJreRNCW^;0}1^_=6AR zX&;Hkn7?E?$+h*r_HbGh0utd^(oyD17Z;%f{(*2jD$*Q`8vxYK;UN`%+hA8*q>szN zvVwcw7sUu&nAu=WSs?%Pv}09F zCzxlg-gBHdw=ROISul~f(+oGETq%d@j6BZY7^vwbt3{=8fzp-X6qEB=mVHy@)C>(6 z2!eqCpvA*!V)(s)gmz13KkZp3w|JlV%Py>4DCGiyy&qVi8WhLE2lt=smOXxHaeT|l zvPu8uLI^k`i`M!%kr<-PDyC-clT^jn&uO3aA=Uoh8=0jCM40pdUU+0|3u(yo6$;W( zNO$h&`sKX@1P+s*QKLn@zmCBp_Oj52RL>Q&1wm5zsYeolq0FF=(RZX0)eo?@e{*{@ znq`!^;Mew76X*W`vmiVQdL(pq;|Wzb>ggM6DDV|NKI^_NBuWYb@I(rVd)v(oFnWRf ztMKh9kFE>d@Z9&47c1<_){GEoQ9HlYBh7@`opy}Q*odd`PltFM+g|4*bmYZ7PUe8E@0~F|q8T89 znG+jJ%Lz%=36Ybil%j|8CsnZqXlFlgPfLv?MU{4u{5i7xIHjzGr+{3tOF?b=G0~5H zUzwr`vTF1uU2M^3T$=yi4IB@HIb|NBn__6{v>THmhy*==e&=jCr6=*PnUH1|j2HA< zYt#=;FW<-bndk+#;ipZm|2Xo~33m&i;s4@gr@O_x_O#P;&w-Q^x|Meh3bQx)8AjX$ z`sucGb0?Q`Kj8uXvW=9BAOmqxFm}fkO72jsFz5B~LIpj>XC?3FH2+wNdfyfzdsG=5 zY`#mBFPF%1Q`$pg>&J~1gT-&&89>?VBtg;7@^|^pY@qIeGJc7!( z*8}g{KJBmnD)CC;pQ@v9-S1%8JRqRRmsH5}U#;`0-x>Ugk~HmFSii4rOcO7t|ElI} zA>JK8Y|OPJj6aEUr)xGL9FEwBa;8tn`?UeT6#K2!{T30K^MiE@Nb{+4`v%Dyn#qx? zT+ox%JsfqdZaDwr`-o>)?Jw+y31-`ITxG9NemteF)wTaU+-kbUqS!&PjN$JnT4t5p ztECm!E~e7@W}2FcltC_${qn~P3L^6=i~|9 z%Nw}nVc5`1eOj=Xl(IRO?TiMYM5UB8u{=2Kv2;`>79I@Cv-lNV1LXLy_+=KqA+DJU znu|yBc+tgsVtKa~^YW%-B5mM}OodT7G%XL~b+Yfvv>NO%_ei1A8-XWBW|Hs_r3&G{ z?Elj>>Nrp3vDtY?aUr{Fi+#GYhLez|dJ>nQyPOq-3() zVqiZk!qKYw;kmm-lbfgdckneDi^s4&YBKSsAE&T|V*d>lK=$`R5hK0t-*FGBzm~bo zkB9HR&V6_4gV~%2Fd^adYz_cPK(@aj3t(+C@*UVFl2!@dHzE z@0EqkHr0OJ#5Er9M~uspmv(iFbO6U#Yx=8JP|&f*;rQESp{b;iN0-E9NW^Uz`clT8!xseQcX=(qxzjOB4|=i`*bNiAcx=b+ zz+e<)G}2DE#>`YHDl&`a0aqZ0Q6DBV&mN9jA=;u{Y+|_|vTR&|4L4YVO}zXt6{pAB z;uE`BR?lRDt6+-@GK7{V+J>Q^)*<9y{s-2Dnfq`c756X6Hz9K?xE>g&^Pav(W>SIi zEV|GF(>}tfRi|nuuISa=%~+L)@o{Upj{JG+@&)ZWRDVHhp94#11XlKx5muuui5jRr z*I1x|u`DFj?6YHz?eL#_P@lICNE3z2aIFM-H|w(7E^SaKo6jaNT4k67?7FwD-h65^ zxSgzwo8LJaqYZ{`IF&bxT=ym`@n}C6i(BL-0D)I@%I85GZka4&>>R=TyTf4=;Sy4@Z#tPb2$jQnDjY_=*1%l1qqa*;z$wUv*Y;g6wvW1h{ED z8gNuLO`R+LP>fJY*=m9KWQC?!XaG?DwEBsY~FT3?k8#x`u!l( zLc;J6-C1NV0Hurq1o;!c4m-9>yiNo0$kj7Vq%VgXMwl|~S7?)aDS|CK?K9;a9QQ;N z8AJ=>V6fBFvb;i`94A>km5I?wPLokzrc&PJwjR;LCGVLiHC zzSAAWz9DjOmjcGgK2Q^gnESE9@t!sKGb=dD1(M&P%ggzXHJHXp)v`SO2RJD!kS0R+ zf3H?cQTIP}5@y0G^vo0vQL5Dz*W_>>f?gX|+_< z7||1V-2B(Ec!J#4@I=-XbRvgYoNdlXdHRn zTwte8`2H~u zEnQ|h6{8~_?JJA3=@_s7dTsd>(zqQCW+WsE36@)-OG&n{4RQf@zbI_h>g?FKND}2dzsc(fk%1L~ zFtYEnA(v@pCh`?0cq7ZlW`+V9&}A5XCjG9j0IRCy_ei&|*Za?fyV4gaL`O9i6z_HfXMaonK%)7E;OyNxe! zUdH^d2GuIpRpcOi;h_YEXZD1X`DI$_`rIv@joNN_dR+&}PhN~$#?bq!j_BE1ZR^wEQ%kUKX_aqm?ru}yZO(vBLT z(;_lmwGsLM*7%4MICE57_CQr#aFD<^0;?!W$o*NBi{L|7isIkyb_tEgRQ*v`1F-T^ z6KaIHr%1*qh?brmOI(uK{ryI_?5((h@$Nz&YNJ0V=Z?6-fq0r02Xri$#{5cGu0}Q8 zC<8@A-@v*M)~8Q{oxDtts%xa2_h3sDlC;w-aQp8yE2P+YFl}_aqc2NdqfmXW7axP5o zu@3d#F3A<53}P0m+eFTH)_-NG-~=rzRnwTc>6M1%PJQI27R|_Umodr_jJ(}H>;Wlf zonc#7KJjUWY~P6XN#cCHwm?`5v;OkfT|9Gd`k^5bKoh#5)izFznE z32s6W*x!`L6wrNwnJ5Fe7J(-VW8aH%j#H#VHtOnyB{YtKSUTRP#!D1V6YH`5R*miU zXQGAZGj?-*#q49Zhcw&kOP3eb8oKobFTD$j%UtqQv~KOjxu&{`XeGDsO;d9*El5 z;F&xmCl$S_mCWoa>8CI*@FuPBDHZn+Xiow+Z+u9Se1y~3NHP7uT2m=%NN>}N&fD;? z4Drwh*I&Lu)U}&~Ui&_e?=chG(@&Fwtk?-WOirwtA&eO1Dy~9Cx&ot+`yD0@yhcvA zs<^9IWLJEPKb&UPXg#Wiy^Y7RQCI-O-!MwCT;*H^&wU(fc?6kOVt%c_-1%Iuxr(wx zmN%`Yw_A7ZJ+C@V&YaAa%Y>~~6-O@W3eG)AFHl9&#z3DOF$A;oPWxaQR;$=z`JW;iXB<78L#3V(3)u3QP%O0sbO(OWhMW&Dg3-z=?H; z9Pw*$+Yo01z3G+Z72SCB4Q9xLPY39kkmCUagH?K9eZNcK7JMYqc$jhEcIMOM`4Vi9 zNHpe-7g*YTE#K>y?9JL-bJ%!Z?bJ|+MeDT_YWL`1KhV>t7zQ@#-r(0XUi#11@)3m!gnJJr+=ucMcq!2AL|# z;u(D*Smx!0Ie|PCaMAjmNbXfq3v{a7I-1R|h9ZStCWpFBP?pMS)3c05<_99GNGX&> z19?3}x0B^d;|Vmr+kMs_9YV7P^Dvj=E0`5M%n%Cj2z8PoZW1q3uPBVBl_LBqxS*MF z>00@I>k3bg>9P!OA8&UUz0OtrFP``=H5l8rkH&a%&v3`)iKMmtlPhc_@-CYB(7G4- zq+}ah0+|*%o5z&}=gXEu+KVK0Gz8No`>_d;xqOSmMtBH~B#i2xbk8BFeEugu2S+*f z<|K6qS^?98_^V)fc@o4aQk*~E($F!$XAtfZxWtO=kj?+(WSG5=`cZ+JJ6khs)rw4- znHb6Jl~7G=tDzW*CqH1uAd9yd;Y6xJ5(#0kTSx;S=MyA&vEN1wl}RompFqsf=M0*7 z$e1)1y+?DL`>|QdZD&7HVSg5tc-3V2arZ!|ThH^;G3)JlBpeKoYnHm%)vJwq8K^bXpS3Ok8`bpIuo3j3OrV_1iz$}%x9}xdLSca2!zHO5$ z`!aAC@q0^R1G};wanDyQK(Bpb%Q824gJtL919ud1wa}Vv7Z>o-y3*f+YbVW&_H% zAQpG;yd${nU}32iV34$DruzX8Vgp~I-m~#>U?oZC?UHAb5b~_*J8wUR{No!#J0($! zsi0ODj%%;vzXP2~yY*fpU~B`=2BC744eojo7OK(prauVxH5920}ouCkr~TpoMvhhyOwY*99GYds*?UxaPn zL?{+D!hqtHO=dhE;SlP?7=;RWyuaQt2j$Ytl&{1Mj8)9*-&RXcO?R>yMMgyL+hYX|&rR?>BundonDI^n47zH2P2)ZR zulF~wzIXd6GMTZE_TzY>8fEfr`Qs%hmomFu((Ae*O^Aw?5#gBv3*3eVG~i;mCJOn5 zSXz7{Ppj$fx#!yEg-q!j1bmCAQQFEKmD>^E3nGLb0H;!jW_)1TL3`RW9EnpeXDq6X)}b&e7*Xx3=pr|=6YPR0UY&J1R9Sw zjiX_m0%l?8ke3}!E|FNg9>9LiPD&>PDsc!5YvL?2`ulsV@G!Ev-4gj{$D^$>ZKtbmsYGwq9swpg>1B()Xj^zQ18Us^dTwl`}APBU~V;P4TbMK$PcA+NGeu4CPKr8D9 z=rXIbA2-y>w(u84jA;E^)vRdc7^pbT-y*>+PLB(%^LsuM>RDOqRQE2x2_}SH1Zdw~ z9CEH>@!w{q`|%2ysfG4!Oy4P--+nN0sw4IP0*G+#RH)A(n0J7AG_u=K*$?^XqGgxl zZh}xyxj&bm+$?v!bZDQDWFKU%d%rPTTtvoFV3439*cE;U0Y9;&7_>48%Q#?~yO}Upe{#M7qxNMl z3-ty_%%CF)$v(%NUs1;CGDhb^V~W;xfhzc z!={-w0%{hcrczRvw`FYDEfd&zTS5++Q+>t%3H`Hr-g~Dk0)hUzTP=e35KcTj3L|G_ z%#5cg-p9g70_V*veh3iMaTK}Q-R!4>BWjXZ?$pqfL~%rj?Yed-_z z#dYPcOJoMz>SCyOdZe17t*e6=c6oX6uQf+rv2aZm!2rsc*ac!L;T6}=cY8sHqqip6cCu#`VuBHi3vKuV5jba%2Qt3q^9!Y_2_*1&ibBGMNF%>-Yft=Ce=p(q*&nJPP1W2-EC)da+(p8cgg{F7-69fe+>40X%a>>*c#sE zUs=SElrve7XP!-J@*weqF%$Q!pjr~J8yib&%_8gw4PRg>~X4voz6=PN~(PPA8DAl`8-`d_L4jV3CtB;eP( z?nE;Wi$8F%Ec-4&<0GEG2^L;_!z@_3UC+aQa}<@x-^3u3)w_Mku1R7 ziO1CgVv#wz=VA0k3SW%&0jWa)l-K!Y^A(jbwvM~T37Z&WO5sL`1qrZ#*8ED3_oQVJhF zR)Jg2hrrd`lyviR>lr1clQEfjf1zY;5@>B>aGM`gj+wMK5a!@?svTW*sL9%4O#|%u zAQnyC+lB}nj)odzP1g{nx~Iu-t}HAw<631q`2)8Tal}HBT}&EZ#3_vXj#JP)oFYx#D*!neh$=x03^?Pp|43%BZmvO0?8ih~Yc>kcyf zvE0!2(7{|@Jk*NyYWm7E4BIcZ`uT)(v%FMQCi(&g1RI1{UMK*6mw zbZnx)H7&e#N$_mPFwjRu^_@RtQ*?(jOia^u&H2!p;CKAnkPN}_EvJx8v zavpq^V&Qx6V^E_U45jfFm{2bVC(~khp)5a#)>uqIXMF)v5ve-}W^o7(VFH;+O(j$w zD+3yocGT5#^9z7T5GHBOp4>EXE|kCdq-Q?LsC(|2V`P@dp6$B0muNt*O$R~L@fCH8 zhnB~`JPH%^?G4hig))C)B_Ggv7*;z#zu&EaABCgu(sP3WMH!ob2oR%z!0#%&t2Fs`Bw@Y`FYUc#VsnUNtI&~ zMI8obwbSSuK_u{Hbex%Nz(ZwXZ;29S# zxE`>aiTkz_c${H_k1{ppT*{>K`jSa?Ya6Kqe53P*0($NeTU_+(jw+DXV|MhszhL-N zTye`hpXf32ZEZc z`{IWgnqi8%&afsXBBYQRo;mefy3O{Vr$V18+eaXc>XJ|mutyPG`{EPzghY|O*EI(q zJtjuhg;YDo=DzNC$=@#z*7>J5_7YSKk%TQymUL-Vw>CV+8p!O&Cq-c>fppek+BO^X zQfAHac$Wy>j}X%Jct^SwAU$b>jAyCr@&H$U_wd?4XL3@8%|n}>ys>49Mt%#{?_T>w z(3#9!q-*u6M_r!8n+Te*+%c8ZQVhgc5ilGXUt+eddZux3{+DX^n!Z#H2{n>D`zmR6 za0lK5?LHQ1i(PCJ^CPGyX2gEA4f4JRC^-3ByOI5iu6NRwypr z#xGymYaVU>eB%2861S8=Z2bF z0!jfn+!%^KjarY}jP$|m5!lQ?{Tlu*P7!Q2Q!w4|$8tChK7{#}e5_00^6OFE@vXvC zq~i!-ANb;!DJ?NK`6`PCf{>pui@3<9P)9m%@*|!GR38b7l*&Lx`cIz14xB;tQwJ=| z^gR$oXx>4!?P1?bDHxhA2{;yK4$yTk2fOq(D&lDb^v-?DW=tItHX)Jyu^)~H&Ic3v z?C=4!POLJWjww9z0B15Wf9W7Y+`Ui-hyQ%_SV2D4a(=%h8E+_(^Y@sT&hs>{xY=q3 z%d`(EaDPO1zyzmXSaY61_RKqe0kH20r4u2YpPVgXahC`E&Bk^&`2UiYY1Db80x}0O zu+a?U*!xGov{?bMqw`jDp)L#;_v7X&fxZ;;tZ0KxkJ*v+le6}!O%{>cWezFp+4kIV zCRb5@n?sCoXoe-TW207<^|Oy?mM8=XxlbE`5%D>^tKn?+IuHy_U45;gRSpkD7)*el z{&HB8gRxBOv=RV0M+smL@5jh*;qNj(`7|w=T4Q^Z;ZE8-fcO1{EqvMz(Hr9VN7#0~ zGK$9ZbRq)mRb}{n?+W1@cQ%11v=ruS&JN6FW8-={D9}XDPmxWXw(8}R+s$X$PK$~8 zm4y0bN6*q~{K@k)Eg!|reQ%Bh6@VmFlJQggj9EmGSTIHAiH$_9qEQ_XD-=P1R#dc}4T=^z-BSU3#RM^t8$jr_622g_#-3l?y|LufU z>}DoPBp23S2okFWd^TT6465@#e9ihz8e14f)Ji+}rk^Lkd=i_@9jBFY1ux~P5-pzE znfQFG5bFGSrP)wko|1Rtk)^aU7?H<|Q9p*kwlP+i!dg6%gP@>@mHM>MuGK_(?L2KC zEP~k*C2`J7cTHon3#>5*9;sPq;_yHY1Wevq7XBT~Adgz!qt6$j69a<{{T1p9K9YCx zk#`6u)>3$YV>N{^)7jmhsjLK1!BMlsK0mP~Jc)5m==oTEkrJJDK0B?S%yi@)0wwVi zR>{QXJ{72V}~ABO(|Ep$Kl` z2(k7vl$LEm+@qc4DU38?0$K`uZAH%NULO4;b{^bsCo$JBqZHKO5A+ko?@s}x{wY+A zkSd-2qU&HGfMDUt@6)@_3<~d>lzPPW5i9+b;j@l!Cy((Oc8OA zVTFNjh?Km&?07?p&DtoBD`n{tfgsKBi(`9WImEC7qh}G6Ez@f2-HOahi`o|~%8IbB z=q><-t0-hJV{wZYl{*!~>!?grd=O=Z5s46=p#Rzuvq3S$**dJ>%lL1w&0wE~%6F$P z>WdhLT_$24x3t^_C35WEi9tE%<~YU7vUEb@ye^cjjtQ{8(fyzYztF11XnCI{MPXC~ z>P0EJLJ($>X<=bvav>S%flc3qsB&9=QZS%EN1fk}c7ec`1H)m&daZwc>!$v;Pu+p# znZ=gu8a`cU8@J~1I`arI=9`7bg@D7-s-U^9#O9cOG|D4{Z_sozJtG`)3T?8xezjY_=J+(^8@EBbq>S@@4t1b5qov}euE+aIV=ata2xI%}xqYz5tJl*` zmYwozQb5l9Y`XvONbUt>j}T3;)7T$f8(?7Tcd(?RL#Ih0`0#DjiG!EjZbXi8+W;_?N+(jek7zxXhq?~7&@okm_TNW#+D~*TL=iirpdrj8_ z_$Q0RQjsxv)OVEYF<4n&osmyhJP!`-C(WArUsoIH94u|;x1+@|NgAQvn>Qv=cKFLF zGg4%Sv$!<;p;w~W|9-LpGP~@KK5JASWFo228l5G&xVbFJAF*z#&;^r^K0RTz0LiKi zmwX8DB$>A_tB^xmaO{xOU14%PF5@qLZ7%AAA0Z1DS-TxE9kc_i+S3dzR+E-?Qzc2Q zQF;!*`H|Y5qfaQ>#)dDK`T&NKs6}wz7^8n3dG&K1S34Mae!9WOtq2Gi? zH2pGt(8P1DZei)Zs6_9q`ucdkgPf6}m@Nx5{o^CdJR94FqA+Tib&vIl%oe_-J)1-? zW*HGgTwil12X*$_RBH};%O1{~s_sc~zWtrQ;%>o<*)e_UvGy_TUOf`}$1#?XH&f0Jz_x$u7uoVg^`Ocp#YWAT)Y$(@m@iA9ha z6VhlnN2X#EDj{)bm2Xc%QnB02xQ6t$LYjqU@-xiO{(LNu+HA!1>^rR4`$JrcWm;_F z^F%FPH!~Z4KnGngZE39c*iB#*M}>eBb)n$=Cs)peQ4EE?>H$SCoXe_b`hd!PG<@bK z*4HY<-*a=osY%C7mTxeFjVhMP)t75?W2AM?$H0IR z6%Q)x5lvzm_ugy+aZ3K6JrV(B*{G?suO+C>Vs-_ULIuG(`on1A`phI?j{~!eL zmy<wx`hGPm~9H&gy%G_+)Oy^7zP-bkPZrg)#WFST2}D>g4gOIG6Ll+*={awNJv6HrW!S ziUWI;G(ztoSG3v5Mc{_oA0#F2YE)jfX8LUW@mSjg|5}aYf|hzJCDl8lC+Cn!r(sYH zkaM;uk>;?KyPQb6VoA9@|7~Yn@qJW-*sQxx%R$8r(xWDxu6ZOmWs|B%H!+EYy0~!L z7>_{1v3%+aEVOWM{dRlMFZ-*E{~Yv)es}MY?Ccq*{;WqnSZKIqiw%J~nQMhQ^f@=)rPkKTK_2hb zASc>c!iQ^Mqs-+~6%^nHJ>h$%jmGpOs6C6Y@nzrM|6)h@JKn;u+_0FQfP3no_S*1< zyaW2JsgRHCln!nF*ty8_Tc~iai*9{g9e=8jpclv>3xn&vDg#D0!U#_+!+E}Y!8W*% ze04sqxogaNe%{&#dKY$JiSt+veE7Nr5Jkowf`pgQlKWpn6y!)o(TB9HM4$SgSAw25 zD8tKME3GaujLD;d&=EwyD5NuOrY*uvc3g20^vA)c1n{5?C!_Z=c4WEe5}t~5+@oLB zvA~N9a0)GBUox&3xhr-rx?a@>*)WjcxSH*wt}9xVL{Z>N#f0U$$qN7VfUeMn+q~$; zbR&0#^biWvvE}l6u`{O_U3k;Xwd#y3_?uR$U;h9RkH?Cos`4J>5Yz4;@jB*aBAL1u zOTh>^^0ZyXc;Pxm6L>e5y^)G(vNdv|aW&Y!Pr{OdFuuU^*VVTPN&UM=8jD>i6S1r? z0tRi^8ZNi`JG^(nR&An3%7%mc3wepx0h%n4b9|Y?Cq_i}2lRlOw@1$D9@0+ADIiMK znE8G+Z$AB$i0?`f$Yac?Ti7gI4;5AhPM)>%K*a$9Z1@T9be@->0PMmyG*^Vo=of7+~Z7>Na3iKX`Ni%;M=~S=R(C`K*&*PNX zm2DEVy)9^|vkuB^d+*g@?rD?X$EN&{s!9CIJWF>(pXQPL}R^=fAqSEM@XP5Z&HZ6OvYe zMbr8DQmmr-@~on?y4{ey0rT#WNeCdZ6WKcbLS(o@v9)k*C##nie%~DZ0yN+$)N?Z- zZrM%$nK3UP_^jux6sW)o)y*lCD?XeS$ncY{HdHlI8@rAnRuP;1i?Kt9-QPWl%r7pP za;NHV%)68do6;pI`wn5xyj$)81LXbvZxt3#n1?+oG zTmD%Y_6|%M0wYUV#0zf z@>i*|!4An41C{z3tml;0adp}y%VmhxkZ=k-jgbHXNd+(g-<54VoeN9Rq z+7$Z5Q__;l!atuHn+k=iEl!8S4{K6efT&5>ss28I)M@FyNxR!|_0mcM{P*@LL25F;5RgC)Ju*uyfYup7y&hgj&4j|r%L~#%?RGwLQ@Xc!#-dQ$IVi-+JEVVUwjWQf zQ>-+f<>iuXBV$oF@p({NR>LuaZTUS)R$xFJ!lgaJ{8AS%BWJ)|(d!x1>%{9H)^UPs zjL=;q(wvh$Ja$mxsNY+x>c1Pow>=ooGO8TwF^Z}DTKTfK;QxTS)?ApWSL6wuQ}^Y@ zJdP@zN9!x+^66@0cwl4?uA(!Y_1~_KnfZtmUM)9fHN5Otd`_)%58d;F!dWP z5pA+n#_kTkDd|gaL!0a*iZVW8K5S*1PllB+!P6V@%&<$|E zcCdRe6T;Jab7}S?dO;S`cVPg`Z6(6h!0{PMW(J87bw6xR&ViI0|AGpJJD8j@?fr0k zkt-Po^^I%hso7dH#d}>Q>HNOG<0^^+@{;RcF83LEon6N#{9 zTw8di?jdFSsh`ZcNFCQ`s%v75(0~`NfI<)d!ET?JAXDY?qt>b1QGSVD?1<(km~7%6 z=3j3Dl>=4jTn?6TQ=(qY1ov@FGqD1AqJ}l1^bDs8hX$A$0@!8mw4uDAD=RUkKd~qq zn}l{slZbdRB^6OjE~+`kX~^;-_J?A_UKw@&QeT_dBrI>HHMz)uMtdjil%lJzlp1W| zr%~#{wQ?7k!Qd#bY$Y2MpB%P`Ken3=Y66+c!&*%XBY{|M^V)6Uze7I?){H#~l23p> z&j12Kqa77e>Jugl%5N?-jEa|F&Ruhbir#&``-?JPVMONr0ZKopm&V|RRkwr|Z`H#W z2x3|>`Uz@bpMoULkK(Mgv+spwWg)WM4F;~v%KtofRS;$fQZ*jQ}|usjUfj3PYo-Ku+bhRil?57xco+2J`bB92KqgG1&bx=mUFRYQd@D?WL zV?rY~SIp4jSN4i1=da5D=m{-iFgT=>XSC#AOdr~{y{oK`@#Ub;%s?{N5e$GoGzGU7k$Aakm2nZ&RknoHjr@$AjHFWyrQSJv3{Z zfEv}yjshN{Mm3>v(K=v@UvkaE(aB%Bt#08lEfSqpeud0fo0JFp!{rOdSz?o4xm~7C z+k=wSX{0RTyucDg1i8VoI`-*QUfbw2T~m?$NVG9e$K5CdOfsR%Byv)D;zFsBEno_p z$?h}(LwgfQScxd(dbS?UWyB3zh4h7VnP=7%H(LXLOLa8}ySZv=W5E_py7ZFe9Ic4r z)qbmgq)5t9r+HiaXbNNeGJEv`081`LZ}gi>%|{v(A~c)?;~=*=9XD=qgMNZPD{QeT z>FgU8m(;Hl0$o1L7Tsb86y9mrI;M@%#lz2xiW5RiiJHYq4~6=Z5RY)3V|XsgM9)$H z`U;fVz`gCt-J}zzg)nSLktHqL%YFKGF7AKXy$)Ono<0zQP-p*(@NX4^vNJc%I-JWN zWdSEv<9f7$i((>QIqgzLc-&PQcMLJhoKj`jtF*O$Sg(9nqR+t-d<5}`A@mrU90Q4# zSAlRnOn*JKyjmN$4kB_eSkvZVQ_I7R*@Hdl5P^w1g$Ez4Xspq!?hrZ8#SY&NR>u4p4C4D|IkYR>p)Owxv3KRlco51F(T1%@40ebLjY5FOu8{|z=4BeGi5|;S5-j#W%>7#bZ%srnI8)k zbg;$h01AYjJFGtUhmyxZ6Cr#~qA-M^WSO4d`~rdKF0>^~P?&aEvOZs+sp7amaJ(yXzaKUZKdcW3&rWroi}sOl7TP02Kno z0EE-EDjs3LQ6in=Xq72d`LnH`4HWGkcz+A5vJ%AZ?s>Cd(=&`9(|}!>ePW4`8{pn- zPl>A-wdv7pP_o#>979DZa+u`T<%QMrDn&ACx&}ajY%`a9UM+NSMc3*uq#Pr!P@NK^ zeo_55qUc#n6gGqQmWN0Kdgpn2Oxj~0t9&X%p1f$VWMafDgQ$AKi0k=?M zp4UoD^mC>0%UmLx!5H;b_-!rGqB&4jU%sSj%pxoldJ|Kmhw>;%aI}#dTcoCmBgi_+ z+e$l{=+=+qcl?p{q5ce;IVTewBdy+1{n3OT?bs$yMEDrEL9h-9Z;BGgecTCAUx8ur zx$pDvH-ZWf+_O|^`6YFAb*?qF{Kv%*Ihd&7;Z-+h1WDJRdK_3h;4@&=R$Lp4?>7)?xqu@L z9nGlyEIA=7Hkh=3;tc^UwvvAV=cncW2k#fbiVGIR>3{3e8{MX9VflE(=tr^^?o?E0 zyJ~>7{<8`UWr>a4Ingf$1K zAiOqZ3jQ!8-kO~M$>WcAU_E974BOLReQHR)N{X)uU~Z}Ph!R2YuY84 zuSTN~Jnz$x5qwt2zcvS+nb+N6+vQ+&%0t9XsaF+p{pHTW!($6i1}S5AW-uuxTS|*# z-dTu+r_tQU?H|K&-?mT@nU9}&98|2S_w=mPRStJv0Hl^AiJL_vPSOdpGBKog+ zsVWNQOxRuPsrh}=-yF#kl1okC@oz|JmZ4;|?6X!PkBQ`OLMX&04|F5M>;ElNLv#B&6}v8$`j1)@eA{AA-Y}>1`n)3u>Q>H=x8K0H4cB*s|ZW54Y+;9 zvAvDNXHTgu`HnZ;F&KS|d#)~+>6q-9%ZSPX;9NVX6$)2~8mt-F+5dHA9djwNavMvju) zo^Wv^MS5h%ktNxk@P8fDP0jdYLy9>7BE##QrsseThDu2a4M(nWOF*D@|6);4w1l5;U3EzP^aP`je-|*&gvd z{Byi}FK3$DyN(!@G+ zrsNY(v(MSa^~m0elY`!n&T98S;P$moe>-Cd0w8VN9JK!TRKMex9+8~;3+xy!an%}Z zrez+sXaDdzkSYZYB81}IH=-_s=Awg_^y^v4%U)sP@k7AsIU8M65s`m$b|a=?c1l-O zO{cCws5oXgSj(q|6gXn%)7U{fEr@DuMRRP4WW|h@#;19obKQib;?(kX*NN~om)JBL zpYm|`>Qvu>5wTYyhHSw884YrYX$X>bAqccy7uymB@KnpTATIYZ%xO7BP|KOwdh)T= zBT7!p!6awd`3|`xl(#E&H(E3}OV!yX8I`S$Pb-2 z0AEh6c})~9!7&&{H36%QKq(t0$To=OP<7j|u149-1|x(#d99@g#29&ADq39Ht`A)K zhvvHt^t+YfR5t0zr}sy_^(Da4tAvcFMz4ti(&(f#8le5Sb~_1WvU?F3PdYa?-zeen z<eofAuo)bpNE8no1J!{&lGnt*eqe40$%~P}Hjem5T@c~? zxhr|h%>k2cBmI^T-O;xT)}eI0;oYR#dUwW0v^?aE>CW*1aQcWn*JP0qC zIg#=4#h_OUY$4@Q_PI~5cifxOY_Y-E_J9m5VI=$~CEwObVhx&WE`eKscGh7Q#K;$a zmvS|Z>uV=WorPAQ#6$_t?K*^{XU8#Z9_gfPz@i=d{!RHK^gwT0>=8I2%2&tSw(#Y-@?zAF#E8rZAJCy5^U_0}iq;9B&%~ z0=p)VYMriFG)|G?p79nLc?Lk)xVox>kF-$cwG8JG4P1JjL{N>r;&6d~_;~=V06##$ zzi(4caFnJiP^~tG0wNViqs)f`J~cIwTNAm&y;$c8f5~-|!*DWm*73WBU`nkH`|poY zI!iO4dI`Bl-AghQf8~-AI&9*UXB6`#2tY1)sbQcXF{wpPb7L(4B38?wGCAqI*_NJy zBl=AU2E+@8zG>Tk{b!K%PK`NLa0oI-CFr9huk&})JP_1_T?T;y%sD1ko@l&EQ9xkD4~E4#9F`JG4Y zd#ndloQU3%nh=U#sMD~93bc(Jd||+==p734wn}L8%t-3Vqa*9H>hkLFhoX+GKk5Y^#|mHaaTkG z;*x{BmN^<>Au!fI`C1ulVl+I=&0CvcR7rxj z7}WWYd1GK}w~We1n~xd>$3JzsEslBh2CAOQ5kbWmY*OU$f#Sq*?!IVPjR>0k=& z0T8!doKQ)e^NnFE>X*Eec5v>p{^#%Bo3!}e|CQa#WY!NuZ2Kuea&;Ir#imM?VX%0S zDBu2H;UtT^&2&0QzIt9tK&5DV;8n4`-Wy6-6}4Q|rbfxOmSfuO`q$yc4l=*Q`<~Y9 znrQ(2!U?bkkH}RvinfnklhI?=#A00q2dZHDyf94R`-Hu;xdNxzGsw61LE2~OcW=Hl zw^)}5$ODzYXRpd6k1!NL+LEHUn3Tl4d>h)Qh{n8J#P38n(doc42`B5p&$e7EfOU0B z^F<0k8y7{=yrIn{0r$2FOEZ$f`H5Tvh`1KwoB4XAd^ypkJU2T{pJJ!g$Q*ia+{ z%`VY=IOoYUD!} z2>LVh06jTwSB}65FE;%>>+wWr{<)5HI4*Ivw}`Ow%lg1@67OI9se5`71WoEC;=p&$ z2G89QO`B`VEi61eqyh5@PRfvr9dZ@8Z@3|m;u2ZGQIQP~H5T}<`rT%7sE`Z!t9o!G zVqysla2dTF;)5U=Wvo@yy>0Dw;-G9|%;T8fA7e1qcIE^E{3xRq3K=^p@pO zprhgPu}D7uf-hu(qX$o_o6@zz{jNUKczpIr8WKoyoXjl0`orrfXNVK?_2oV!ujAgz zG8(fr{2zg-rajQ|K)bW!e)v>TY&O}i0M4BvgG~|`N6>yy&_LCLwZk%WFq>(Al!T7n z9{NXZRploKwwYap8cQHP$f!r+^Nn}n>Cf@y*LV-TlM|T2J-TRkc&fwuOHUg{s~H8z zN-@fuxlZr55G+*VEY3f1^TKPy_^t>`X{0wPSq-gEAT{|I>IO`C#Lx!Ek1{%BB0D0; ztv%Zwu$Mh_x>)RyB70=H8&s>LWgkxTd+xNe*U1IOoSOZ%wSS%&-M#m1fsd|1kcDJk z@&yDFFKOi!rN76R<}*9jEkXmn{Y9Nw!z=4JB+G@0Xw^ZGKH${HktRLIoCK8u3|YG1 z@AF?H%rI9y-S!^7O$(DBJTQ4l*hPVek(WbEBiepwFwDbrkUC<#zwy(mE-rH49fFg! zW`ltYcn3Y3*&+8r=>)u$2B4!wm^MCIjbUG8(UAb7YALm?xtYK^kHMJ!ZZ z&^v2N@T}H1rUZ*IH9U#XIi%O9i!OiuP`|U$4+u0V@-b_bFH2pu$G-;zv(JLEoc77& zD>gY{U^NXBESQz6hkz=Gg;AMZIVYn_@v2TT>;?{P~n;7Gyu{i z8keNLH7oOKK~@J1p`JcVl`H36gg_htY`|()2z<=(*eb$eSZEVP?L2(i}zNH2zV!%_qiU=G? z%;x#$ML)==ydq)q$6c#fOiq_yh7bg0^Vn{jD^{1qm(rz4%%;KPhS+9Lx~W>LA;%xX zZ6R>DxCRkMsaXbe@Ke_=WF4gGHPC?M5-aXRw>wI%z^?Q&cYFK#JfC-oHVMpL;xp3} z1VXs(R$8S}VyZcvq}86w)mX;t_4G)n3RoKZx@!>nGP$3C(>O;nKaj}Bgif+EJ$fzL z;b|0A(cDmfRORVs@k0=5k;2rweO3c zEtFU#X75sa9gmM~V%Z3sOq+E!evg5b(|<-g|Jq}$9RJp515J7|mQy+M5JCiYQCZi+ zW$922bKHpg_Uiak%+y??Bn^=DmTu3+O`5qYU3Ou!)^}SYf*-nX=3r*`N*^7sW@|=p zNCXx`#-kVysS^$A5oFRiUkl72Q`-lRBwG6;?A; zyZCYqM-2O};Z2b+c6%)sfPj;}r==n5n3^zJ;#s2^K4Ih}CxmoPb(;-s*8BdPdJvpW z)O6UXqj3@y1VHDjs*#ftgA? zA*4(I1WxdR!U3h9zi6i@ip!jt3KJZz0l99rDX~@R;w-B~&dS;U*h83yY%Q>w0rOIL7C+5(Nq0!RgRhJAKnduw^}y$5tYH=CPbX(1-6gO)Yn`8=9j{BSM; za1S~|ETjI5kmKNSyUz@hg)SAhhH_GL^#qtcPH0|Gt6X}Kk~O}*x}%daj>MFhJiszVIG=3~`%677F^NYIs;MIG&&Q~v0Go!}=wP!SGWdC^PIJ#;~g7uj`ym!C3 z28T3<6eG%IWCr;hM*Hz(!{~frZ--J=joT5vOA;i|6w>HeLGe?kBPGh?l6*7XC)d4O<_<4VSz34q}g_hRsKzUH?BJ>cN1<2-;2m zN#8rPkJ-TGgAx%BI2ts2a~Cxl3oAd$h@zYQ>~jj9%-TMfhqg)vgBDOsOB?^b*RZx( zju~JM>{$CY#g-d?PunIIFY>0o=n^D&rKa_P14dYN1?Kk6BO~fa>7-&7V zU4<4&_6)W1*%!sul;u9oXoTy?$g?Dq7x3JM)T}f>jZ7r3%9t!wNmgt+J393>on`(x z!Zr$ka1O>_j;oQG`#yew6WON<##&f$!tjMr9;)wORY`0qXN~Zay;pD%`(>oy5Y=%!$me1B`U z+|OPIs-_Tl7d~Ycwzjr5D$DS`AFFia%&;kxiUVX=$Z~5~2`<}4iTOcoNHcD; zFrDbaDH6XcKC>0h^TnS(M;ala(SMP$4C$t@Z(!DbDR9Y&J)PK*1oH5U&M}aqhp|?O z+ziI34Iu^v=xOiYCY{7Qaw*N(|M8JRP1-zF z1656b%s75B3H{gS#2)hk(?BKz0BFaxOl)uFE{_Hzupf|rxfT*PS&JxPRZFHN1ES}m zJ=Jn9jL(fP9keNFL8;bp|Ip^OUkX(Nmj8$wbW|S0Xa$Jsu5`K6C4L@&;%8=(5AO96 zr;+)xdPI_!+3FaL+>9JZi`L`*1vFvce=bjY-;?ox<2I0CVWp)@7I91`IO3u{wQoFl z+jr;=lQMTB?5lqo94J~vnh~#n_2E=N)^5tB5F9(!PTDgaGd z7Q7+RTLK$|0je}&6IZvx5OXwWFzf;tckMu?W}RFVU^-BUk;J^?{Lv=JjUKX_u)G&W z7Av=0Dz&6H$BorVSzAjJRs;NahoKCNRF``mnJ(i|{}PO$L*~&}1JNK%6Rd#&J!+Cb z-GDcYLV?-Z+a~Ym8`+_#VhrWw(;)|KroF{8horSW8GE9XGsX0lq?blB0GeLsF_As* z=epm2!**2@`)bL5;O2?jn)mjKwqmq^t8~xK<+h#rV8j#)uk=g@0V@>zf$*3e6?OS6 zG}~2lG^XZSA71(pwdG{OVPH(unJrPCf1ACFBXjr_RJInd1`38??n3ONOw>eMwer|c ztllEAFs8&+BCx7W^r-Ua3z9zztx1cAuTQqapV4+G2$R(awHiDZlb~VO_Ix)7^f18h zQ>GbZ9r$I-HQ${Z@&`d&d38A-$`b^AR=c~J2_o3^)BHjvNC-T2{CmGt>#up<%2`hB zP|C&c-R9$~A6%hu=j%F$w$Oxqzwl<3<)B!YGf5p`?%iTXadB)L27x2(!8&k_ojR?n z0!M~ss7qqUY)itIPh*}v%bL3ld8?EGlQEmGTj*z4npOu2E?Q-b1lORi0>at)u)D>1 zkC;{CupIQekRj(BmW*pVToD8QLPno5zWh7ZL$+GsV~=KF-}ZUSLTuIiMlvxSwhP)$ z@8Fl*ZF}oENOWlo>~j6sZrIq`oxRyX29<--bv2q70!;1;&X21Qy5BY^g zU={Nh@^~*F`%+K(KZn(~ukAU>c8vQY_9poF!nsS&6-EP!4j{%1j`>uShGTpc3&dL& z>5X>?*GV~FxoBQop^5PpIp&lBLb2RD%~hvD0a8ogv^9oUD^{N6+L%p)+ashx%oY>~ zBez7fBGr~^w=KK-c8*aN{xDc!BA%(auB#u0F)*sylST_gw_V~{yn&=}2(im+WR<|M znA;86k3r0K+=ByR3f7uK_hAc0CFFni)egjC*PcFHUE@k6hIuDFx_vuk+v0jy<;xF(fPXp-}{_T~{oJcP`wUz>h%>1(rt>1P8 zD6YJx(hE_uI(Ypv?!fC}gJk?fKLYYkpM*H!P@MD46MJ4#h@$(5YiF6t60GH~oV+vi z`rfuy6!HmJ{RH$TZ~+vbwkGgYA5;aNild*5s@?#r+wH=xeUgGs7St!Rj%&4?C;aVe zLaHS+D75mvED(o+pmhNf!H&#zOC2(D)E^kL8rF2Sn8E6!MApM>3(Tw^o&=el^3R9l zwMYL44r;o)R9{X1NW3dKb@mWAX6N($xdr{U_(ovJu`$-^wE5{8__GXQS<6)9w1CSu zI}u6&JtM5|_=itCHUArSgyaFHSZ3+*j&)+o3AnaxIjeQ+L*KA$v!rOomMN|f$ue9d zF(}JncRughIZ6J&gX0S{?d{N?+NkBp;N62MZv1a${WWUX8A0XjGwP+0#x8r^FsGzu@etX?wGNJ8`Z@6v5>O=u!< z2fwj5nQ3pF^8hj@aZCn4D#dyJLcBF)?j=qg>R_0@D5>xxO&RA+nksO9tV#pl^WI^PVB(9(Su+9HHt?fmZB69xcZV zZo|_+Ai9^>KS*Wv9JAjx7Ld}j#&H9&{6NlHPjA_8(BrKvE~btRZ4n=s!Qhq-@?Mz4 z?Kl9b*gMypW-^^9Y`^xG=Qy#hmY_$b|Bu`BDh@a?r;{*6Ru?mPg`0~@5-UGr`2${e zuN{ATxvS^)en)$;W%=0zRfeE9+N*aFnmapvg8TSzJ4>aIPpRRv$V_R6#jR#y6(WOJ z76k#w^nvkrSx)T4-~usP8+dWc$ zfTz-5ou|AIl{zuk$+z#!uwU0tsQsU8{IVwq;{rLxJ1@ydRFJF)_nA?lKU{Pi9WQNN zrcGXhKjuxw^z$#!|$?uKCl}X$9qTw zQ09D^o7UH~2}+x67?TS-x*s zOa{#87PG}p?o+k`xjF$jjjLcu6d$=}p=*>&sF00H>R)BPhS-2U2*-b9FHR?H>SL6%bk)%PrIjYy zapcJj2lR(xYXBZ|+!Ix-D0&T71i?Dj4qG~MjhQ6hdE=pEBvt{lf9@{7YVw(=;)=u8 zA?Np+3Jg{eHEHjjy=>GKH1FR&gb3H+Iyo%x^mLLXmsJUft}PT%%g8Ph3{g-iTQWGgvf0{epZ`#67yv}x=m=8-s)?1W7^Q6t z^4bNUNelwm#}my_%(A-vtqpwQGUVs*OwB@pXgtZD_KA=dKo>}cxMC+Bl=%|kSUs`l zaq|U2O~Lrg{PnS^H^&Fz%DCS9&hx+nS#BA7pbT(G%7BCO?XUEW2xhn{{@%rUcV-D> zay!mNF!R*~GaRu^rGls()SWI~G3%0BgP%0U;3S>8iPK1Qx!Csm$4m}+alU`2yFCZJ zQrWM3?pORhGI2ti5<&COk_Jf~`t4QfC!J^!?$gEK8*(ra<+N8xW;{n1Y- z=4nZA*2oo3P{pMM56wz1o!!X<4yEN{-tgKwL1W1ZPKfM*7OWsE0&SAudvA9|XAZUX zN}lL5{2-3RdMG_5%iJGFYn@e~6y^T01BW~J2Ue{{xNo3Ia~X+@l6&-EayZ3%c<#aH zXJ%@x+NE)M3+Up}dc_{Metkp<7`$Xql8@pPcmUDt%oWBrA^I=n+-kN1CuBlX;U%`} z8k@e#L5p2^Q~FDIpCR3c!y^+G&z?I9(^9&Kv{C2io%_!qdQ5X~r8Z}_0})9MI@+Da zrbYor9f%p7*}EE{jr>j{1lTw!#MX!NZ_O(U!Jq{ebOg<0$bjrNs#4!YoHOejmjpgZ z@q}+OgS>I$$5=;8+U?IC3)z4LamwT}x%|xHo#KZqs3Bb5TwGy;0&C}38f|axy?Hg$ z0Gyp3kTf&I-KE!O)MPMcd1Z)-D4sOIOl1N9oTQ4x_@X8;6V_xcg8cA5Irst@3X z4Y!AJ><_;s_%|yka(o}x56KVJe zw>__8<=L-Dy;H78+YBmD4KK|~*hPCqaigP|b>JJoFvG_;w?8hs7ObMDYoUH2Wus(L zuKtMPf!2RU4#=nyN8Spwn@*{4&pj!T7HLb{O35HmeSKG;S77PmF#x*CyKl$1okRK; z&n{$rc8PJFIXX6To=Z8wT(r-dWVt!6rgQ7a)9$w5-o?HGxs&sH%8eoJXm@}K#y=h{ zr5*I74us^d%lQO;!4L953ftvllBVL5^RiI5{bM8Sy4=7YhYXKOiXP=~gUCOsu7M`z zOk=cFs4Qj%2daC<(3M86OzwS`bGMZB=MC$r^qG)*2;{bZy{GGuV4O8L{n9Oxs1&3L zmT9nBA2ro*s4T9yq;zP>&(=C<5cwk=UA1_Az=hcjhauOOJ@%v;+}45`D9R}G_*;?>BMR8ECJrpRe8S*M%_Kh~~3HUw33%{E043vhdJmSZon3Qh}kd=M#?{ zIPIXg52MTN!UUu(l<`7(W^I7Eu_x2h_LcZ`XJS}9R*FpUV>RcSNXchmoIu@k^0aId zg7+i(Sq%C6e3Q|6*$Xb^2<}HI*OsKU=f1s{*t_6Bqk8H*loJI)%;V#6P(7cTlU;|e zKZ<9I0Ve;9p?H-k+mbb(F5@IK>cx%P^n0g%$mh`%TlR~qe)&S_>)scU9~pMw-EPmB(O)hMKe&@{IlDXPQ~aW=ZelTl$a$6a7`5dX#M*2!?9=n;rs;~1+p5Xa@FE_VD z-_(lo$eC4YQvpEX$c;8L`E4vMInQump51?{^GaeEHP+|@XSv<1zo*zYbL!S(uhna? zO&N9EXc`n2bs(MH0(88mlKK;GX8YFb(uiX+fSw~}I?S~}#p%6u z#>St(i7bTFOHEQpAl_miH$2V+k%=Hig)=#ZSu}>cV&PG*oL3|;BnZNjy!-wyBSyH1 zPhsz06=|)W&gARF4Fx za$>p>Jt>YA&v|YK=3Yqd)Xj1}%nbU>z81kD?A&a}hL!E0>N@Hn0}qYxvepO4%$#J# z>GZg-N?2hC2mhKmt`8%b?;>Gp9f1Vi$u?{F#bj<&H zVD(#?s0&=fn4CwNUW}HYE21Uw(~S%asqBa&X32MTDla%sdE9Z&xI7nge_x{~<~~wV zK&%eg^uGFlV@wz;?V#Zp!I zyOx)^^TNCr(GKHm;k(hDh4`*1*JT0p{?Xne$m7ffno0os_w8K?>36N=ti5%KYoz^; zy)C1elh`RNL}J)J${>Qk`RuHRl*nwi`ROZ(Z8?*pF$1Ziz2-=*4AU79X46T4d0B$; zD;9T~g1Y~ce7xt(t=|^XRNn{&l5t(ZLD@~HUejjp(NtEBdC`ig=CR*)o+{?KCsmDf3u*eFpgBg=a@5Z)!(ZmrDc^Da4~h z6*6Z=(dW{swBm&(mbmBVMcGWx=H>MczfKYC9JT#k=kj~gVK1M?cGF6wDq36%NBTTu zBEL^imq5PnLl+K}{jQ`txnn_E?$88)JMpblTkeZ9OJ}8?Ao;}HIhThXjxo^Op6vrZ z98|GJE@yf3gGWSia`ZSBF}0u zdi<3}$sihltol?cO)opIkA~In02%x5O-buwN3_OmaM&2;7$w3kS%snS$JI6UZSCc| zHwgzt0Z$9#N6ACMF&{59C^yUOxYEJT)aoCrc`vWRfa#_>+I04*59; zTlgE(xiXFI6t?x@jXP7*g?4w@$9_5Vyr+poL8^U4!=8pl;223ckukITZpx4X^@7b} zp>LhxW)V*^x(QF>1kfckEdMxI!EOLc?_LZ;5^r_BbMMOqGP56{X-go>XKuB^#Kh@M z$rrvU&K#mwFUFqJg#B^qzK=1p4H<)?y4Fu8)NAz;%4Hq#3F5<W zw2ND!YgG>50D{*rKL5gN7w*R(HD$0~^vwCD zDp29LQGpfKwNJRjOqMP5a?C&pR5N^}#I#egX#(OQlWzuOTdPI~Rs}lA2!N$%1>%Pn z(weTJ2+mJIxFj&41N^G}`-jDseJVA}y_G(Vhg8!Z%PLrKD_imoAf zPyN*yMQ+bmIVT>6LpuCQ3c==B2OQ>R+LPjhd@qXh-&fXl3&t7GUH<*f)#a%V_vwu% zO8IH91)tq^Hi!AD%o2;_l4ip&#_6qoowBG7<>k6J5UD-%r;!v;LKWKT;ArKMaGb~im&dk1ClkXww8uR^x}STT%L|O z+#JVVH5{mrDGK2>f?Eof;bse^u6F^XR|NdWY;CLsJ+I;$mG!xYXCYQDHOAqV{kt4f z<-V6~ODsGCTSgicHUtQ(+QnBS~X)unfP{zZXvw~!+xxds(1-9UA9l+az! zYNE61Z#^bG!DOe>u#2z(Q(J8*#ghx+WL?!g@+WtUUVe-|S8=|-Kmqi&ppJVWrmM3< zVw;WC46Ex|+^!NCPr9p_22R?w@*wJ7WZUVn;1%R=R*Qk$BJwk0JUImz@U-={^{bMg z*|aA<btQ$)tPd&sNt$(i?^LXpso<37lH~&jw0;$yLaUT@arwDBV{8D5?DCT zA?;08M9ofak$(1C6MuTiA-!`azuDBuXw2pmk@tr7sBgx<_c?wJ@2l)*L^Jjbun4T> z$-g?ec;jeitd-#}0=JD*lVQuh4Q%Sa;qb>e2g_BCk*!F*tAjf;AGz&*M z+JP;SG6~_}`&f`GLGc&1q`lG8%D$~TwT@`ANYG?MD{H()`h*naAsQK%{$9CKz4+N( z@=H%~;%3Yxe+@$?aJP@&AMw|IN>5H=Epi^r(F3<~d-CE5&p8i$uMR&5B(#{|G)50* z0B+V1O~iNbFPdBtYp?)DUU5_@6v#o3GZCIP9uQuJn)DC2yi6?tYpPl^VoOZB81oUX zw31yp1OX6e-ds|O7@@BpP92VbzCD$~st#Oec6?x+KVEP8vJ#ajkrbHsHyiuZTGf!7 z)?F@GfiQBt0b`@a?g$EK{^|;;Z(;@E(ci4@G7EdgU}}=w5wvf>vda9W(xkd9$ff1Z zek9W$AN?zpiIF9bvSvflB$U(^KB5l%zc8Gsk3;O<{IX3PEMH(QQ-0|GJfrtDQV5uh ztJWu|`hC;~ttx0uj1Fx^v?>=KA1}AyVTHJ!M1(%LI_Z=T3qp7_lW@d zD^*PY&UA&!AEEbo-Ls)a=I>q*Rj7)pJ3c{JWAq#2L&_O;DJ8U z*4AOoXnc`b=o%+Kn_mUJUWxWJS#%8b@R3tWsOBpMYCfr00uHnuZF*A>d?BF)pQ(`1 zAS`&a3QN`tq?whD$IOUqaSL7AO=^x~t`3%V5sGxH+e@$v-9>r&+^@G=IQJs@E@A^y zWh&Lzq7tpn-u#|ka~4?bl90;0xeJju%Vvz9J3!#yJSg*fLkAU~-pZHE-M5qM7>MV`99CU|tFZR}P8 zXqG#}h3|qSDrR{@JkB2kEuO>_3neb-n2EiKxs~r{^vQ_K9#=VhSO3$CiG zt8z(YcOhxh#Cygdo=ac6jWAbcND*5xoT-Z{=>gg|8V(85W|{k5soWleVyi`#xpRE4 zc){^5OkdnO#2GSvxIDn6_jYiAQQw(KnbMeFgGN&7%he>9-c8X(DY#bOa?BCQKkyhM zn_R*&{wJew;vZVtQj30RyGu0&?mpyv=wT|B zB7pG@_htaD_V^+l;=TA~e>~db?ynISS6cyi%i-BqkiFq*n6p3tXq}#w zA^W(O!a^xEh^(V`pbz8@467tei&B9qDfEEMs_M*P;zsw?-> zW~L_qg(3p~j#>;VIix{EMH|0cu)$Zh(Go(>fkK+oD|unr6{wcgZAg?$nL|>%xC!m+ zIxZ)r%vZrPojIFJL;d%EsdEl+pU<@hR!#c-Uy0%x!l*6p0>_|w zocfp%G_%?ILj%T4K!q$7{x+UKuE-MUl%j;eL-b!hH~oZGmfY^1V?9XF1=NQ-;~++M zp6GG8Dd+-5zT8KYz?6j!<11jmtJ#L2HbNc1lAT`lN2#`dT5>N>o6W_Gv>~6T;6qsF z!Kfs{S20@q%^)7GPJgY|e)(nM>8PcB%sUTI?}q$MlVxItJObX61Fl>8&(|K3zcjTo zl+IANoj6^`Q7%H2bWSq5{|GmMm7=3Ru|;uSg8nW?I;9YVM5fnt)vgmvI@PYZle4Ha z=?4*K0`Jv-sv=U1kn7Vv#E{!UtH@SwVhQm*X}sYqhD4>V*!-5xKB&=d$yhp%HzVM& zPx7$x3BI6F?5m*b+xAmgaEsn9FvgmPwm}%f>+N$0=X9a+0C~uQCH*}(6xBRcoUZ9g z-Q&rE zPLt{noM4_+dh6k;?>@KWB$0z^wh#Sei%S!|5s0j^bd0|WNL{a`au@M)55uBDB|;NN zxPIHhw5FK~_}Jo}!^(zU%Mw^fEvrk>XYaG9Qv%(Yi7oBR{ngY^)J6RZyGq1dF&Bs8 zThU)REWSEhVKn@Dv8lbb{5JHi;}&ZM;W!4@K6L>Knct9`?xu*M=6E!`8!q?o1@lA2 z2?a#&4ho%8VghTZ{upE&KfQLS?%$W46dZO!REX5hV+_zEIvv#G73AYP$v%FtG2m%d zHIOdoq(32dx%87}4*(b|rtTDeGz-8Mncx<_Db;&i{q-|P4)Fz3aFur^kM`aZf4+bq z`G!TANqC}m=cWIf>5dX9X$j>bszyJ`Y_{#~T{E0kMEcW&{aaXs;Y)A?9p-{c;yt02 z(!3kEW)z5+Tobo6Xkd+h`Me5*0Z0d`ta1prCkvTSoF<z6A5&_#$cubp^_|?WgrP&5OS!_NioLoJR$4m0Z-KsK4bZ^rl2T)0_s5) zxWW!dMrQC>D|V0+fuQKYKj*suPB4;6{~pb_KptU|yKUiZPjuW2V915 zq(01}u4ALdTa)(grW$*%K{8A0AQ+B-wF;<%;u?Y85rpcc4^>Ma7>i1p_y{Q$Gzwv$ zseCPxokVjFr!lYJ6Cu{MPWg5;cCLP8CzTWCN0_ddsPgwd%ctj?6LIhVEn7TJUzqw3 z*T&5bH=j>shKi>Y10v(yaWE(Grlf}zJyUt_k0{U!nSue_Wz#X#5FVG)))4!TFh$g_ zDFQqr5?=t;YC_=eELW#JaiU87W|~fyuMg#k_eH28SrcMLnu*T!1phSAf&0as2$B*2 zhLQ{@>{1;s00j_Pt%^7}2=xR^tNBhcz=V3ws4sCsEQ_AnOJsTe6C6?fN4)y}t0!G< z!9~z|7s&b|aHOTz?z6gS{UX#u`9895F;(DRtOAFPOgX7XZvjKrzWKX z;vZcp*bE@SJ^j=YI2i~`B(RqcH&qp2n3gP*&GnF<&eAXgm82e+(YT@QPBgqBHPbom z6VwK&%3kY{y4rs=YfC(Tzvzh%lMH21&L2V zK6@G#D0i07YIHb&-}*tLUn>_Q%)vx52wdp_B|+8`_7kzAuacwPr2H8_0AuARp8r6> z)Q5q}FWd!TEeY)yvv!PpBNw*{U*8r$h-hh%vsVO)rO*a}u|8aV(6IG6-hi>C*mA-O zLe+|wdp}NgE`R8oLvO$0w;vCLXQnG>o4Y@e5UmaH@F&mJ6dH38G9R84+s-ev((|-E zvAQi^d~75*I50~8>fskR=L)#ymFv$`$rXHN-DD$vCOxfI5A9FA`Bf10djO8?2{!>3 zRwb>(=8{5K+t*_>Yga@*rDznpC`nf^;Xm279Fhso$e*LZEt%jLaZoca?$m^oX&y=m zJa;MjIaaQfhKuL^W>}sY^UWdjjAEub@Y7EObCsbZXtARsbAc9tmd+eI{#nj70r`!r z?($3|aiV!R2$ysU8$W~8M0Ng_I9~#{HY&eRfM6YxA=tk;FQVOu;Ox#6$x7mZa$-0j z)FiD(s?rJt=(oYc%PLbOzP9d{4w(X){RG`xC(5stE@T286Hgct z43pdm3mQ&~QJh<;ILx!OR#av*kxEFS;);=u`5=^RS1g4qgKpAvxk zd|ZYtIerF+%s)FO>8h!|KQ#~@l6!|U-|Fd+qg)Op$W)+W6&}MMpG^=E5bY1i$~s0c zc6hf{5ex@1D`Fm|83a;`4*!*c?_@U(-RulPs0EGifPs(9-%{Yj`ei6)@u$TRP^d`H6 z+NKM>fAUQQml?3_St8+uV{fTN`ik~VkmmvMl8ls2o@%r?Xd5H~qgD{<1o8ylG&d5b z#e(Tq1mGMw`z$;qJ3vhX zRyTaa3(Vo3Y{y)%8J8%&GGj>f1C3lq)+1K%6h1RY=vUd`qg@PFpvsNc$7%zU2)D9f zClOcTV`DoB>YkE3SaBGmwA?}5c@KX^pE(--hc2AKoOT**O)DnR({dS{LwCd(YAwt4*`rkY6QkC3qf;C8{1YImXxt zFC3iQ8!A_*So!MBzyd5p9@q*p-YNujFUw|H#P49sN_v$_M(~kp^P5TpXTVHEm)Ab! zeodQsAW{++xPpm(EWL`gI_}gDYomxi*D%kQSpR^lToH8up~8DOOd> z<`lQ9LPczHOI)9mvNN*y+#*J<%Gkl?yfLuy`y7E|8ovAo;1v{AD-h+(o*a;xMMI5= zjLmcWI=?akY5L&o94E;V$N80S3)2XJ_h(E_r=Dy(mK5-zwTE)n4kmjdbC$WYAkv&d zkOwdt4lE=#RHkTg0&!Y-FgQQIX+a(BnJoJ84Ig$B! z=HV1A=Sa-|h|*Q_N{!`)b7#Ed&>7eU#zJeU0Jdmgz^z1MmIlqEi!^+iY)&(4X+Mu@W=C1p#3Sz&oP=oq%bx@hE; z^}hg}{%TI#Y#=>5C&xX-q7&@Zje~7?f>pWT;QLVkuRG;$Hebs>+>Ri#nL7v?@tEpo zg+)jy-aEQC~~r-;&nh@OiACT^>Wf|Y>43{G6Bi%bE# zS|t_LnZyeB`|M$zUW;)A>ub(UDxSPD8K43nAsGL~dOabjm@-JldwR5{VyYdsL6#|7 zKV03Qu-7B_ID#M8D9zapAQ|w~wCNkyHe)PA5%kcr1m3!ak@cn0pb7=&{L!U?;)c3D zb6QYjy*j~q*ZoR%aFf5@@cx+^fwy}k%=3G~cImpHRb3UKjFRqSON& zzLMcj3gQ^RrNo_K-htiuT|q6+6GM**6qj|j3~unCr^7YFOoUOZMoTBL3XEW+|E_|N zlo4C6D2ohqRn(*W%_)U0KsJ{PHg4WoAsMRfguqCll z!6%n0hyk0^^p@(MqaQ*wGz!_ ze_;g(=ly6sb)U@FR0D5Ge@m_v`eM1*Z8Q%#&1dE@N}_W ze3{i8RT@;Q{JOt34Lb`g`*^$Vb{d&L7D&ykhzS?yHa-FT8=N!xcFVuFmKeI9{dpx# z$_th>81-)T0mSxs=Fr8d05?F$zlwq<8BW5#ffHLkV@%;e0%J~~=Rk^7BYG|v9uV$Ft#l5V~=i$=yq-_`-WZ2pSPV0z|^P;6;FEmc^D>azRFAla(=J#0{HcToSqtPs z(%tI&#ZgP<|ChtUo2(Z(=dJIXl#0Bvj_$Ys1f6yDS!gV1rL}#X-Jy)H;#JiwiNhap zpx2n4wUJ(8^s)<*=v;RmKPEAPcAsrX#mSvT0Fi4_llk`U;YKkkDl!_fF~xXo;VE+Ro58fWu!Y@rRz=P_8v($io#@sP zgDZ5e_vDzdY9Mo+*as`8p$*hE$|?B2DZs>UB$35sge&v>T{gzEHZh`y-%A#_bhp5M zS(>+Ymuk=0hmRso;XI!KV{TwszXGB|SYUSMeSN_f z1THpjExIwo&H?@wH|f^z79lexc3%{f9WV{a;3WBYb6gDS?G<4V;2J}Q_08VFH@`6S zgutDFQ+`_M8noim>wxmb(9lRpyt?&4dLl~Q3Sk*f53)i1Rfq3uh2@?=Y())O3vLqZHKaL($7;}&#$>pIU~Y!>SvodnoI>JL1SEAKVbm} zchPkOLMX}XM6eZ4PVU0xCL$RgsaSO`Vg3H}YeG5SB813>EEXQ{c~KJ%@2`j6ZiO}t z^14jJ+Dfk-{*Ci>a78S(*Py3QZmbX&&eU>LShQnPb6^0eI2IAzI#|Wk+CKpR^Z6OR z3^?^~`;<)uw$oM}-92D->J2iSZbfF!Ch`HIJvlCO3eKWWc)9C%O9hd+)4IE><5Zyv z$mIXVBx*?-PCZBWgRs#MKNHyz4THpOy@xZ!r<6qZpI4*!;8Vbq2nc|CVvxSBa#|g530CA4DN8rFZCw#4rXtsf)LlLXp!xkhq5RLzCo5FDV2% zfis~X>@$}Vg5DGNuPgjF2&ZnPWok_l@tY{K4yf)lfbe=8q+9W1o(_vMl>V&kpi+Bw zIx032z*Z4Rdb49bsFE6#1zBzI*5KOnv^EP&t?^}LNo^G`bp@XlucK>XT20n!KErkV zU?R1G6{8cAp5*rtKw(n>uSulj<1``%v9mM!_?q9+39?ZU=Cb*FGOXb9hdnFZU#+}t zUsVvJV7JBQJEx%^wVPM?eQ@+HKWL{8XqSr-Lor&f1147sur7*Pzye^MeJ)UvFF2ef zV3p}@OH0@_ow|b?8;um0wHH~Xdmq#|hJ*=Eo>Iz$%j0V1ne{nI+t|c*scMn=OFn}6 z5t-*Hme^QCFDTyh$RUj)h8)tvZu|D=Vmbra)$PKR>P)s~&QC7DMMM-kpCr}8a8i5IOw{_`oa3~1Kaxk2K{KId6hFwVLvF3i3;tz!u6~E9s zAnyVpfhu2#%2MI!pLRc zw`?I~It?4SHZ{_m5y3|PLIEud$pD3*Nj>XIwI1)TxVE)p5GsQh)KRC^MGxy)Gy?#a z|8w?=B1y&O*a$twkB<|RJrv9XH=Rz%knb-38Yc++iD&Zmg&EQOs>QmDv$3s;sw0Hb zHn`?a$;nC1ftn$n}f&2maJrh3dedG%)|vU(=}Q$2}W zcp;CkRi%8>tE)B=9Y57Z`1B^uNpwBLFfbi0$2EQgKoNLyf<*)^VkXhX z39+o3CHbSdX!3ddwbe5~SFX#L$EsNGP%btVtgpJIfX%f?r>89iu3~x*b6GVl1?z#q z;}p&6K-MK2&$H^W?0tz{az#D@iC*9^O-9CtwSMPNdgYgs@$F~3QKxg?b4yyI1iRKI z*)9Q3lgv%n-tK7mk&LLJWI5Q#rI;pL@~(iHpFYQ}k~PNSnQ+-ef+fYnv@;x8=j1Gw z>HymwdBito2Qib$`bj%!EZFTA!%kX`#pfc~YWP)vb(#S{iK;=iOdCLa%WS~O-%_(dBJ7Gdp?FQsNQL=Q zp(xba`yIk__+N6Xdn32|D{d_aZP4kiLd)wEQsDAnGoj+B})woELDVzl>)Cz3`g zmGDUms(#z?R(o<1_O%agTdRxa5vD~z$PbAPhZ9Vs2y?tU3*0K|il4dRaix4a9P<~f z7WABq;buw!BZUfJfD!)R5P0tHfiyDFQ88KNJGlp>U2>maYNWVd-=I?;icL`-4{>V7|ft@0gu zZG|8ljQOWuc!lS+8^vdiN0*=`LtXTJlLPKWo4iDAK?nyuBi-X^bQIdT7@kW$H#x@` z&9852!Hr${uP%)wZG{Iry4h9QALB{(+3lTm%)UTfy4Y z0MXN7Rahpe;Tcpxp&DC=cFa@damM+vQwO(qp^5*FpKzNpmy1=z`$aD(2P%@#o?y!o z2W#xSx?dszK<2f`6^OZPRa!FtcaTHO0RTEd(Qm+ijgxQFfITPHNA`7ClGe5O6A7%tg26$;kvN9y1NS|qUh+mUQ(J|{udb+ zDlWs3`xCe8Ye2x90`}z8(`a=&fKyvNRG&WRAH#1uKzaY2^;Jlu2={ROT4K4 z?)GagX2Js}Z<1`rb*nMOJOF;9_~A8|rCO+uOYU<(3h(j~kEd*wkL`~pg-TM)22>P+ z{0RgD`u^bOQXrD(c_P;4HkW%V81A(ctAURkCobU7+WGp%GJuUn!4a|hjV*#N&x=jI z6qSeCoH~KC_jlK79-?9v{M3H-XHE=Z)uglEq>FO^*IF%bQB>+Gl<%Wk(TrS1CrB3) z)o4|~{Wa~AgE-d_Bhcd}qMALEUSVc}!C+Y?o3L#^%M}Xx!v= z9WwwCUDRM|!VQ!je}^=Sb%ehO;!vzbF(-b_i^tn41J=nmorF%+M$MO@R>N9JBIzBdpMuhyf7jIZG zRH;0}QP1BLmKlpKb>z7%14@uRc(Z^R{vhI+go?adCaBw`?Z19-FrCt-cXHQFm*uf# znA92YqMN3UL1BO4hQ`fn;rv~SMeeBW4oNu|lrS&eGTT zeF4e+42#x}xfi9{5&dT;60vyZ_W;!70l?!P8vth7vZeOpnmZE96yRdY#~hr%l2f`` zP@u@!yTpl7ujnlcm=Ktsw^ee8RF#M}U?ckeatKJiSboEnSRqS~%(FzlJ^)o&l@~Oi zV5pi?lpQRo5v|}jEK}1J7~`^(cz5ZvB9yKifl}#Kxg9KX&Yn#};;FM<`0C3RVSJ=g;iS-%UOPnt@RXqJ*HOO4__eeOhT9ib*{(W{cLmTrB)N0)*8F+@#om@S@(E zOEX|Ks`S3p38+3+YU?zH>J+|#8}xVkNv=jXT+!>Y$Wa6Wco$&O)M9I!?QM?$aTPQW z-iyC@Z&x2fOPj|Q;%v7=f@_vg%WoLRt3bYC9@2ond+R$C#yD~Ym(gKu1DDL7VGI{# z!(@aHI7_Z)JZ6C{&5u&cN#q5C3127$RVMEf-iS?$n><8pl7k2dmHa>N_kjrsW`I)~ zvMH@BIa;0crxycBxyP88yLkH4Jx=3}mB^D9v`Fj^IL5QD49_zu`at;CTZZ4IwpcU$ zSttW@Xj+9(EXjZ*nj9#iF=#5pVZxu`fZ9;XVPx0TQvK>&*>4=!W`3>NEatOev^lQD z8tSGK@Fx!d1(A2qDrZ>v>MruA@mZ&v-J;|^6G!DT^eiAXwo4T2ET>#?!&;8yYUi+s zK_=G81v)V2c?h>0Nay^jwb_QMT_vZL#=g8D7zfXW{ms4VVm;h`|rahPE^usm= zG**NoymNOdLLi&2*u@nS6!f|Q&=YFT#(@}V>TetGPt5-mvWsM+mjKv5LyRv}IZ1eA z&{{j4(@YRZ_T;qm@!4)TL9Nx;EjDbK*8?RG?n<gf3cc`VsF*2BJ^?l_qrTR8ak=j0C65Yz&|utaI|m&1cP-a2fia#dz@h1+F9>v1M7 z95T>M9Xn6Lt3lbQJ6`2Ta>&fYdX6h<6kGk<%j6|GQW{kNNvK{>m~Co39VL5<|MA9u zvqa#GCcUyJh*%GOd#X-4s-`3c%S@$R-(DjmuoePCD;cf7g^x{AQ~Xxspqe>oyZ~k1 zAcU!c6RVRArtX;mTA9`lpFmbmsC+7!9xiDg-G6PH>kznvE|C`Ubtu(voPm}){Q_p8 z%47GE3;)tk^CaHoH4^F2;~&!Ql})A679t2^@mCG3=^0H6$eD9G+T;> zBsts@nR^@4>*SKsK!ukzz?Tj|z~TU+|KCCd*W$R$UtR*-TrLJASF| zgPImSHcC$@tlKO4t^(B=kjeyV6X{-K=~&BN7#=t3MPbV;uBa_+$$A><;QIad0b3?(0Rqe=St-zIo3)EKRXLPj zhv#eetrU(iU6?C=Z>NG9m|~VuaN>Ifx<~K(Tf0vFfm;~bxCiPxh1nJ{I- z!bu&~kgpV1LROH}N3(apa%dL`YTDW*YRFamdt>+wAz|xauqx zN3Cq(7N0(ZfAT%F`d$h|RFe9r(UjA!o%c;O0o!aA9z`#QA>_c!j^jG8~U;G|SOE?W2Q6^}lM z(46Dx3em2J0D`n|`m`ktEI4Tj@j)ccKbNK)h7+a5X{u@?Vv8?PHl4a7YaJ1YArXgC zM55x0QPonT6gcO58fJ<$sq&zcd9(wz&*371dsZmn2lWWb2u4nZ{RbH%lYkmDR;@km z{^{8{w3$&c^-EE5Fj;(C=LM0o8B8Qjnk01OI8RB~L+vJ~mYD}9?pw5)gR2(RBq6Ib zO^ZJ0LLX9P;e#A>&{dc~_17_QfgmIcYg92&qX990$s0!wO(J*R9U5ITwNT~krkKZw z3rTbYu5hdC=P3Na_tf#+DsE7ox>vF8x36;XT&1H{aqi0V$>_tZe0(Dq#mjGIR8T9- zkwU>07uf+8Ys+97nj(J3X}@(V{kp-|lSU?IJG=Xr!cNAZf9&(XL_9;Y`7bm1R+c!8 zyu|tzmJ~yz9TI!k-=&(+djv+eil?wN@#Loaj8`#iF(#|Byy#~Dla*JcC+wX? zTms%hzVlcFS7|1R?h-yeUrem8ho?26PLJ6$R0xC1e5tgM&K`ks7Eo|4VD)LZQwPxls5blx z&bnQgd25l94{`8M(_ry|4aW8eH_Kdq9HPu%x-Ukc0LTf>^>xY;{U9-SzCaxod{qtR zhwx8vqbREK_|dY|>%~5=`fP-7gJ+YT&)WiL3@ev&h%a}+2+`nUU@V#Gbb)kK=FU>z z>HUB_&h1hGs;c2W`jzS4-g06Y=9RY-d9tvJRTPH%nKAp90XQ<@-{G;EWYZd>2{Y6! zKS$ZbMKQ|^zBT7K!be^yL~CH$`FK%oPph_5PGG76%J|5UhY0XtBq(W9WHK+Kib?Do zZ^Gr)@%^}RDYcnt0?6Swz!o;ku)brYam7_J_t3Fb)Q@+}Cc|79z29P-_1%HYu{i&? z=Xur`xwd9;&b(QZLpgL!8nxC-?V2&QAKDm4_m`45@_xO%>Vus?Xl@x3^_D=q zGZMEiQUcWJDeuNbno*~Kb(5*i$SnsFbm+oJ#uVhYfvH8U(XF?5^7?^i3(%QaWuajA zN+;8o1s@^lrXxczS8EGrR}C#}^8L`uZb6GZYNjJDUO|Y2-J&1>Rt(~5e5mxE_PAE!FI?~6_%V1hxk$@dD$luS2mi>slojxY#o10iIc|MX zOM!N0eYLLUMYC1J*QUKWVR-8cFV4%c!3r#VfFBzeBxqFfP>`1$P1nrQguN`!bYwkV zK8s9i!gTj;Lm2zB?_hN#7@wEN$d0+$cn7A*i{1>n+`TgM)X=OrAMuVu;Eypc?%pYd zInpfEk)?MMz|A~JVk?h)p-{)iPe(hu2JiAHgbDeSQ+jp>8QbrU{xqA9A@Bog?um(pCx3$2$%!}jME9hFR(PRc`9 z9>TPs9tf~2rxxb(mE{?8boQ2jPN)$X=ebA2QGtc!8a8S?3q>xq;D zsA&qI@y+9n|Fc|EV;?ISk7Vo)DE6o(QaZiNa%CeR77FVkx`+t+`NZ;Xd;MkO86TwP zW5JF+e~|QYLZ3Jf1g5MRk#7&-E4djvwq19|t1uemY~X{TC#bP{t|xXZ;NCauID8UO z<$ImlD;`I?h7;(waXnI#GeKG?Wf8t@mq&9BdS-+6Ht#d3eiZ_J-4u945|_eG&Kh|) ze^m7dY{owTqKlR-F@4NOJtcCOP2l^*`3#2trPOfk|J2e>*_D;hzdOd|1w8U;#xw$- zm<9B!Oe5}|o*0IpzP-52pqG;{M5YAtt&mo9v$lPa@Q~m4Li7pOQh?HWuxNC@4z7b9 z0sM;Inh3;t4HsphxZgqE&4QWPC2!y;y=bR4bIumVEv0wHq11`)NHN*-t@h}ds8=98 zg)-t--||rr?A=>Mf0bMI3t*1hG}HX!Dy^TlW0Ux=(+eTl&IUpiB@JP1oq}NH;J*?0 zKb~f~&Uy?cA6%oCyI^ZR!}-A+hc(F2f3vaEnF=Nz5RJ}xBPtnx zvyJ}j-rkosCHNaQRm~Lf?&B*=bj&j>&05cp(__-Ea=Yc0Ble2I~dEV1NBef=J)R>@UE8M9^xIb!Jn=FK>HV8e8)R>1@tlRJVObPB9Xr5D( zCdykJr0g|nsyW-vpaN~SG73|5y~>w?nw)r=*u5e=EU!MuuK&NDW~KbH0jENWhOy0V z=v5}x%R?;GCv&uoXwyzsLRettRb`MD4yxNIM@>}p6RXDLF}Rc()UZQzMkYSzDhPdy z-zw2d7f~GWr~U6-ZxTC=M)1w%iER&rZ8qRG)hOZAQ743_R*nCd23g#je)vh1AErl) zJ_Ae=O6ZG+UG2z9~#euv62In?oMhA+>Y+Jdz}(Xk@_Z zhKQbKH&`kXzPwDpdz2Xhqu^QDqGncHD{8Iie&0@mu}3HAb&T8b|#XEFMH)C>W}&T~g?ZT0Zjc--o%m9SSrbh z%#adBxEPd|B3nJK_-bPgpnRMQ(IcZ3gD>{i_$FyznnLqg_(A$c=Q6A9jWO*uH{U;l z|MPb}oZd2lT=N{iPZQ#XmFXABno#vmgk2xRz^Js9tf@dk12l4Fv^Ldm1jwYjl3jAe zL6t0ltv7fEdW60Cw-cpFVnire@?$-qDQ)LpdH2hG-HR^5KHAnwqsFSTF#!R+$612 zuh)iRehi}vc?6!gT0n_{_%A|QZ-{6WY2(>V8I38%>Am%EQ-5t?t{h^u3mCDI{H9qK z|IFSti7pufwq@M{^-!1`8#dK2dj*Np<07fE{>vmd1i^zTQp)cPcNW|!L2+$(85j$&a`5ab-La0l$N4W3IW)CiSK0`n=-&d7lf%C1?O~h> zc8ojp!`;VlYmn9h@UhukNfCHBgE_Mj7o!fgwW9DC@3A?{&og2>ZzlHM+kx73YqHi@kM^?oc#G zotqMq$+R`Z-%#p7698c`8i7i6@CBNr$TS;hSFBI?K?9VYrgMK1B=Ym>;A8t+JAGVL zHKO=_lFb$@MJ0mVSL{nhksx~>-|ChwxcQPfhQqoVPjWV#M^09m-1md&HLx3=-KdBk zgj1_#lj!w+ojtrLe|9Nm0Dd>cazm1*ZpGUdhG)zF$f=$X%$9a)X+y2{-TdacAfZu{ z%|DgezUBw}k7Gh%TWMk{Iyu6q`ZK0H=+J!qI?Khb(I7znVlPYCw8c1zUO0d1E+faa zTlu%xLSGyIkLEKAVRV?NgE+#;4%rA(Q|o($*LInDA%| z_xdgqh(B#p^%?&UPzb;GyQ|FOe6_rLckJy?=kI6I10A+7Mz;)CPOOW(`0bJlTqR|6 zi@dgeD>;|gnYcxc=8;@#X}JN}ts=#ax?i;ezr(ql_biBZe(Fh;>~I`aGHpDH{7GE2 zOA)^kK)@3`0Fu|^MKz*q<&w$*ZZpR!S;qS+A!Y4rKvc$$#@0H`Nh#e4TOkDckuRn* zFO<8UYuMYwk(aZL_<~X4Y&Ej$(RYX<>d&AGZW#I`EvgMQpP()64NE%SDYA{bCO)Fp z@V9*qn6J;-Ct`tM8KNY@cs(uo;g{Wbi4H?LP78Yy0t5riH~of+$;??F(igU?vC4>wS#nhhR{Th4<^4sA?E z5}u4xDO^trPRJo2P%mcSwY>&$NLj=E?A;}>yj2Y=WNky4Z4=0> zwBM_CB+fh3QhtMhwfMhrz-WZQqW)Po#l46DU!wMsCJhKUQlWNaGBf_EEg{wdAGN;Y z$C47f|FuV)1nT&hfmGuT0^VCnCIGSPJ~Yr{58>`k(gQjyDB2Zq4dF1XC>FVvD%aq* z!&*f1{4S4l8i>HdnpSfE|6Lu{4mkd7#HL-iCp1u$Bk3w02t#wQ$={kb?VCx6%K-3b zUg@_CVP3vnov;*zVks;c{L%0J{hU76-2z@=GqcWrM}Q%Vi%C6>f2N-Yh=zvfkyjr1 ze9(X!+7~N8<+=Lc2v;U(-Ns}6;ZtIPMkwDp1UK$1hQ!`7rqQ;`bnA2+5}x0c=u+N8 zg<4nB%`HVYd}hsBwW*$s<>!V33Uv$cJ^L8w6^uO0N?<+T)-3oRh97y)ZEc!#Rp9$m z7%e?XEMS?~%zG_tgv|{wUiJt1Wd@Itc+=zLUJcpaWR72x9@EQ&JRxjJNS73kE=B$j zGX!jb5E`su>6?GjfQXe|;v`pxzgWB%SBtRiaNH2NG`!@HK^he*UQO14JFn}R{g485 zL$2znW6H{Ss8EPKcY&01z+M^ETZy&Wg{KJ~jk9RmisdwNKfuU^s?9STm{&&rYf80f za+=M0g6vMsiHJocO8xE|wWN3_TeAStDuCnGNBCFDd@O%@0gN)clWS`s76x!T zd=CbdywGp+eQ8uHT+9t@$VFsGhS@p4PkOZ14lRwOpyN+GjGs&teIEc0|0)9@Wly{2 z=P&9eg#J%bxN#oNEcTkf)e^Mx5={+w)(jx~TZU8#tr9-#ddFKD6KFr%Se(<^G=CDo z|BS|H@;3;~h?9P)#H;hm#)i!C;*a;ZM*;}93mBw>`4+nnF#X#hnQX6}2j)aq%JvT^ z$o#?2>Z1ROZ!Kr=HziQH?SX>0s(;^ACdz~s}>47NgMs5kisltW-kb$FR zvy$F;(9nQK91#JemMs!+Nixq#LtnifVW)+9DI^%ThL!ZHf)YY6T{b-O&%-leQOW z)47|TV^L4RnzQR{4@sDOTWLm<#2HZT1RUaL5xgYLmg_c&frXl%iT>XxxC?1p>XVs* zJ+oNL-v%l&oZ@IBfZ(2GHYnTJF_9M0@8ZmHp&-D=J~t2>nch9)^eZ{Hn~ z*8^FZ<7kLZoBIz$Xy5bp4W0XlX3`PL4U6Ev6?fpY0Z`R9NK4%9zMb?j&C`Tr54O9v z=oYpX|2@RYxyR(rTV~#+86+@92;|*a@n6w zhx|z5y0Lj^zuTJ+dWlCPNbtt@*0`cO$|9S3F@DEXs+d$G-QA{a03Cozi^FsKX?x4a z-Q#$IGYW6OWl13NLHP$!vCm`ln^%Y_9tw{&xSWaFsGM_6MOXY87a5UAg4!qX1@6>3~n zl#g%dZkjMhmAVhq$VB=wQ!jta5To4|ADT@7$$7U`Hw7z4L|n1aJ)S_CXxB0DhvN+<$x z*_!%oJojQRSruXknVPgeFisCrlbupI#fqH840#OBe#w4f^s`Ei|C~7b7b3CsT{id= zdryyEz8_P1F7v~<)be+M3ZxWNlCf`r5iYzFm77v+#zhvfas0AqhVyzQH)ulUPRU-D z@cOLM0EF4$eI#eQZaDcIXfivDrKRCIS89Px`QG-y(q;eGn0fAYnh1%c8TiY6al++R zBXkLE;CdA>cOr@r4HW0qD=FTOIDwbw>t3H+SUyVIb->_MfQwWFwYcbslCyO( z81r$XUV8A+&CQm4aPlUEpNQ}N0L~&YZaW?J5VoUMCSAZeXUM&hBSY2sVB z9RvEM(Q9nAs9hsRP7Nn(l(Bii?u5y0>(YS9z1lh5d+8QpU#lhJ{lz;9a!O?W*1=h46+ zjuUnDN5HDx9^BzU7Zel8{<=h52ZQ8Ee>~th8LT8=w0G7oRQXCCDxUm3U8v1^)-8>z zEASZW&5Y?A+H~CCe6#=#y{8{5!C^{5c`N7cy3BU?Tt7P}Rol@DQOn0}nAx62MmdeK z+AZbLMr+<^z1NsRj3G1*KF=015|=hPX7vJ9R-bJxqb7eoNtvO$;(j0bj+P~SF@s!# z(J$TdM6{@CMd|&jhoznkOY}Can6}ndjNxTM)e5z|w+6HMc=sfl_rElt0clvo@$SF5 zMKVV_sDwV^LV9I{;kUNda8HJlWoL6HH+#J|1@}pvF~mTtvHThO@$%9(f)3^2D+TRi zR$wPKOv@`0`>hS9e}iGBA4d`hg7YJlj?O-i{=asmiQvR3e67Laq2^9(&QC z-cx$~#*Iw_jGc7_5D1b_%+?$`7Z9&N2@%<&B5&M&(inygc9yB-s7_`Rw7B(btX-WB zB%LRiDbPNm@?7*=#Z>0dIUDpeZCQ3c>?a(qD1fQcwSBeBE?Edx<ElaL>$#cFq;ww|krxmJPqWh^L_CS}$ zBk+?lz0ZbwG_|%Vh}z^$1w6N+mS58aEX^7HZ6X@0HMa(byzRfo9NFv1sHSL&07ey~ zE-AVc@>rv=lN5h6P_jZz^lj0>_efZ|BESbV5@0`qY($sSj9()clsJ1txl z<6|(bTg@LWHO0av*BpIRO~4R%6$OQPIb4ft9>dCfoHiVX&>pNFuFqspkZQk1+LpI4 zWDVUV_h1M_Uwtm|si-t@GA%YH^_eypzqtqR`xVbWYoLBgodR|4=*3Ah-a&X1iNoTY z_!a-RJHzo_ln>sGrq|kx9 zT`G!nMc;F~?bBK z2Vm`#LmcWzBu|F7+ytA*$^$mweCXB-`nMc3V6(nN7Z%Q%O_1C!1hxp`R@Vjf0rk-HKR`O)I{cig5v)ULKm zq6orO$!^0=lY&T>R}C;6IEHU889ABuL6WeIG&SY)Ekp*zTW@hz0;6H;^cv?>N zt>P6bF34>{GyA1nsbw&K{Qk&&$Y`O_D{8DW)F3!hOxIb{O)$a27Z9SGXB7Rjhuekk zQ^Z(6gFXR9a&;BZEgOn2%P04rAmRblSj;vYsL=t+>+c}PC%=)pPqiE z2#;7!&47ut`6s9YXHE5~VigPf}+z={rq1N4S;E-@+fb z8I4iybTj;s+(d$=I|r(Ux)?D4U5jFI6d$o{n2yBTdDwFG&7Xz%Gud{d&_)xW0+UjK zFNYx_D4E#i87b`qvVd^UNFnm}2k}Rk&X(Id_y|>xv~;|KnhROqdN-!6)Clx%VL6jq z9&vvD(0N6__%^*te!&lk8Rc809xMR+h$^$XK*=!D6r}m+IIIks6SLTF6rqI)B5JWIIzMD#eD*Mv z^Cu3RXU^!6y1XmqQDA#7WL9NvGlw-9$m^zIiuTw#AoWvbWdD|_t=wjJTm@~q(zO10 z+}KRQ2}~lf(3xyD;5>6cM;%u2#Tv?jy1odWpQxy5PubMQAjk6=u6;i?J!D?h>@fFB zWZwNoc433Cez~Lk*+={|T`%ijfBCdv)pab0RBA3S$tpS!J=hSRC5F+)ES_$i!SsM9kez@6Qe0|*WmDGi+Yc&kc`;- zbTFBqu+tSq-wA#wCi%Bw;w$9U?vOec|r4VZ~ONQZoJiDPXy^G<>W(7!ce4VtVpXnjK4lbr|&y2 z^GC8_=%?WL75(B_i`>at&W6txa@*VMfr-8p&z0q(slIhtu7bm(c0rCC?3JFy|HDIDYJ@8P7qESYBReYPT=`{fA+Yli#S|P z1=$)|P^W#bX>O+zHnr*TbDXX|Vdg!i z4l{|MA9u>wFgl2fJ07 zWB12f<)R9H6JlJVf=cDwvAAty^4_0Ni;M$Q@U+s?PrwshvF&lbzyVyvt@!F-<7Iy+ zqdkH5$A$j#>7fOvwY7KB{Rz{OTF3ih4;+ajWt#nJRLfFWt$lQ6L48fHq`V7UF(oL^ zAu0iu_feTt!wJBEq&4Tojhl`VxFQzSt2+0^RZuV#b&&`!YwbK4$J`dof=28Fo`Up~ zhX$-LwSKS$Zj@>wQV4J(64^jJIR-Io1N%cvGM5b zvmS&=NC872@R;^MBSQ>Z9*d1c=1npiHPET{w!Wm*l90`l;m70iN6=o&t7pfP|4z znXnJ6?Z$t`E~{1pUTuSx!~nd@z9u!U5J6oM2LoJ4! zsa_2mp{sKUx$$nTePcoK@V0`|a(olxC&oGBrp)QH{_Kd1($7{3)|0gkO{74TK|_+B z!Gm^li5b(eSpGH`(p~cIn7Lh>``>q;Gt);kCeuR+wcaWIJK0&8|F{{rEi9P0v^hJ7 zMLy$&1X2dN{9&5FYT@+wyxeRM2VY(N+CG1HCZ(7qhSd@8bfRr&WnY zMd-w4M0~KGee;viuvH|FP-mVg*n`fpGR?gB06jp$zqW>`N&hS$AvJYYsF3=L##a@~ zvGA)Ne-<;zi-64>35R?1Y%GAlI7~UHjBZn|c*j<@-pHqQzocjtiCe|uIrJ0-V;4%O zIvB4K(0$;w7%-!Up_L?{OkkL$l!E_4T&b)&v1M$SwqBgQZm^aOvdET~TZx>NL{>J! zq4bcP*Sn=gq3(E_;>PI%FnFF0D5zjU4d!)_XneI*=@-O#Vx*S6^UbDm_poJSR=||W z3j`1FUTA*CY@rqCdfnpQ?vEQXalgE{U{jD39{I4}mE|of*^fEGwHDqBALnF8RQN>v zt3Pi=hgI4@1u$7|_dI@jZxcLp`n7{!aK{SoeXL!^&lKVe9}SRVW0!oh5%s{qY69_a zf8= zx2#vnf%bu~humbQ#-pNJB%X;vEgri9p-|182_cV0tM3E>$)lbodUzE|HubAG|zJRJdwG{wero`&qod zU*u@%OUauFG6XF&qesf+Nxy$&`^ABnxLk0WGRn2#Gv}H@f+U!AsB|4y$y< zVWl)-y1eSK^gccEJEu^(HjB%q@D!bsLsvtA9Ngqb;-zSR6C3#8Iu89s%W{u&G!7U_wgZ<7l2AWJ_O4d zb-o}450V<(SVcuexA}$YQlhL+w2+B$hw@}Xbi#-vn^6hNHD&w#FhKZY4?Hdi`jvhp z<@Zz-1QUdT``kyLF$}O9PFhe9!6B)9Ri13iLyUr3S1wcJyfzP?@wy#KmTrxg0UCM_ zu`G$FTNiUC#M!U~g1Udx9as&6w0Ik%m*3AY!u=A_P1JbYN~|Z~x{^_~ujn$EbmodU zAk7cN};oxGjtCt?3{j)EDZnJZ9)#N?EKS|(D ze5?u~o!Y<&bN{7Koi@4N@-rskk*j+^Z?f<}w1p5KX!DELK-Z{4pH;u-ng`GfT5U?? zuc403M_wX@@;Lh745LNQkEX4k#qAA93z89f9po2dWa5o>-FQQ6Kcs_5DB!RJXMt(1g2%yV z>L=(uIm(H_8Alx+q;{?KsU?3SAZF{?%jtC{G?$R1#Y+5TK4w++nHrCu!IHd;^?Jf5T$3rMUa`l+8pGC9X=(q?y)?T@%%w3wp)+oXdo=lF%D~K zhaN8}QO3H(1^>@5nlc7}&u4oB`#Qb?i0hv{=J+5-H*xZB;{I=2mE&{Kk6uv(Xhqhu zT5*y|O-ZmtUI@$-YRdm7h}HIPFwILl0tFf~ZhOFHYRL5Fzi?L-As;-=AR6{kEj|uf zP2jEqUePrK-Qjt3%F~>@CE3J{=4Ka7uL#s9DXu3L@Ws?Xu8u^G=UjJYK2R*AuoJY; zV#4x;DtaFcy)c4<6{a!RS_z31)@_TODALem5geV{G!f{pz707C*$M{-S7qgB(p7i`S0G@6+$62ECyR7XT;2>iRUb_CZ8b+O{PSdahztqnQqg-u? z+IV1~EBo-|aKHH~YnqiJL;c z>nP0X6@U&FgZbkVLt;m}PFnt|>?_YnpM7A&TV@;l=k}4#Z#zQ)CjAblR*+g{1)FrI z9PawVh!LtSwiK5KW+6#h449ZrO4*4rwW`WS2(TG?DCE)Qm!Z{;!AhD9tV4OM;K_ES zvwsO|JmNj4NqX6d)*6K0h^!s)9D8WN%34=BSEi^P2L+dZZfPE3s0zgXitwIlU*=yX z#;bSFnP;RWU4qkT-4I{9wb}d^%wf@slp#OdZ}3(56m3NWN$2hum&DHeqCqY;zy5wg zcr4H4|FcwIF$WjiYT!0)YTQh-$KC}CwhZm3suCIM`~xB^KSX`)X{N{)o+il?w@4D+ z;N6x^NqW+1)B=;lmF0VcaM*^Pd4MpL9&gs`tK-v6?j=q~Vp3Ltgq42Mh3o%|W#n$R z)mdLeX%R{p=osH&xu(^xkRuIDJa!sIKh+}vkM!0n<>ZDlT~?)6-0MWtqe<)fW9D{j zvkVUImK_7$VT$Sb`5kdvo>z?-*tX7x=O?~NT2C)EpT9GY^lJzo8zUOWuJvcy~3Wq>xvKeTBjIZ3Eoj7MsH&~m{&CVKu!6& zJWs%|}ggjs|7 z`TmX%mft_RcNSh9L|{9N>N#q#QIelZkgUm+H*XMlL{eMlwyF8pgMev~cNPN)DoS z=Aktb=EMEt5?pB6jP8m!cqB{>)!f~#6UmYU@ce2jTp#HLj@*thDtjJ?Tbqo*DkGDz zU`eeY`$-;S4HkwXM!BA3l(s)^A64lG@aRwW+l@<<<~sl$4#; zR(65lIQ;h?t3`&SyM*6%;l)t#b+2mL92_t~UL+Y#7nor?ct&01eXo#s>V>mN)ow

uNbv)(`GNFcdnR}CYR^orKeHaM}+H-u6Ay8sdNh%+@Hqi@P#1ezN6}Gv(=|W;6)C)a=xX3 z`dc+{_B<+6=msvxzo!XKmbsXYS_p0LYl$%x)xW&e-{!|=#-ql6TuamYfd;mkA&Jhn zY9q+Pk3PD9uoKA!_8l%jy42Re0$U*c8e=pY%(CX!UT`G|F$r zpuqy~^g|R;z=23z+P_~mMF8KgBdSphs7__D-HLlj8M=I35*#~J_YDS~zh>d8fq_;b zQW0S%TX*#+E0u$VoVRzqpuy2H3DO>yyv>vFh0WRiS#5bLElODtnKCPkKZsIe88;uz zoVw8{xZq*yCpOPWa%>k2-YrK^)kU2^0f;4>RC}|>8fB1*Eu%CTbO4(VPzpxxcI6UZ zC@c!EA{?@|btW)@l(@$xJ!=niNvC{iwgLXm-a!4>`ib^~l9!u$zG7o1QL8|b(k%I>K2K`9zenRba%|H!}OWEu4^CLWL#ZOxi>x7hQtB;L~5B z)h<0O9CAC^X4HH21_4er*yw%Le`3CG8+Y8V@hv3ALtAA%TX148yOb$6H(rU>dPL_u@Mo|B>Y zLP9m`SH~?A2=EirUyFR?SdqfnGAE&Ka1sC{s7F>2Xg)XkJlZNjSOkK*im(0v@b)u& zXE`|vphHm<)T*9pc?k~9zswxmpX!%8`_Dt7l{^uFuclA~8I2~VbIu!@l&p2F`>Jk- zL^ET*5WL$GWEotVzC}7sTVts<7Ud)+11v9`glFbni`X$h&v25Cz0MpPF#tf^Xs{Q`Wc-$_dzM>_U3i|js0iVR z^3$2VM(ORQ+a@->L)X!Vn9YZ@bMk>gsrLVdreL=C16l*jcsEQN*<@*vnHBphaH%x2 zJ01bAOT4RurzsvW|9VhKh~OK^hY8QR$|yoQ;k2tz5I?3dkrJg+KGfC2zR3fjM~_Fd z$VrQ?ww~yq?Vqa!``Q(5!Xr09-=&Lyri(Zit9X~ z;X#;Z-s?`Rh{9{ASt$%XRY0%)Q^V9|q}33#2IdnyfJ5=L8omh1d&eIufAg%?(4v(* z>$T58cj9`7?bpGxPgE5lp|{Q9d!{7Tc)a zUYlgy(va#0GYOuWS!}wn23~fqb9)F6K>bszRL8imS&v_=BpN%z;g0p-5<%7cYo8A2 zth$J)HMxajecLoY@n#aP`2-Qf;8li;8EBW@>!d-3ImTI!gc5 z);}{7C?BXYZej}{Ab!_siNOM*Jb`}tMa5=j@7#6Ae5_f!N23h@_A}#LyG%v~UNd*d zTT4hlACvGT!RRMfVX_azgr0uF}Jy83wAy z?Ip$(?O+T+YZTumiP9rB;abfMhy8B0PMBNZ>m!f~Mg)uT6<{z3J?OwWEN|aMtd@*% z+wkfCX5e$v1JUR0iiLi3jBWoam)i>P7RiwLy8RLuYB5}@y7_xE5-r6!GW2gG$={}A zLdg`TQluhc&VXMdB&>vg;yo-Cs8SqyTY@GI$FyJs50?}(tQijX@p<3L*5ls{l{~zT zxH{Kcl=sjVI1)z3oW`B1wH~rN%F%X~|J!qCFUzPAW1cYR?3p9{Kash8QGI~qD}X|$ z5i=x&FCS0Wplo75Uz;JdP8Bx`XO-ktfu_9eByZW5WmFisf#O^`eVt>v+6X2edWwKu z-_O=(vRco)PWk-2|4eCcj^LpOGHZxt9$b^G1)X|K6y6zLW;fncH=}Np?UQ#~1`@lK zR=DY>do!lm+2Nn*SyHOK2QL2MG%sFk#$j8IC&A8q8vTeoJi5Cw(I`72x8uC#;v4jy%IFS%|3S;0&MR2%K_xQKErW#T_?%1ZCd90Mg9V!^S55A%&e{ z<^aeGMbW_P#MoYkROcXoE$TRZE%zlFvFV{H?_qL4rSVaT@%n%!!BBML=PRIGa3K_` zYoTf#^$a}Ux>!k=7xu_=t>3j1iIrGIGmqy*2Ka5inUCefS4J}dgBd=_;Tj{@QKc2z&>PR9Cdj;81B70GcEk zmn;(lF)dhFUL0H)gU0(yRxgXCzB_8iym#?(d(A}~uG!^mx)VHop5on{MhyLeYZ=ST z_2~8Xm|*I&p^kW!^s?)Hge>P26%i=9l2ncaByh(>;>M4DCz&9~jJQ*)5Vk}EQOP}_Y-yC;=vPwD7d{=%u=cTyhJKSoiC)x_7!7ii z%m)|&d;oaDfAa<>L8OSOG>c4pBSwlrcBU}*mA+fw3Ay9MEUd=ok&G2@-P0nLamrq^ zH*}k}iiq?hjo+(s^pRoF^J>lj-);dVYhQo?GY6jU@fnTsqXm>r_dOcj4A&l8!*Muh z6!)!9UPEUrg#WnO;a`diSJ2NxH#=L@E&3<+89aT0Dm5Ub?Q|QZv+s;8*Cej5C zf3^5U+l%H6HG!`c!uUg!4f9^O2}x+~kH+abo}w4sRm0mwL~6N*zQgUvgf>(q_&5@F2>NtFLlDMTv7j1C`^X}VsD7* zWp@8GG9j4bwoQYr9z-j1bsfA2UE(={L)hf|Qo{%+3W?naj$1)DXrzOu6VF>ugg?;S zby|i&zDO!CCQ&qc_<2mdoX7V|`#ZLsVkdWL@A81H7jIyKjS^2iWg^hJs$mTE08wDY z^y}f8$&*44fr&0%L*$>)1B;?rsO8060?QD84wQ^O8X`&iy%PW5&NiJ3LG)VYKNJ}7 zVG(C{-X7Pmp<+ zWZ^5yk-l?nSmDB0tMbDu_c1cwwc8EP0O8*g?9p$~-#WRr@BMh-F~8tu z!_a%Tg+D!?_=0*iDih(E%AQp(R)ocdXVis{>=0^u(#>yGyU~QWE9t&8^qtdZ+avG8f)(hF4%^Q>ROgn}|&;pKOR}o#BPtvi~ceIVNh9mAN-y%Q`c|zlX zZz!<749RsAM)>By<4@6g6OOG<$cgZV{-t!XQqbIJgryf)*<{LT;&+NwC1-sXF zADwy*5>*6S8$qG(3^nS~)I{pCq&_Tb=1XSx%BmFSaC*v&%N|c?}RwuQ!Her35jTcDXT`v54(_6X5 zHb^DznQ@blkUkLED)*^=7;p7lLiCnkw{(?dZdqdwhEaV}6~&1b*8T$sI8G}oAeo%u zt+taX(GDi6E|bC7!tLW1Uip#W9jBEUdIR_&xfG}A@&P?ai|f)Bw*A!5g%I`zcnNjA zeujI%w>@O4^R@$Kl(8M;>c5OlvIDW(pK4v4#Wk=dNk}Z2gO%~$WGw(0ml(Z^5GumM z!RGWsTG1_C!iT>5t$^~1xtIJhiF~5C;Jo8K%^Ncwp~m87aTrk9myWaHP;I-Z(^ANt zGQ$bKVgN?l6c+q#)UFgqR8(uH;-$a)G2Yw}gpy^%(iYo*J5DIn?YSzS7VNNqL)-NUmc4!UwOxRC>X|vT1b} zy;xb^^gQX_!iNW9!>XvUewv3^CXe%`e+!RomrNSvSu@qKerR9?(LCvgX)}*qA)hxr zAFO*}QKmWOiogU8Kg{1^+*=u+JS$E%K&ZFO40+@+W!H>l9aYvHW(u&pc`0d$FjepoHx^cXd+eH$9n4)P~q%&AeDC~G=hf`f*9-n^uyn^O^fEnUVK)Svepk%3GUe&jY|1t4&LMt zwZTYDfAD6@*x@S$3!L&|JSot1f?)tFngA`>y9Mf=KO>I=MW=wSC4JFd%5>cdvw3O1 z$yF%2keL?1z-6}02R0=ffX` z<#Kv+xECu&ChN1+Vc*S2QNz0~zj$KihI&wSz@O26Qw7@5A-FtBoF;A4{-GcC*3#%A z+Kh>kgPUtMvh^}cRH+{B`!m_=+N-~=NwqvTk<Jy0hq9lW-prRX_qGZsM|2%^BpqF3oPGC%fw#{{>U5{LM63Iao{!6WSHfAO&akoi7TLTf?1R;W{ zSu(=G>bh1>lIcX_$p0V{{?|329#AEldD6^)onkjSvOk9 zu@G1+&lbl4`JrVdRHk>0i!)9grf8kK@J)aN-MU9ah81p~Kyy#B1Yvc>kO0l4f;EUt z!8a(lI2^nb8Yk2Ci=yIbNOyZ;xcHm@g6%CMh6}_6*~C7MxR%$wTw+z7M44aT|rTmzMmRqBZ*$ z{UO64{E#TnmXPheh^KgWfT13Eqw9WYS4Ey0*acOhzj!grcn7;Yk9o#zHBSA6ptE~8 z7g&54^9n+-q?qW7d%_LS(~p>u5W{ITjET~< z37A@zykV?W3Tj$zhloJA^WM#+am6OViHa7`5a;~+iXybL=x!p&n~tNOCCMiAh8$yl zv7J5Vn)=XZyH#{a8m1=3`KEpt{3dDZ6@-80NB>HEr|BGaq zI5o9pMobB6 zD9NDK0Cx6ATRSN-o-{xtQrHRP`&RB94@v1!89`@pu z=1LzLkH{0?gZnV57Dxr$L!1N8HD1s4K-}(_i19#?s*-}=V0dls(@^$WUiNB0D^3T6 zO+02}Rw?{Ll;g){LpkDXmL0+46ULQUHeP8C8wYqfV@{7M_NG5f>=Y5Xx5`{D^S={Z zsdD{b!EuVW3L_*~5Rvo$70ry4pk@sP0M4?2Au&4pOYX2X2}Ws|CfS^?DHJzAVdja$ z|2?lUX1-T@TZXEN73FpOhv9|qz#kbQGS+IEQAr)tQSI|U?aC4C_%9}sc6>R%WQ%5i zaX-&wDk#tk?iiDyURhn?x{A}b!K4b1b7jKz}m?O6dOwZBd@>u47O#Qm|Hk63sseUw&pNQrQ%>5u zztxfO-{d=lTkkf+en<->kxzJ4pr&RtR%jbd>JK+B%+DjcZ1C?j{+UxK znJulP*sB5X?oI|SMk|{99ey8{{qf2^4dS8*L$8hv=4<^*IR;0!a5oQA0a_Aetbory4%4VOSg zpYG;C-k&%@Bf~j@OH<3rEor0waHPaDLI!DI9WKM6^FFZrq5hV@a2h3h>-T6*kTL6& z2qtD+=(QZR=yXW0Zf~IB;S-*6?WLfx?Aa$nAC-L;(_PL#m?h!>u_P%XLP~ewFwloY zMUHvoP#vlCVGvc{_QY?WFc&SOo4Q(Pt6hIJt!!@M z`X?`<`zp~`6k$P1TFj$GFp>T8PYgeQCs%gTS&=N9IuJREAl{HWsRl8Vn4<{@!ct-` z752eJ4udX7Ff*Br%2fF${gZZTdJOwL0K@bzzqNP$$8-3q5CklVHdbXVW??a9ojCV_ zREzz)yG3jCT1I!v9;K06TizINvAG2XPdv*5BKz(24$TV|bTM)5ZfiQ8U|}3qvSJK> zQ2C*@$kzD&2T3DL!rd6(w1KV4fhtY#fHMXsj|rN2UxjoKxN&?S|EZGy#?~^&Vx6v> zpex5*T-=C*Bq&^ce(gp3o9VJooB$_twEG6p3YD9K0^4b3F4b^5f2IPilDsYngJ3pm z$^}oWLvHrJ|Bab%An%Y;){7pDTDF9y7;`?ZYOgsLQ)*oBX_8=q^&ta~cgHl)P+Ts$ ztn|Lm14WM5^0&mV&ERGCkq^J&0P0x){TZ6rH}TKz!3I@;ql~ z4*CPFZXzx@e|q5_=S!vnw+JB%vWGg#Xk!6*Wufc7Th1!peh(EUxKy(sSM#f+mg*Pk zcwC;`J}|*ciV$+2KH>(FeAGN}rU5*rBflU@}j%tV81@0%iVG1Vhiu5`24D97H9Qyp&Z}S90Tdz<7 zB<}Puc1^emHM?AA0bbAKSIo;f8jt=`&^-SnT{oq$%!kG0S)|-8i2UJ$*Va&I=X!Ey$xTxtDvLMJ)mQE0rc4FI8;bp@6J*3LRoHl7;qv z4y@!044BTjE{<4~68e`|>s;7__Jl!TVhLTT_fple@L|LHAICQEh1 ztu%}79ik)5{6nxrMP*t)WssKqUFPJ=1h!M!94%S=It}y0F>zBem5usr0-L*d@|l9c zLw^i?sUsVrXsBB}-jJoK;}RlXXUZ!^4ypde6j7LI$9fcato<(`6gP_9sZItX0}p(+ zvFkE!Ds);EBMw!6Yseayfl~Zv zrUqd0@s+9v=m`Tev1gRSnnwNLmaIDmf*e3xP{Y;qIfcRWKL*~Vgmfk567u*L((mtN zSk9;%nyU`xN{jDh9$&UU=ba^DmvNYH?Y^%8+@8$Pw6g@DNqv#? zYV&z#*97|}G?=F7&WQ#EJKbrmtJYRJJLC{Zh0f{S)btC zi1S;wo$9S;urd3;18Ya(Zf&EQoK{zdyg8- z7#zz}yuQtzVD=`Gw>TbRf6MTsPlEUzf>5Xma`5TaabXK2qXku4lo1y0*zJEugJH7! zY9$rx>0rYwArCYmf|(NXhA3byf10ZRUNbqvR;y0>zSiBAY3zet55U~dG3 z{AlJFL*wj5)0AqLttd4sFN59*=AYGyv68PmFfd(fF>I|GV^;i^p|wej8oI)r<}Sgv z+a-_)Uowl7LL7eIeJ;tvUe_X9umNSlv>-R$0CBbl%j!SvL z1HD!>C5@hz*`d}@dvErkN7ia2qcnS7RVuq}sePatj%wrg$Pw~#0qyQC4{+8ffZqz? zn_1n4Q?>z!qKIzqLl_Sh6r=Fa3$x`rXgZ4Jatuc>S}QJ^GAFJYvYGR+2=xiabFi@* zj>wHHd~d5$~x^uqCbRg0>BgdJ(( z(;uNv2~~=stH!rLr02Wl% zQebn#9~>1N6)~J!C39)0VhP-?C0;u$W6k+{aww;bKMm=!#sNG~-?jxuOC5o*KxphH z&!Vn&JHN{o-YJZole^aKRt59ml(WdH%4B=B2UL)k>99Aljd^Dk3>sJ~H(n6Hc_A5P z($UFzRoo~iz;MV=zu#~ zqW_KXEGfFUD{aw)w8b^HcL`tSX@a-SN{IvxRNuY$T#*>yE7I)}Ds1)X%L%nlD$W6V zVaok4C9(DO%F?`@2yoIh>2%x`SPUO;rgErIC!j0&8N5cn-y4P`qWPLyOg0sh-+vlS zG@d3R7+LN;GVER0Bw?Ij3Y43zoIS96%kCMm02P3HfpNrsFy2VlUeu9tX}Kb=$114r zby`IinX>1`sCFHg5RvWETIB1=#MWXC8h^q~ZEzr=3nO)z$ihzv^4?u4NleJQCF!#C z#Lt7M@j^dKSPy~<{^dTN`ebw+@`lFEa6OH2F?3?&OWrNbPHii>2sXgeZ@0<7lK~sR z22qZ*)Qi(aEENUpczSa~1Z$Jn@7w}0$*msQjs)7I?i}@~5KW678~MT4O}o_T)lf1svKmy2S`9!L6iI2>b9b@No*rzf6r|ZG@ zQ6v0dx}r>^PqqU=6c5(N|2F!wdT|7-)B5Il8u@7L62*JEMj(zB-;nSaY1fVdT3e?% z;>0z#ugj-{vf3~|XL7S3#-Ki$D(Q5rWEQ;GQF(e+yMgk`o=R~-zfnk)sA7h!A)k8Q z29&L^;e9w(`u}%6VduF~U%YIw8X<}rv2S!KAeK7^6T}~l^p~4&-A!rUe)|Kh!!=er z2b;aG%NTYU!pD!Az?s$?h4B+}0C+zOv%MnK?LDn``SY#pL7CsGx=bL3oTH^_0GXET zRU#1r5#@$``I9nlLV-_KH3cc7es6Ioo3VaL@BF~;;82wpy))>*m1HMuaW~;b)|kpX zMhEDBC>ScbvfjnQe2@j}gbab607Vo-NviHfS^3~D&jeN<@W*7|cXtO2*`5^jgE@$Y zWg5+x6$3&~ch-%#4OsmZNUn_OTi&t)5>BGL)Ggpr11ibHWmypWG8TFLq_n#f@7n+|{>zsd&ohK^y`%f{F|7*nqd-Vc*CY{h?Y_9&sgh zjBv_fJsXaiAJ6L-h?)3+EXj#?42|4w>Fr$8dmqlZfQrWaBbV{OP^ICbE8v_8(4}>Q z_EA}NFN=gb0VA`Dt7kJw{jB1yDbR4D=VV$b^si10#)8i0uP0fJ`@TI- zsl(jx`M332lluM$1|`pUHlzj|=?B@tW0v20^8mX4bIvNbTtNoBI_ZZn20hw2Ch=O!L<;urqfVHRRe}G<0s|8Hvjs zdIHxbIcWKg*6#TqwBjg3DIY{pS)}nW)zxfZ_9c4g)m1}R)ytmla*l;?0Ng?(GS6*m z<^+xlTB*t;^-Pdv%n4vs8_wuDiZy{~lAIQ{)D*reX^qEFUc(kC;X`5+Pl^>huP9Kp zyg^{DFOP}O5jJ+}r9=Fxr@IRP1Zpj8^3-C zr%@p7x#)xX^q1J>OqkJiD+Q(d7{Jx?|L?7b9R7N>R1vEtj-I>w?k~<>E=b*Lw_)~D zUEjdpgZYWMM+{8u%ogVbE%oTJ5ySO$2%Pf*>%-Q0Ywb3Zk1M_teWJT0 zkJ9#I3@`{;>4zVu!I-~EJL-0D2*#zD%Uxbc$^OMOc0>-W`mdAOE=dX?Q56TfNKFxT zIFf3Q_#cwwphht(u2DFMpd;|2feIj0g+1>zaorMf|7s2E2WK&GJQDd*3+`nU7*_q_ zQR9zw@?x-?3ny!NDH9%*Ppt$VRL>9zAH)0$D1OE) zyWv|*yE-Ngit4hTq{CFJifYDD@=lVtr;x==^T?T;l>4;3^6!ebc32|~z7iMl$WVxr z%7!5l@LZl7Su`pt^8|I5R?z+p(Abvg%W?%v0hp}&2m_t5Jfm-)?XJ)O+m!)abZ^8# zp54`4CTQQLF4dZYK>Zo#kX$mZ5kxd!I1{d335nQ`6MonE2wk22Scpho9EFSe=3u>+i6;9N;OmD3K?7wnB0>94 zOVG{^cAPg>dm3Mx)fVSOOdzx-&#Mz8mL z+&u2mgW4TpOae^V<#HnAfk2dld*JxkrisuJTf%s0-H z&huVj%43*%Y#k3!o=IuSZpz)|W6SWqs6)hwv)!Yd<|l_EQ}@^YSPz~Q?7WCeJ?y=4 zeh*mRu*>YCB+w1ceQUAEFrGZS0zv1j)Up`Bzr|RlINu9mz?1;J%@Xj^Rx~2G;=b9X z#eRmn^!D+Y#lS-e8u@3>9n3%5IDOqXGn4vdQ;YJPN-QQY-h(wLrFpvyTOl@kRq;EM zXg{`Kc4}_IZ3Gu90Aa4J@DT6a#|lR4YF-&%tqY5}36`-Sa`o3d>@nSY(wb38nM1|6 zLix(>IiT!@f0Z@9|y> zo6NtML&9``Z-4f1B@#cqw)T%+pDB4AH^cx<$?tFGqlFB|o zx~uU8K)9@Q^)8`)tB5+#-%;oN+4A;DXU!FU)D8 zV1-1JH~C$wJKGSiORAiO2tXVGI#MQUUz2ZRAkRx9&poXkZ6Ef3tZsCC8m=98(iPhZ z)wEtGM?gMq#6IbfERG#gV6^-Kb^%hKA`2}w%@1x70Pof_T=9`DY;1kMzf)%+>phBv zNOsavq!-b;vi>m!=w5{^eS7S}-d&^qX;q4g*`rKACi;O`$;)qlck~ldP0UL9((~bo zCX@^03VU!YlQmd_hsP603d{q_(VM@*sN*kP1Jl2_o0jml{@463g>&L<_ZOM^fPba_ zwN|>nSI;?(tqHnJqX}1|1~FdKqwLk7hHbhwU3i0+V$!*4;IlzKWJ;6{*{7L|9TzpN=Tg zsgd?}0-){Y0c_4%YB(zXJnSum*+=u^p2zUxF6EA;zd;=%?*(qb$T~L-*>`}C`J~Rr zKu`fT$owklcfq|C65sKnLVN{_ex~pB^>N+=TA!*7@}0LXXu;bx8%&|yr@eI43N8D7 zH&vrJGzvNM^>oz(79tdMwYm1oZ6nbQ!;l6E=XxM0;AVuVYgc5|1Ss+NZmlkwPIgV= z?v5mjJ@S`ChH>p((l1J^FzU=7#A=kbdr>C(Qm_~?3gswj9nf+hpKhGcni2ppK+eB% zo`2TDjAR(qJ}T>+nCzd-O?C^1BYiMubbHXOI)J~CgDAi5opWNrJ!VT>-FJbb){RXw6=s!`{524(xUUfv&zwg zruPH9uoQ&vzu7gt?Mmrr;UsuWgEga9x`$+?Z|lpl|0kDjYSk(-)lY1c$MJDY!tiga z)#Q^gb!=b@MDe%?(CKnBm!J|NRqB@KhLNuiSAJEdnwx!ej)856`syX_Qh60Iwo^E> z{HxDb^tB^B-7}}0c>|A%8c#X@&i&M!Aq$&KJ5<=&_&cGfsa46cpH`9zo@dAp!#c14 z!$>>oMAMknx)5H?NL=vAvO>t4UlfNoW;hD70Z8bTPyRRYh<0^2%rEW^aYSk=x1ais zmlXmKSClXGDh1)2`x8V^z3v!VxV7!XMy$YXI^pI6oy+*-Fn3_Zs!)w;7Kvc6iRUdY zno6cH1IH=^*S@03RXRxdDVs8Vn4ojCfnn2oIIX;nMsNj8(riU&k0ll)5bLdK1i`;b z4T#A&mhOsjEAxvKUZvPHV%+`NYJudd(%=(rCa#Dnmd6+zcJ={5O0-aBnt;-SiPz6y zecSl4d){@v&>!y7^$t7fdcNc#;1U2Xc8;7m z4;zx_8(dupX_@2_{e!^=4;bI`|EvwibP^Mje=|Y71)gWS=+qkNYax!(Z25~M*Nhb> zmkJGDq|>ok8X+n3UodUREcjzAA0FIlA+TaVZiyesn3hA|T?X#OrSDggHyERX-xyd2#%9gOoiJc?&%eye+ld*~B%;^Ettim5ou~EcU6J z6AJOQcWoKS8VzpW9k{}np?W(>|d+03%?oXR$PcI~8n zavkCFw3^v*Xa;kwnh8_4eOI9V!TPB@@es29xt1d4Q1UzTpvHxqokWDzRew2mbve{r z2P^QWUkFGW`HC&V%?tbON#?I*b1zOFENuhmqH`xN0h}x@rdOvWnzo#JY-Yhx!rMDh zaHzEDTSH?D)@3PQaZE;WW8L!<{bc-HzjD+S>EiP7CybE_l9*lAU#9;mr&)aSJAuIB z5$cBSny`UCJHI~-wNvD0S(T-$TIho53fvrZ<6C-dlCc$#a8d|gLv)hyv(a0)QOt6x zJ1Z!SH7fEo@bk|&*kRMP7DVfG@n8)kayqF|S7(7yt!PD-xnv&x$X_@otY@DrX2tQ0 zcH?>>cC8ctyC0^F{;ELvS@e}IO|Y6WM12zCYzyThkY1aan54I7N(x9m>{Ny;(xI>s zHObl8@uT`h$aJbjOA5{rgHSF)fbIA+I9FiWiVpc?j&Q$r_0Qh01dln|_Jm2dj-*?YI0@lg*M&b*+8Mm>Vm zOKX`+Qw@32LpW0aOjSyKaGjI>Ah<;SMd9U|cZhI|zOs@AZUf$M(}F3#Fq(aJ0;6{g z+?!^&3P){OukM?yr9LBbt;mz&KGWg7Oq8lNcUJ8%#bRlGP@+9u$c|C zGG-CpOW$m~i@b9K!ui!0dRg{p(D^gD%vA5`MFD2`IzbkadlVK@Kqlf-OI|_A%4q*9 z9d>abjU(FK=r038{^Xv|`uu|3yG+ytZ0x|!;Z&fN4)I$6w z1o_#|f9_fUUJwbNSR=Y##JK*~&2m5FMnPHGu#*4NX>oFqLCv8_)}Obxveq8JVSrX$B5xUH< zgBK-T34Qn>1SoQ_6D67DQ4Yj*??Wk(HIknDnaL5S+fH#dG8+cb@G9a@B4>h)h|XrM z!hAR>iT0`PAKnliiV)+Eu+eGTzP+}2Fx&{$1Wi03~=z@EwX|4opO}irLg}1Q> zGxJPXGU(9nAVy6%Ro0K+CHdcJc8BqTP_UW}L(~(=^o_}XvBHbd9cM(4ta>N{%=~V2 z*cbIh+V2SVPuMx$xn!_9C4r+@!jIb&XI=s&xaAmnwQaRatJ`y%vDafm?@P*t;ZSyJ zlmv4ZO`b9Y5lE((x)5BSRJDx%hdx*Ih`9R?@`a0M zi@637S$4LeEeR7P_Bc3k2kKpkhnH9_J%-=sLGC^^u zL7+NZ8!1QZ2GP9zujNN#Y=i#y?3QiAIH&d4mjLx}nwvcRY@RFpGp0;jF*3AO& z1kG_hR7bJK;mvc3Yh<08aautOYB&j;lfM_!E9u4wp~3z8SB1PS&y$3K9E#4~8A-j+ zKw0@7faN(W7p~1JcaH%btQQLRrb1}WfXFt-4*M^$YJC;jH)uOn+xI|FJql`;E}WBy zH$&sC#WkP5B4Lcvv^w;;VirYoZadhg4-}T@| zGpDe2)w50PXeJ=I11kHuUFbCdEM4vH4hiO+^g>Lbm=PCp0*_QHqP^q#&QiAp>VERJlV6G=li zXe4xn|F6KsqowX&|9u~iuLuSnoeCR9-HRZd>2F{ky&UW5_0wDnQ|!U$SMz~thV9Cl z0{_a(wcB|*^7J|Dx7S{L`&?g9+@J0*rx+tW35$-1>$V%k7-({EIpJzyG>Lr?Jfs;w zutTfG+D8{e@Esooc6ksIVk&eWf#A)Fhc1z{kMzmu^+y?U4O3&Y;e@=xe6#S?F7|TLKMo#R2 zNL0PG$<`e7W5|B$yTtS{DiDP<_VDlEHn>-GJOz(KV%M=0_xe;p7N_J03ri7Q!9jv2 zeh*Ypl{$A(M+6u_TuG}5FbHMS()1q4qy7EPnKk`+;aLhFBgubvWt=m?H0zB$r}8kT z_x&Wui7O)xHr})H-4H+NK4Z@bowQ*L4p%Od)DGtEozN7cB}xBBb*$gv%vmpuj<}l! zqL<=eh~I4;8{op;{HojI%BfYULN5p6R2W>+9Y-RWtyovK7`ptLRsouwv25JJb;F7G z2|}H81(t^7`E0Mo2La!)MWoC0Dz;NR*1zh;;#$ken=dMjUii-d$|JiSkKbReK4Spb zWBKxQ`xtdy_fhAMrbQd?mo4CpRit2^?R zs>AOUZRzN4n&9}I9nQDG^Dv+)`p}J}*-MrweQevA!C2O7d`|rXv@z&FBc+61D@80f zb_PSvi=#*_S_(yY4c|f4oGQRT_^k*Bol>#vgPl23Xj!9tXmb0(H)zQ;O36J+`%&|N zc3PG4{(OocxP53VTU5nY-Ls?01iT2Gz_7{_5%w+cDc72Oa+4zuu1Qh#}=N4?HIL5i^4Y-D!qf93XEixG&B zS9n>!=_szZ;|Rpck-OSR8GfUeoCg?Oya>s2&-V$7lni^y`MQ&g^?Rjzemg&U=DprdxlAB-cjI(Y@r9!~gMqt7El*TFn1Micm|=IVCi)U&OEWc ze15X$01%cmyxS`6Sx7G^RwWmc$RAD(;sxGc@V+nrN(W%1l)k6lS+5|b+mxBjFeOH z9*w;U9ilB@7SmZ-PI?Z-FF_y+IM6-7w+20ps{@zO{Z7oZf-E zl`@lQTr)_pvuZG!Ni)HGbRc#-@n-mD7E5k!ffBY#lv7U_+NWIKuCEXn^#J1Imz`(m zP*6K-9K@!HbWraYWj8onPBv(gtBju9t<0CvPF2!fhE^)0O`5+6Z$>Bi*0f+y@qkvl zK*IcNBh&BS%t|=oF#?!}zLNEihLJ~7uMbovTTL>!J30(_1B&P0Lf(0;B zODQ9en##WygkMeEeVOHIxLN?PHucthUA62$Nh9pTmsu4&u7#aVkQfuO*0uv>L0QxV zo`bK8n46r%kOcA=ZqL_*a9I;0#O_u)%$5g3I4G`6dh(}L`3w>Y$)j1h5_y^0v|g|HU1ud%0g<0d z?MxG}w^d&xICBhE6TD*g;wr9N(Y&=LnC8k?W*qUfO=0XtYpq>N5z68t9oYkpHU2%j z%v&?s)pn8aHKU9B`N z^2O7kEp8j))p>PfAm2tWFQhn~)QA&hUh`#BBJui^G8oNel{IN-V-Pl#Qo{7lg2)Gaw}ryNf8 zBrxZA=%XwtI^~_+(#0t6*%-z|58~Sohp2!dYbM2~^uj5#oW0{Lv-Z~x#y=BtUYlIk z<&Ct%=@MyP;{O*2qALG3*NFpk^->IH4Vacez-Px#isDX7rM0~NrI-^LrB?WI?;I_M zDwyKw)`Z0m1$&d786tloz6kY0FA22|D{aYMZPm{Hj@QCh5bz>@Gc?j?wkJhr7s2bw zU*v%+{(^ym^aLIb9++&}l2A6fo4vis#r6zMGU;~~fUi%voRexr3T!CZu)OGh6Agi0 zrF&;fSy(iDJ!_#0P&V!k9vSd*u)7hRH319Dhb;cs1lF!zCfo>(431QE!#)? zDE!DR_F9HB&(Y0mxzsSt+G%6CYaRNnnSB~F%?(E$mc|iI=^Of>N{|z)2(}ulIYxE& zR++Ec|Hr~AgSjU650r4uT)!)oNVYtNv`(%R2*+|BR3t^aUzyj&mFb_S8!%4_g)Ngq z6}?HrtSd9ke2Bicq=|-Z{+|N8&nKDGyuFWJs!7g~G{2ZX`$m&WhUCMp_4|oQ$#L@p z*LFb4OGWMN9Px)%qito)!Uky)opm@*iuPntZFIaQX<{z=&82e9@hAH2u=IX5^v08o z$od%4Sf6njtZNz#pf|xWcs53daS1|l@)L&bR(G7V#liDNyX82cMkcS`z2u04mWcn{ zi!_p#H*}9u{^CY`tDn1A2IG=YkPcXxFj*-+N+Hz1Vegf#X~)eWK$Gtz(nx{Px`Opx z1DJAgk zghvjw64SIq;nP5_k%*Krsn+h9A(Gh_!W@7qbJ)4xW$eLk7W04$gCV%E-6y!bDAGn` zB!Y;m^d=d8Zvr|EL+%GxpO&5RB3uB9qUAH{E%Z{DqYIwtlF8fXgJ`Th2;@x)WWY*2 zA>l|_KLzT%Pgg*0$9f_ z9OsG)y!VWW;#^u^#2?cfOc^R0GB3oOTmSCecMe7Ax4`l0Dgk-T)b01SOXKK@b`#Tf zKx5fi`WxSFCnh8~>=R~=QT}BuZ8oN5gZ>Bn#z_xdNJ}@vljVDNScjR4LoxY~xwJHZ zi*8)Qm_@AGgz4*8b(3SaRRRaAcsMtKmJLcX%fj}d9u7U?inCdp0iW;CY5N_{CeG&d z7Epgyw1v`)k$U~=DzC7N-gktFL?^E|8Y8c6H2*!uHf)XJav3HjM`{G93%|T%M1Uh! zRX2oR+}^JBpDev)-e={*dDdJNi8+REM3vi%&}~wL7AKM-_u(t~aJK{!UmvYu)*;}O zgg03|nY;{Wd#R#SeN{!Qio?Z;2pQNWKG2Xurg8q=G70wDdKl)8StSnQCzoeId9<+o z6pKle(JI_x8KTrgy#eXEqwN4s#OYNlw5{W5lqx0kqq^%ge{Jh{fSpq&utmJQO4$1s@(Q>O8Q&idUZ#EMtkCY+xAC}`7IE>FYl}Q2~;QI^B7X+`db8cF0X2UKm z7b=tSq^Tbx5fNfCWWaz@Vwnp@xIa)GXtENt6T@})5%aN%Pw>4x1H$N!-#+WnbqV2} zeq#l~(KdCq^|S{{(xcji#ok$ z=}lvN@z}VGBX&HYuK8{!SzUj^GwB9v#2#lHFCRLC_b%`IX0=wUEP)8e4WEOG8eBE6 z@=F;d{bgucqntl)>e&khN3NMENiypwtk^~| z9o*M32h+zr@uNrSga94^tNNw^x#h9iP2XBQnC7sMAVlm_yy;`I<5|{^u%CbnV~ZO+ zxB!>${Oph|m}8)= z4EjYRiHQHU`eA?Nt$Dg9_8t2dXT~use=d|apglf^xTr*GMjYVi#Fp%cf2E6L;#QL1 z2~9UV>R9bl_c4i z%QUimiWmiXgxxJ_6Kqomw!+rnMHFAvUM*$8YjH{;%5-|EoT{3$SPGdZjxeawJ&prA zMdsf~uwGcF`|qMrIO6z^gu6l0Syf41l_?0)Pt#^c;~>73tTkEsGehWgJwiJZ3h}wv zhVpOKTSf0zgMPLD*zk0i;hJtA=}=zG!oHiGx%2YkFq%Mmt`5-F92lWuX3F~4U{)Ch z7ok0mDa+yu2)NF?rDPl4I2!F?%7S8$;p zMBgI)r5NTBHfM;^`fNee-A!Lw03bhM9XA!qzw3K}4C(X*G z3!UNmujie|!Nhq?HJ2%ePp|6D304v#r)_1dgO%siIf8O5;&1y@ps3L@3)l&`wv#+p z;-7ld)+^Xj7tjYb+9BN%1nBvFM`uhY_WLPd3~cSI@Toj({o%xkeP2TAA@e7@Ba;lI zhqC;F$CZNNd(f|`>2EDGt$cG!@_$DBw!$}>)!G@vj=EZ*tR(T%jH((=WNEq4b3Cnq z7G|UfYj9fFyM}?b_OYVNbvI7<83oH;?njS#{^7uw^O2TUx}n^#Z`x+{HQ1}70HgSj zE9h8i&=_v_9I}PQC0EbYp{nUFuRC9J+n2(NHr+yZ`(E@CDvs#|U%LSlaAH~uKPB4| zR6^(cj}Hoipq{eFh7(MyI)alHFp(0Y;sI@Q0SnIFBtA~+>5J(1A&##(!$7;ZlW@nd zuz0We^RLi~t*U)cwS!$`?n-1&+J+D4`&E4*EeV2_%|=_ssnaZfO3xFjtA`)c0}{49 zZ_OckuWabn5RBkz{0Rds1g;r08QBz%@68Hum2t7C`uirg=`&>pPGuLoyPKOVJ_E{K zFo&XOvb4l={qqRI<{0XO2w60oE#!oHilbxbT zCRUNUL}iowcQ?~k|F;-c^w`6UPMhK6KD5^&-CcTnMn9NDzlFJLtvMhD>YFYXiIsa@ zfk4iE2nJ5)kcmbQ->_YlfETj1!0gohHth2(2nr5FT2CJAeRPnbtOfoBoi7tdPjYr7 z?3D~6cy#fWv3UKypc3(t|kJlKS!rpTaZ=0ZH<6< z>YeqcDn0mjJ_$p<=|I)BqNCz1&)8GDyrt$^YO%@IXDacU&{8N({~h!DGm_E-B|=ry zCO>v!GW@&i(l_08nl)Rdh$j@uQk=}|l;hFhUztTtiAFcD*;yT0&nKXzi2?q|$IOXZ z+wv5MdT8N&>%i&+p+GaKRPl-mevRH(`JnXNot@1{t#oR+O5l=6%P7UvXjq{Uo})NB zhqxCm_p4+THw|8{61%U-XiNIA!+jI3ZO~1FD{DGh(l#n}D4KmK8>E71;Q;An#Ojzc zjMS#@!Q2f|=>Tc}43cE$E|oVj@sD9ax*56>bB%8`yro~DODQa zlx_#2iuayJ|2JuEk06C5IK8p#m2~4G>VZ4JTda#}P5e0|<%1*Z?iX5sBIiY2_dl=S z48x41kw)_-oEHGC}$hJz36M9~=2F>&$KIwAZ)NMzV5=y1DryqzQzhB$*u^Y-GXFtrAKaN(+JRp)q5k(f`mSn z(LF(Isrv%assNo}{8sDdn{`Zg7V4y?=ZEYocgLr2M zbvHFAB9b=-?N^!i)7+&}W@=NHRDa;d4O8_Olm(erpCr|5HJ7N#HyP%wbW$74_`Gx zx1=S4gId~xoj=P^hyV^s#sf7fICqn>6=cYc8YWiN4F+VFASnr(PuT}N2SG8;Tzw@- zU$E>kJx*2Rq_esTFndRwz6nKp2LVGU+(9-&_mC?!+J~#dv3mUs*OI_+mJ(dbwQZ~w zbJAK}%;}~_B}x1Id~qqxp6g@#_thako=PujVXJ9zU%3n!`qtj6S<%`Ny59o?XVo8X z%2XUJL4vxMUY7+p)&Q@sIxquKvnKT@K0!Fi@bt~*9*{h3YK!ZKxQ6(*7`G(Y?UpFg zAJa@gRCg#*^y=_n3Eo~z+(o*#roh#%{Mw{=Dx#oz=uhyq|J!vyc)rpTDY_1jew&JM zz}^{63N_(0R=Z^tb`67EEM)0b-|0UY8NPA3tSm?OLyHcW$xhyHPak)lMx{x6_&K#s7`&e*Zu#$FM!Q;G8t6=7BPIFwZd7llfx4wx$iVig$;6)=)?zw%|^V@GYj z08RV>sD)zUnM8?sP#u?WMv*^*0HR{hC9KKDlT5Y}-bdk*3u{*PS3ltK_tamDcUHgQpddhJPNP#*u(v;Ho4KwtUtQiO zv|;_$-e2im4G|-G09O7Q7(wwy+>~()&z@3*70ugmw3bF8i`|If4GbGjlj98i{(eSR zu@VNKKf{4gQ1*N6%f>cJUCX2s1LBDj5{N`eyZW;KSb7d>{Mu{tnz)8F{?Ca|zV^fD ztvj?8<95bcK0dR0Q!z(4u-?UQ+5*g9?StX3e`<11z{Dn<=~0U7ciBl`h2?=$SoJx% zK!QaWC>?4%bnz%aytm3x3lcKI&2aN?psJGk_T=a;R(O3p(Ub7bcI{_TkgsOTJ;nWu zU42#pxIKgYX~lA749F=C|FW)IA}sjf=md3s?cPY3V*{fJ%r`lSFF5v)_yvnwxrL@^ z=@5k~um;Qv6a`x|W>}TL@2JOk464N+CpPFJIZV|(*A-BTx1MG?5MmFUEgR+f8ed|I zlWOk9z(Ewv2a{l^Ex&a2Bi=s<^`hGA7~S4c?9SD9PUWB3;`c^Nf2`DW3S5Um>?>0e z`c3Y8ID^DyK5bKc-kbhNLmJJXxGD6b2*xRF9>6n(Pb%3dyM3rf#XH@yESZGGbuR^X z6c)MhTg@mWt=s#^U4)crR&sjD=LekT`aGer^}WN4=wlk*xz&4@Si}%ALiVWq1*?|V zl@3_2<1fS}mhT5}9@FC~v&kp`0uX$+l-Y8&pZxKUT93td zxK`ZIr-5+Tt?NA?YIoY9eA4eJEd*)9r(}cn6BJ$iCAX9Qr!48-p7yms`;dqIt7yGj zLo#irj@gVE(`JAy$Fe?yRW2ebjfM$qkf|G%a54PZ3S!|FWaN0;0`o%F`C?wa#>(-= zDzdE6@5F_bs1g3h)zL}K%p9g5)}c~sJo8A2c)r|HdqJVt>$VP6`vP}bqC&Ft{sGRV z)SA5jjNQHal0KV@>`bWg)YF$ewodS6(Q--{um61ixq9zBgDhOkoX>g`_YAndxo{RFNzy|>?hNk?YUdpg?w_Y?#zEW&A!n8`t4h}*`dzryztnP89zMcClm z0z;tWUBY94zOJK@B@;iJbi%A%Fa9Q~#c6wrJ~W`SJN;`L*97!@saY6JjLtsr?n!(B zQMq1;IF~)n7FwJ9OFZkB-`GK#>H$a|hh$Np76L!X z!5g`XDs)7T-fQ#8h^b)MF}NMuxA~L8PkWvM?C@iC{jVvmkRi2RuJ*>Vowj(I7>S4x zXV-%FZIO;U^Z)j>t%=9M+b%{3p^OBt%dD6mSL}eI?<=9ZOxs54J*E~m?1eFa-pPaZ zqk4IlTDIajvy}5hUDq{9U}E#IbE|ONx-NBZ=XQ_Xtaf_S!*>|;M}v=qAvk@$TYD;D zxg)n|#hrX@3@X~oZfo(IisRGCCjv9j@u$?U=R!>*R z)+TN9W_p7a7&7vXo(y%H@u3NUE<=%umn)Z< z9X6y?mWfO_vFKK;$A1 z35;jI9zbXKUHTyh{k`i=AAJBFOWM?1f7M@FqP1?>K&qh&pkKJyvcm=2^EmFqQRfMU zZdy;9bn!Y6%*1{$W71>jA+z*A;U~{iKf4~sA^5~?xHR$DW_j0p^wRtG5znbH+!xL6 zg9o!&Gjra)=v21p<>)5D;d--51RtFY3iCak#b3~(LAB&vGZ4lM{g*!5aIV2%vP*BHO>#q!7%LlyK?z;LPEiHNMC?dqIT0Fcn4#+ z{EVN`(AW6NEG(-fi4%e2H%fLU`#(7J0Z^bJ7IVAtCC|fpFRGC4S4p&icYXPVl+1n6 zn`4I&p@;W%>1kF)YIb`T7L|@a$w8E&>PvF#f*t@UzMR@k-?B#2;j59i5ld4kahVua z__H~!TTk66#GMtLd4vJyM-@#LidDQc<2BDqPVdW|yAKKUwepA&&boF0QFI{yDQK2@ zB32Ievf2S=L==9gQ2^CNdzg{gbv1{vCMxO8Z^#VDr=*=Nb$a+QfTtji*f0@y0_JP< zPF6BDU=;6i&`gL>tdm*aFXS~{Hr=>DjW$;d)x|bn(&FxQ;@Z-dnIOdqVAEARqkR@G zG$8RQpdF*JMD}2pAL68hg_2D6E-2;ptozUSd>D-h3``L8<{1dN|q|1=MPb;c--}~LK7-n4lnO-3D6ZKD{aZa<&_~hz z!gf_!D|U`DvcJm1IF>b+0h%R*EWqOTsGHKX&~1d`8#RwK#~K?!RY?98(ul*7-MwZR1f~liqIu1lc0D=gJ z1)v=f!=CQ|S3lTE_V0^qwx=I~6bdkNJ{N=(#r7x1!RCtB>%TdUhQq5*HpfQbrI!a_ z!e~=)3;y4cxzkU4)#4VW_ollEIrCTGekp_6G`L*$`~8o*pc(U^OBOLtZy`)FdZg{q z4y_Y{lB4kWRK9$trk?+n?nK#lqohQ%6w0uqR?`WWB^=sR+?eETn@9;3cD5dl+21~u zz?WQ%j|!FhsZHNy=$4xIlzM4XlPirk_HAL7z4yw)_?LC$>p7d%ei!oB61C#J{sX)k zGESB1`i@-8dD2m;KB0GZTY|=2aviFLh1v3VV*MAy5E|%C38Y_Wey#^cuz&fc5h1oT zY%Tn8`c`* z%@KvWjoWLfYp-e=Uuh*JhN9@EEMyB8e?n+r)>J6%D6W*)95acgt zw_@$FIOAO@7}#CN@DB5k-cjh*kJ#KD-8$*SjI;8}93&1qD{Ir)@+iNKT$4!m5E+%FmjIGWFz7Hfy&-kof zO%VysKdMyK>mcrqMfyN`%mQbY3Y=Mt9wm1=#ywMjZelJf#VlTT|h( zF~A8bs>ehTckuM6pT3f!V3lqav9t1na*uw*`p$4dVyE;9D{3^>IP6dHMdII`|JN<> zQOV)d@iTaoN8hU|;%d|PwvMyJ0O|!mLRw&k@+iX*wM@>l>IL$&Rv6oAQ*-HhzL<#1 zNG1+r+^)daTIe+aPbc_7&T9cz1@hpuI-IcW{>#P~QRp3@sx1NIqlWlNP2XJ0roeJkVo_REE z)XKZTt>8NMH8mjAkjthITBhJkqaaN3jH7RC4V-|_9$$*J;=G`QI+IwaI5x?A)AV)C z!Y#nMiTUsHm_*i((&%;`u%;t>Ud7f>ah}?j?pajTL1z~P*ER8q4|hQBCNzIM61ILj z0zxgL?~gtj+-pZJNjqOX^;29V>o}+5g`*L! zI^TO|5j|zl-=>qeqhGtfax3m(e>@bUjm|elr{sJ*;}l;3YWh%uq2&DdF9{m=%*|w2 zd!k{>RIK}27Z5Wn^dpJ98QH_m^Q25FV(PMM%5($*Xhxr%eqek zePWdW7UHwY%nBco1EuuDgO@N^$`x~M3*bEs@e5wOlLbRA67>*zU_APdhXo(Z*ufz) z2hg)Azw_(_4WvE4ifL<)LI!Q_#(W8oGdZuZBx1vXq!JHZlUh4?Ur*>#@cF6H(Zwmq ziY~m1-hqI7sA3-wCf2xVpt#gy3o`F!xk+<_VI!{=sfs{}NpYhoJfus_+W=~ohc_%D z1x>k`IkM#*8kNmfdL!uny)hwHXvY?{Ke(nq!4Hbq11bt|BQNXc)RJFf#;MZ}I{R>m zrqmFqp`riQsHXG*Uu4@mPpb)M_Z4=zj=BU-AfC`y=&d3_c;)@8^^+ zRAuttwS1d_kJZ*a$SFxRAX#5d>J52Qa)s`QA#LdJfFnp0Q!d6pyPf0t#%QeQ$uYf7 zaPlNvwsxN5*AWCAw4w`@^Bh4$U9UHmm5Wusj)A)zM}gSmcwMs|hU_p}zZd{QK`)cy zGM^R&O#W$#rbWQ|10mOkn=7TR-@&E_94CBP@b}~e&Ny%+(fg?@R@ZI2dExac&au!TRC@Bm(OVK4YlF7%`D~KM zqJT}eD7(hrkwNMAmCNDc@AhLR)td!DA>dA}Cujg(nca1~``Vpc5h76oMQ$vsP7K4l zdAQi{d+c+3CsFt@)MDU&%1*x$d2{a%pOF1;Nv^)^4wdF#ABUfco}YooXnQ&95Ac8# z2_Y{F7&LEAG`%u&9=ax$%&%)w(#QPqvFch%AK$!Yk<(PO08>SNNI1yyO6Y)?-!ldi z!Ox;-5+!Z{BMy~|Ar#@GK_!Ilwi}7^=BzL6PR~qw9#bYMRu}ms57!fk=t#(-XBQn2 z$I#VvNj9fk>;1e1h`W;>{i*_;FJYnpGtn*5WJYER=y^y(o zHK3*x2TBrwO2qf`!7e_G6&>k3%Dkw?Bl)AP1~@BzhS#(*{&_vvqWdeK@~xKlNb%cD zoGC>9m1Dce{w6H@hWV{%8Vr1d{VVc&uq;oSE-Y5+z87*6wOJo{D4ImJ%B!){`a^Sz$(Vv;p+%GczQmMQG zEvibMV}98e!iGcbWp-x}oyEu#h)OFR{G8!aTkGF4F7iwze2b+|_Ef^;wm}I#ONE7jx3Rv>)%4P*4Gfr^K>b4L-X@He|K@{=2Jt5> z{(Mq=!GOxyA$4NeiO)~=x(OgnI~CF89_CuR3Kat0nB5d5zm5|%bMXXG=%UyhhhumM zX>ntYD^g0{8kUBae1JvLloTPAak>S$Jg~~*Je8!^TsoYOFPQdDivOS)+6RX8Tc`S- zIz({&3NMmZ)QbA1N5i)D-i#KTX^ru4X?PvAlwRH|5m-apB2U>Owy?#3}*-~Gz&ztOKlo)N^Hg4R#4K<~ggM;lPV@-pc-1kC7Z_ZiGK9&ELAi`C#p zR*GUnwLcq9=tJ$}+bamNRaI2{`|{+9OaCZB2zFA-&qylYl3Rx}7VT$EIagfZQN~4N z06##$zXcXV>Z<$_OuIJ!jy$$VQBW0iU;rBTuQu1WVt|h#?GXKQ!c~ghLdqU$i zlO7zJ^G!$*gKD|8LRS~%IP$klU)e8$g3j1xV+4^}{oZwA==@tdb`nwrJrRBXWIvgOQpcQzs3B zO+%e{|C|M~OO+wvsvH@0UQh!KjyQKUNiJd1<5^Zl{1$@>@Xy6vznkk*&syx5ns~ey zCV&i%D;@5ne6lMjyy!*Lz>4=LB=bs5=3wT;Uv>a~YmGgMOVP02g%we0e$oJ97n>ce z;Bcj^XYluP-uA?YDChah)nO|yNGZywCyVq9^*0LPU|`TXMw<0nW4YDu-rU!1_id!f zo5m-~$k|-@C2R9BSn^k}pouO#Re)L^^i+?4hB#+<>cJ8#fk$onk&B3T`irMFlY>_P zV!AiVqrVt+zxjy(GK0;ycAWa+pOljG!CMvflW!w>P+$%=_N$ENL6$cNy6$LPEJr-= z5WP@@fFh_w%ymmLrSjR}2*A~8%@%3IH?rnXJ7xboisbMXsPvXp$|bZt2nJ*z8)IUied??;pcij(0>+CTttQ6&W00@`bf;R=}~xgYNMCkGVus&d}x_=KcSZ;){et_k?nI8|SLL zumwV&`dN)%8?1ShftB)$NB36M?4b_(*AE9roD1^@D%HHR(@TCS|Y{6@LP7 z=Vv&k4&wc7FTa7NJwauK2yI>ZXvu}fM`&3rZ23b;UaOsKbaZivk0vX&43}GsP-S-5VLYT*A7-zBd!y|JgwWkm^C=8vc?RwJbh<4m z1{a~H+kr8@R`pV()*aR7gIC?cv2ZuCHK4BGYIDus#2~4$&mG^DFQ`AMKnI%WHSNj( zp|Hobgr~NYb_tSw`>YDqXJ5S3!myT^+3L}j144mO%u=-u#t;) zBCmp*z`8M_f{41L;+#_0D!U&!V9dlpSj7< zhZPTEMmBtU@#S@579*cSQ<%{HcMNP||$~ z+;mv9il^1cF{uQ-w`h7rb5C2b6hxPmA_wd1lRihmZF4Pn)}o~5xD0fw#AV8`(=S4q z%vH0J78(@79ktH9`;>RZzCW-G(If?kBEA4 z-)(#2w^Icq|MO@m<^km$aQXX~b`J9=iKQabdvlM`II3mGh9I16XZCVgidvoMn zJ&lS(k!uFx0#%*8%+Yt0xEniRsSfI&zYJCW;-je;&cwOWxBFLCHG4%2bzS-HRY?n% z{Wz6hH1w!|YY4jh6NNWvjqL0JLuZJWm442!VmZv;x&ivljPOww7|2Np>g8dIcyGxX zh)?s5unSqUbXHN=Na$Y)~Nx%B}%+>n=x8bITuRjMp=JAK3=jnR+AHXXtJE`D@ zkMeA0+lA%9y?DjiWoGKD!?V2G+N2>*t%clPqhdR;UPguW?ML{i)ty?ffBx%K0%JBN zmjlg(PdQ$i6A|xUX>63Y`o+}@JiLmcWD0ni)6Z)`jM)xHw)|!#uI#0$x_DOJ_K6PIHNDHH;Or-HIRhc2(6UCx8TjP?jw9| zJFN` z(uf)+>4Sib$_vNS2ReYSxQL$mGZ0X+e*(%KYBzVL5|lk1giG`?DDd4cDNMQL}oZg9w5 zEB0kOAOr_jV`mFX*|FEg7ynl4EIxIcs(dh{Ape`8gZ|2Wm;`4J?weIIT%?3<`i0Uu zt_j-lw{I-}Bv@9vc$MRcxH?`B+hUMvEzO#+P@K0bI?}6ZI{tySO0MhC`rkQ+*hQk8 z_Fm_|pnVb?VVW%Ov3*Ud-~}2$tWN?icbm?#3yMZ1Z|fw~c9DD~G;-m7u|0@tLVoZP zrU~Xcb^aaiWZmGf)Bv12yHpcVUfEu|S%@l4f66Q{R$pd9s(cr%FFL{8YubI_AeT@9 z2o$kMS!W9FG31ZYvDn(s>lCMuU@yjN`|v?{a5z$aog}fY745M}p78U;MRVB@DGm(h zVw}_ClB`N(qI*m&n4~k8)8J;=m!j?2kH$6XosnY)Q5R75>xF}*eA;Hh<$$d*e;c9E zO9*=~rrMzxuOBER#J)G2(3xXJKnd}7EO8_>om4ZZk5d}k>A0ZJhmP?^{~kO%!WZK9 zHN1j7Wj?y7t@5xg*jyxd=+y)6?6`Y{LZeB8ETlvVdY?ZrNA|0Lw|tHDbX zY>hqL65)h&1O!_;5Vrn59F;dli{^kxhfEaE;2ya4VeBXa4YOiw^x{HuIs6-=^4n~2 zDul(Y|JtmIi4p{!x(q#Va9-82rjbYSES##%VYR4W)4jPj>_Sb}0sM8BWGk^Jo2A_{ z14kd?*bAz)wkm&Pb<(5=$Agt)ZqlC_cuTy#A^Y`v(HhWZ5h&XnP59H*&fpPM@=qpX z%1RAcsk0xe{jT!bt+O(QvA6L=yMDK+Z`ZaQcDabgyBQ2)BRA)zfc5XpU~-x>e*gSb z#+S45bCNC?sHW(ns9z0$t~{Ufy%5&>+$-oi1oS^TKmqI#ksA19f-?$PdtF2ROtN4< z&KTjDs6P}@fZ5#agI8>p8xC)S6)W-!ITBFSSNGan_vU4)yiK|zdW8($fo+R~iHgxZ z#C5LIb(a)C>>Xc;dpW_DXzami4hZM@(^xJ`79jQb%1KH{5m4N)^(MX0XF6lpLXx?=w{e`w>2bpkZD3&!ye1qvQ_DmKFrVuE zm|nBbf=MVgBU!lDynOG7XjDyvA*rIVPIpq-0j2PdKbw$AW!1St;zsWZ+NfFzpugCwnf5~jDYMqPq5syD?TMoRn9ao6w!upeyBRy0 z?wO@XC;1)D7eG@r&?rJ%ZJZ=_-#1_U^VuW-3WwAG&&wT3ABV0Bt6Cxm>ml3G?YO7| zJ*z{wpDWkqO2=~4lfk1Nm&^2W=VDAfwkqPV>VK;?Uao7ztiQe!-znNe)S+C5KO(F|t>h zb6^Yy`>qgj?k!n>fzEN3#TIT{>Qm%|CtW#crBgt+(M3=F-=A$DMT&e$iR`&x2ZwqsA7Ru-YvG#7bv>W}HOqB3Lv{@8yf^n2VVBA;ab0AAyd%sw1ZOnsRxvDF57 zV1bK??jQ^cB!gKt<=c?LKBJ-d*Cs(=<;gW zq1>%<{&9ubN9WXqax1Zi>#ziF5bT>hs;tVogH>>3)bcsJ z6D$PKkkMZFN)q{qQb2b9Xt^l6oN4c*#W}RUNG-O2lo2@7{nz(>_JhV8NK@hHwCbuA z`X?!-6I0qV5+2mIp1k8$;VZ~UR$ZkO7oR3!ED>HaU3;4>$@q(VC175^5<`k=?BO{H zntGV5#b?|DV?5^&wqc?lAmx%w_4%S88h+o5&2MaGRNXES^zq|>(5?}xpUAeo$Fz_5 z=OgE00%_Lf@vLn{etFKmcUk`-Mv6tu(GMRd*>w4gke;e&439*AwmwF$gDFe;eRP)K zJ^|U%C&okS9CP>hg|vfLzJJ<|O*l`*Yto~Z0RzNL)&5_K7D)u1sl|Zu>MEahDHia) zTMmygrPxZq4;OZ|qwTx;D7`!LyZ$(pU zy3%-k2W_f39A^tO#j#WjN!Xmyxp^svo%rU}r+eY<{qARwkJ2P_n1$d{u;fzix4NkP zgI}Cw5?{-7QDZ+x|@sXKZWkD9~ma9NQ-^3P-|l2W>r5UgAIFUHcv7rG04I?cm(V;h71wl z=}*zfr>6gpZx`D;y>2^Zt(HQF-5i`^|GAiVV9=y(Vh$qmbu?3@O-Z;ia%Bcuo6*Wb zEwW&T2ImT|^)OHRlL!aBjU!7a?rfdiVL$ALz7H+oX`$a#U6a9e>!t8Fo8rR-{}>@i z^r=t~{o>?Z4qlDInNy6>7IroG(Vj3d;9Rop_5ES3Fxf3U+cZ;$pN@{;pM5DUf02N1 zP*GjXflu=m)CV=2F!iX3Z^vgX_dSuw8mz1@iqv$0oR@{N_*=Exa7fzbzxyk~nEDp- zRJ3Afm)V`16dB}!jHvwB-s_Hqp9!IXK6}cR# z5;u)gT+I+ZMMTVA%}_MGyhqQ{-yVGVU-|eUvi}ORa7jVsEQKmXq#%T;hiv-BdGqpB zFGCrBwgL&$;r%Sj5}CYgUi!|Lo9x#%c;YuFLLN`0lOX}p!&Fk#;_7sFfW^l8;olXR ze8^;RkK1uK(rF2hd=rfvq2lF@q!SX>Hq>bs^^8M*k~Cq+l%U_U%Bti+JpV60pz2xu z)@zc-o1*ScBK0X3b6>WYaUorbx&j!FZEcqj4;L;OAXxhY+wPN@I{Soj6hZq*!dm$r z@;Dyjv{>IIcrE}O$%|1)lcn|bnbZ7o3~F0EBE~x5cwxF#o&v@<5;pBHfhY0WjQY(; z74d(uY;<4YkfQ=Zw0h4kU$vQaOu&!!F5xs2^Z?Dtg~>^ zjQ2H4&5v;`Gw3>);BLLVgM@d$^bxzpj3U}i$v#^Ft9EL#Ro+snHdmJ&(Fj$!=yu51 zmgLk;fGIosa4hn_9C^=fwT1LK!g1z@E+rC$i|aZ!lVm*iU#F%}{$3hhiz>f+arJ z0@C8%VDjRITj#NJZWBuSkc}t$qPO=M`t#IBz5(cm>!#^2Q6}A6*uJU=!Kcmv*1etf z{ywX|^R~;}E%MPxsF&lZlfhUIt(o=K$D|!sLaXj0#E)461%VfwA;1g~259IZc}h?{ z-P$~0PlKB#zNa0{`iW=mq9FMKGeIoM%C-`SSrCBLq1{I9$k_d%ZV)wbZFKMAWr81QkWTp?&h zr(r_$53j}60&$XDu+C%)=*LN5UyM3RIbb+;u}Ox!M4%QA^)6aQLSldq&5*j$aF>kt zk|%~DvvG>p`e^PK|3OeI@kO7pz0%U1WN_WOaBAF>jGyhCM6+!>7VDG=vT+MM6d=k- z*9@O!Bf2fGi6mj@*$=N2=>hUdJYvL=9#a7}l$7d#r2en2Bm)W)cUj;f)SxmoUGfsi zopF*tC3T#%sC4#BkdX2QpP%DPs(uM_!NFM^Jkj&@s4Z$Hz)ErneSRKF=bw-o8-LA+ zb}o84lG0e>Bk4O-qVO61%b8o2;!u>Qo*I1WmdH_V`V^bc>1hZmI{H^ZID7=~}gQ}h0mXX??oX~7Ng>wyJ zdc{&yy7%gx`F83rA*VG9v{do-Xb8a9&jpB{UZDLw19Mu-PL(_WXy?s|@mWJ4wL$gNluxrWUgv}lAb^F7TKLs=DO!Z_mizQa zitwL#)qdp-x2%c-16O(*d4*vQS%jM0Y?$`Su4hvPO9bW}!sYC53|>?!Vu&PaehF|K zW1Bf0AI6Rz&)vl|axR?ceAq}v6MMv1r$7va9|K#_`G^n4%EG3n^IkE}1u|uiT#=7or*X^hIi(kP)y32{w?1JFI#`AZW7ypvXeY!x*xT7 z)N_?tWwda=k8#z_V`u2`V4l(`wLF*wX! zKea{sNTm~BpoE|qWcZCP3H#-;0pBh%&y*uYL-VbO!Tng zv424otd@B%@IiPXJW{B&@nzK<52U(j;WytKXUF2fJWQ`%;^Y{Agdgt`!T?ihyVf}0 zQKTM^JHC<{=@_y)L&e?CA;XL_3sBci$Cs{5lIVYzNLw|QQc&4ta~bfqZZmCki`IrUD$FSeDRSOl#-?YrwPq^ z*k@Itvk%&Og$5MoRxGi>7z5QuKqYh)x{+b`mvUX(sdDg;OQ%rE_KMn8dm&|SOkjk? z6mU+|JrMS9CJq4-ClpVIHI%vIM?#jqg?zpn3QqfEWG!67@AlV+F-4#w8GKO`{mW(I z(lVI8m=;qCqz8~L&L^CPHqCiZ2V_7hw(on}SyRSGi5dW;;8Sm%vVeT~OO?1ATI(n6 zKx$hUi+c^*2_;{_X+FrUZTG04D1$0>LXBzW1tK$ePtiC01yHhpz{9iWGy&MNB|GEm=6xsdYBuw;mXKSy1{AhL_<9i{nuSvf3bRdyfw zC>ina*VgjV%YI;-D_9EX#sRv-9HBqIF#2U|JuljmtdBLUH5j!}cyOZOaU};^N{3{d zT1+f`6t>-2eKcw$Qf9~)U~8e>$uaj$`}rZsk=8B_Yny$5Ro(fSU^`R|*g;8Rs?yO0 zx_8KC#)I%*R?mR%X5WUdB|8U`=OJT+>&-<2(-z9P*Eo(j>_tJ zF_1Amiy^sfvE2hzn!W<+^+|T)wyUUQI~wU_3H%grd&!GoujHSVnhrhF6#5`S;;M=5JrZ zxkkz@{xb>mEh1&SKdWB}e5KgGhCE{qs2^)I?yFqYwuP<{ni}S(W#;jne$pxXKf&p| zSgYwd*;n0zwr#4MiG~L_AxsxQKhHOj6;u=ZH`pW(r~B#=xfP~1kwq;Crp^kc6%X7| zdSqSAtck+lRPhV%H##OdQ(Z!ey$?xfyjZGvT|63UR@-5>PNIxqZg8|qg1vi89fs5K z@ytWKpaemhn1LR)Ab4Nm=`G?oK4h*~_>KVHyQ1x$CDP}}!{t$Z8MGm?a|U)+ABj&(Gh zvb0Sq`wa0}q3z34Jh_d791!p@XhFO=L2?RIRuZf;OWrcmcQip^$dkL;>n)Yg6?eF^ zWPBesM-9XMEWu@K7fK|xVVyVg?=nb`JeB@U2Y#Yu5Gk8Sot?zDD9?9we;;ACt;OY) z!0eMcG)IV%^2VM)cg=vA_FZ_&2jF&%e@opjBTgvW%m`-&4Lheo0qIrICSiAvY0BXz zR&N{8=IZ5dRiNA31I8mg|N0?|8gt#}-X(<>)P79lnSZkYcS)#?!+bu~aXR%e?7bEo z8cS6Xjh0rmqGJSzozox>YRek!wRwWvuIPxZ4vHJw8{~ZX%fVt%$uY7&`i{DJdo|SL z%p*%SaI7+YGi~-bBWE#Jebx#D)JaiBA}+)NU=IAO5nF*4tu9o@)BYXP^g`k(D1j+;^R|JM3Z1q>t5k3A z@JeG+R5YnuooFNz1|83ZGzlXbOg^N@?FgIoF)7%zkDy}PL@{%bfHYopOoCvp{U9S@ ze}&mR2scAShs5~*z;R;XZA>l8vpW6AFU1LYp1Cs&1=as>b`H{ZbtPT(!pG&edfkbo zfGcXU0B(#WY}nzI%pwTZGH!L3!;lUCJ5AXY@8LSsPDs$Ny=RwwH#3jaU!Sd#>{~1# zo363|2e}N;NSg@B*#s*X-iX6K|Z0pc&4K3 zp)BD}R+VElfp6fI*{Bs1wTBhw#zHfR4=F(J06K6**lc;1yYGjXL>P~lZp{pm=cBkK zS?2N?JZy8hTt8wl-;U>&Ofhi3x!DXCOsf*)8L}O70VV351+rL5z@1S9r)X-*4|-ZR zpM;fs6%#S>T*)b}0_>$cm-#K`uWbji#m6$D@Epn(_ob$rnP6EAHCQdS;xaA3=I0t3*QVI; z(FO8%FSB2ri(Dky)&I9h+)i!NW%N6Vycbdf3qrFBvc{qrHxNTy)ch3(h$}#CGoh8Y zWBF~H`nojOE}0LqYeBp_3lsIRK8L_P1|&cId;8m!2t>I;)fEH=6)S@lXg40^Lm)zFn$ z6wTF>I4Kz(kSJ*P?}l8*6D_)ZgNr;9oC9mHfy_c@teq_)6K?Ql`XWv#y-k@ml^r2O zc1R-Kvvf*)|Kp9hz&rtfeCHcKV>tB}|EEAGC!;m<9T?>SSCaCqx1lROBIFD%-UJXu@MWJw>+Y%ppk19RD~!l!*Z$V$~~&pqEi zPxG&$YDrtM-D<(Upoj>Ga-{zR-~m5B3#{AEG&im{VD0zQ&`-`S&lkO3bzVK6(UjI zg8kex`c5OpfN>jl<_2)=M1Cl4ru!k9D|s?8StS00TlmTmQ9@MrY2(AUpt~O@jGrVZ z)QgP~KM9jg5ovB6JFpocp7NcI<9NL=n!2_?Mt+7+j+G3!2Gpt4@(=8!wzT_gc*k~f z0OuCih5Fn;Q0izDihz0`)Uj&TMn6@~;jg<^@O_m4L9h;+Y~7P$BE5%@rztOVy?K@r}O~X_~}e=$NC9^#j_s zN>U2BVh&eJChvKX?y37=i-KAk-ccTjxJlVOntob%SNP!8FVgM?F8*=YW$zHEcjuQs<(}T3?vtx?ICu z(g^qqzff2T^M{Fk7St`=O5l!A>WA=wps*}9YpnW$MDJgh0WXPe8|A4$+8HFk1uSW0 z?!L-j8L`_L1PX*$l^nh&dxR+lb|z9;++u~bT>}~bF{xx4qEWB{4+x$hqjy_Q-u|CJ z$8njRv>|XVY*$x<<2TVan2T44hHCp;C`~Wqs4JTn;HL5?U6fM*$0`GdL0@xH&)Y0j zWb4wO_B<=_Rm1e+5Bh`rO8}!QK3KH|sLV8_Jld3yJD$?XUPd5k1?Xn23+46XWj2O+ z1g|MJ`o&Q`Z5*Szbs8jI7QGyOjCyK>8`2`w11XzooFkGc^481B7p_ zkC0)SH``pAv#bVXU1FKOn;D=M2d8aNzIs&5*6w9B(Z1UmJ-djty+w3?zJrqu<;+en zXU1La5(ibkH+(5McKP1@P!9j_trdu{+KvQ_dZ`GZYm7%)m{jenjc@zrJTjma z8b;Ach;6cu#?bgh>Zw+rfNem_I>O6O&-RuZ8T{0ce)_7c*3dd8{|0PT^l#M9QtXw7 zO)r+^;}!Mt)-Nd_-N4-A3e4(Kbp_Kj{w0jl_2t%2 zpH=cy9Dso`QdfYNnjer#J{UC+Hr<laA>iy7SqvJRrjA? z-p%>{*|mPUKNy>@U_)%7c{;@SQ~avVJ0+Y*USIxeu2t}Ib+#p^QQeZkBjcHxaxn&>-4wd8^P__C2xJWK0A%d9BK!+6hy z9*Uh}-Z!2op_prDQDyyV4<43MG&5EyD8C36LR$C*$ESJe$X;S-B2r$-LgB?pS-mAz zUD-ryLR|ggyfZ?*5|wF?nMu6WQ$-$At*H$W2qc-fE(>5>#2+lyNq|PGD@1=6gd@G; zp>5p|Lhj$&WVTcOT8chVKAOj3BQO@m_}L1BDfSCk(zPBUD#rhC?Csla$~%J@MSjP4 zYGG@39-CybDx*W)7#GPLtiB;pGU z`a{4@>}vNXLws$9vP2Zj4jn^4B0U3KVqA1rYHbB9hx0)%T%yPCzLLL0ke#KXiW+9r z`wS3k3TI>!7G{HE=<)C(CaKDFBQdxsR8RtKU+SS%Xgh&Cl3ZL7R^o#se(ek1*?C>u?Z=CZ`F$L|^LmsD`18AZ zY(@fr3ztmPob$-N1p?!GIp7S-@()|`X`Sku~ z!!?N6M6NbG`Gk``ca-L)A&Wt;-sal44P@#VEYq>-m?}|gH!fPy1I%Qt4Iy{8ku@{3WgHB=H))r*iJOGUK)&dYSt+Uk#w+UFX@{3eaqKhPq@JjQz9#+M55RVkbo zXEJSBWZ}#FIq_B6w%TknZ13YGnHCht6zmhjWQPI|7NHmhcM{oN*e4Stuf}cUW9bvr z;K>?o(xZjy&j0;6w;%dN@1)-?r#_DYNg2l>Y=f4nJqWx;&eCYPd}@eMn+6e*1u#Nu zN?vXc|mwIz-=c~AAD z9;f0$$CP;pl5Hnk65vCmZenSp6)6_cDK1C5Zw^PSYP6xGmhilu?qWr+)+fo)6U$17wtMGqlD2tiSh*! zRodBdUL{K?PXASl?ex?{!7nVB_hba$Ac+b-FNqNcf@iWQwBePOCc`x$@FwYnCYa;P zd}(;5y8jBG2PyXF((_9V&jW(+vKzcP-x*g9u#}G$XKv(i<^|fZh@bU6X(@X+C^a;{7`yCH4^UoP`H8Tt=uYO!{}3Ku+do z*}>z}DPCAhhY-y0uxTckfesc*^%WAhc@-D9_@5q^JNxg#Cvx0)Vx@WE^;u~HA+_Rw zLjl>pcLS9vju`ihm>c#LnhfkU>c=|A``O)-6W$V+!Eqa}_baRSUG6x^;j%Qec_US- zMfBx#En>)EAfeyTzlP`*g&z~w6Bhg0c4TCaL585W^6o`I4w)pMglI=CQiQDWzPM;d zQbsI4XJE%E{h12#8tAqpTDblAJlH#*3-vc(HM!oL zKmr{Q_eY0X6}-1Kw7c|*b&!R+NqlRFVd;P-;?e`7Ha>KO@n;$UB@uDyANW|E*1Fgk zJRFqlE|-uSMGBokm#yX&_&QVX_Q;0xpFbk1SYf%E9Y@Nki5;I|H%LsY+hWf&9v(js zpUU)gtkt^b28=FQ%8g~CT&%$A>mMf3>bspJTFa;hCZImOo{7{H&%>ntdDX2sjQtXj zzg#dc(s|Uy=gnm+i%g-=AOnO(fKLe?OXr`x%@mLV+A%Sk4B(sk{y$=cvP4>;GQdlg zE_n=_A(oCGLTlU`aQP)%x-7Cb_01~lZ32;QV%QMi`I6*Z{&X4?j{%1|lYo}zTWAbsLWiv-hrm3TQ#Jyjcn+s%4z} zMoeeT2&#zPkR7dF?Dj8p@p!R^A?nns$eon%qjn;t19?0G_r4Fw0wjo=+8a!}r~M3? zi^uYO=j?EYIJWinp&wYFFG688Pi=lTb1X>knbJHuMt=TI3zpLBk$@P)wGBNj#J1$G zqU!m+-!%4P*6%DuU(RVVBI|BB+er|jfp1Ar*MpL;dWGqsIAeRW#^<&S#HO8!_J37n zAro(yUyhQ5tiT@TkJIYh_XBkBdtOEF#Pw+BF&9X+DdDG{ei)BKhB06-{?D|NQ@(*(CW3hPKW{b#~GMxO} z*!?+#C-ep5bWtL?!6y_o@S@4|S>iCS6^qE*8e;sN=zO9)6G(2SHyCeSKJfJT^Ofr_ zu|I}1_7CgHm?*u@;TNdWwSvxv6o_~DMW$qO##bU&r(H^fMfZKpYDWC3c! zHGntbxMQ1;Fb*>^%R6`KS$svf;CncUWd(_ZcYJm!((4i-PsCl9+(#Zalw9^Em(NOB&C$HbG0pZ{(sB_u>*{ zSrFDc8}VYspPjq$qHHkCzEfdSm*es5C^TT>JS4c$`~4ADc8Wy8LHKi+?|Ot!V`G29 z9FS;tBZq?T>1IW4H~1?IkyeIibNCtLQI}DgU3QW|XzzWfxcKZ4!{KqlhYL7A%5=kD zz1+BhU4YDMPEjGBVlsFM;pl+8o{e%cLrBjUU4fJ-+;P)Cw9m@RT+(?8+Bfc z`jwHY=x*m}d926|IKy)R&w(X8eV)J; z^7MY)s$I6JbD5D;OAxxP7$hI6lr?u+(-eD%UV>Mi91E-%u zc0X=mL!dotiymGAAJfsDe&+WEWRx^Z{;%2lrPH`hG`CC&AVX;9w=x$Wzf^}1^b}AO8A;55jWw}SVDjy4Y$m6$%!!##6uyyoVnwqLB<4e| zk|CorDTkM~I{kMB4m2rJ`?*KTTbvU8uifn75)f<5u$DCP4W&KLb}<0-!dTg+H!J=w zuAHzfU}YzI=K?LV6^cDJYbF|R!B08fbR_fXX2skVP4IEkPJb)Qql)JFh6Id|EThia zU-m78k&rL@ZGicQSnuIwof{89c_biU^vR&CfhChqv>yDQzazrB zC&6Rf_n^616wS5i5k-U;bgoA%z;UA~h9OP9?(i_@21hoMAB=nc)eW(*r!U^uJFXav zYSgZ0P>-+4m&lf8SscB<32WhGihNPeR$16I)%{&`(S0ZF$8dVH%m}d{8d8KpzNBC2 z_>JI;+nF?&uy?KfSxc_O{;agyt<&;hg0!JE_15QB(Y{6O!a?oS{`2ep=&Q)M>H}L> zIJfBoBM?NvFXD8%LbXI)M@gBrV+cc|<7 zXzVzU``u2S>Cj@9jE89Vw>}$?UiCV7a$tiuaBde&E00sHmnizyLH);eme6f@6<&10 zQU&frxjp-=NR$-Q8p2fOU423_y73Ry8KliTN#O5UcFflEh9@9GbZLsq1q^6T@LFb3 zdECv}dmYO3l{z~Dq~}@%a!w890HaZI(lsq>;!i?!;vi0-wG2$7i;Q3YbK^DORTCm7 zMy6nFUJ0YGgM!g+NuvP#|Ee%!YjsT>-x5KZ1?`g3qR}bD9AdD~Tn|p;jd-=B85iEB zzA3J(Cf-g*ln(itf>K-;_L<(TI2|URBrT_Poe1ExGTx6T2wxi>vlk_Ctc)^Wcw0iN z(U25@&f1TPEWKP`hJwX#Ridql)k};Kh4xFr#|~0=EJEu0U|N40T?hr4qV4IRPjgE? zayV)xtti4QThlhHk$zXr&P`j9_gVk?5aa!H^J@|+l|Duov6hRYQZ zxp%wv&D8r7SN|o`OA?PdZ4jy>A1Kupxw*sjq;|MP1(zK>q>y9Ua>@^sUd$)2cXvi2PzgqCe6vhJ~OMe(Dep zgFo|QL3*iP7;B2sT$6K@G?QjwQ9JQ)DS2hzEZl$-Err*^7z0BUz<+^ns7p^>k|8W1 zN7uH%R#Rk0;)*U_z6I81?=ZJi3YSd)b&D-2nGIxxxbDT}Eh0kDE2(!&Fu`$kZWKU#kPwV7cXyT?@1}-0tV?7M`fs1lpZ+EpKL#gbS1sk7 zKwoE`ist*;{o~AaOhZu}Ct$JyvBGbNy<1$NBgAftB9J2#p`pV6AyI)cJ$U?34p%(; z_PDW9(Ke$A1i$)7WTp2E7?*yz45-4tOcs##<&7K<|VD+{juaQnK$`3-?ZxZDJ2mXxF^9~S-CSE zEej6U>kcGRS6a@3J5IPKtt#|dGPAh9&AB!Fu(2^RF2)HMJ&}F0I=XX33-c<@kBPrx3>l8k?aS-nEoc+mKw4(R3grR^ zitJCC!0N~xs~4p*GP7DOlepObh)?6}WhD4`U6TjsI2=^!8(lXo^UG2~fQMD2I+#5% z)NMd3NX*#s3vPw*Iusr|8NUK2K{Zw$=KdA3JMAx}qzJhE9usQW=Y_iIaMflD)eZkC zk@{gkG{R*u$5PqD(WmKKE8zLEBJ8xa_cW(=Zz-820YTv4_Waik?F|W-2TSZUEq@`| zvSEnOnfM8z0^Vp_XMdTW|cbH(UWNpl9}37a?D z|2UyPn9oN~A&wqoPDEz4w^LM5siDoZLR9-so0q|kc|0SBIwIUbqpBPQv)MhaTVw`Mf*yQ4gii4b+DKY#&@zvH2xqHc{9c^X_n0FlN}~q>v)U#&$p= zK;4?AD0Jk`St_G%vH?vLpTLJ;5|9TS9y<#FrcvLvL&pDfKb~nt!d73NCL%NV&jITa zf1VD3dSV-Tp%|{%!u7mh_N?BI=SB$1dj!qXt=7(YRmh%R`)jS|V&wx*`EdG{Hs7ZR zNJI-r9V2tHJvJapeZ{U#aNbes^hZ&lpqvFv7d=8%stg4ajDo8*XKnWnxHt)*Dg4t@ zM96^ew(%#tlOw}H-nd~w9`2@Lu$M)QqQa)B0mUtboCwDEsv2v^07(5TCJdf4x#KST zE-q1}?>r^ycrf(D{JYXKl&*bN5bYr=qR&?>g#kfN>fSokv;QM@kuo(nt!O<^(Qv4& zkRUf^ZO+z-*>iTC^4Z~t)RI8o2QG8(+c&~O#RQB*%D~8T0)jwW6Edi3Dsm$reyXlp z3p;FrH8GGXIO{MMu=`Qnhd#o9M+C-V(jc^RLZJL1M=@A`H*Nj7<;#5|d%6l|$50a< zDeAMwitnW|d+$d9zb_^|{-zsyN6@UMHHZeInghvC5XSq?k*?hSdZo5vY>cZ0LP%Y87$L!VA)sRHG6+Gz==k^c8G*i69^i$^`YE;%Myfo;^>q z^zIxfDO{!p9M6ouPiZkN1F9!`AN)`u4-Beq4KcjUx-piW6tIw7*o56p(A9`HpmMl! z8spIkPoLNb99SJZ^u;!9A&iv81h4yR1mzo2OQ@ z&Fp1&P1E>r&PSA`-c_PY?{mHdB$<`$+LD7Z_8U(*pt`a+)utpF%6I+_G0jxg;QuO| z{5AI+1$qkH$4x{-#J~1UEPMr)LuXDk-`dYCn>4q%LGJ*I0oOF$A1^D2DSO97rDBC& zSoHT8!zBgxbt`$LT-uqgkoJ&)lR+6b!!TmRgl@y#OKS0uF!0WH&Y|Qs{_@b~wAv3J z0hUdzX0-(ucM@@`wBE0ffZ86`Ch}damCBI}*WV(iWjFCV7=8RbFm3K5FD`QiRDX8? zMB3~m#5vDib~!nYVtO<-(C%TVbBkmW>hE56yq&xTV9x(>t^~8--_7j<(E$&@4?L)l z)y`@Q&3>*(B^he~ty+6u2sUNjbpXA;{XyBoa$X+SZS2TlrYmid+I zUhe9OP)$SAYWpp#fRXuw>xUn1byehmGJmGBL|xyyGW9|+JKQoe)}z9|58AUp^jUmq zjSqySv)F|BrrM$oyaXDGopYT$X?OY%zdK0ZndJF>H$iEw1t z+G3j=hp7(rjJSx|6AxQch92dc7L(P5<-$2)Y4N?fe2j<9{6K<1k3EZJO?dDqDy^kdZ7JcqLX@8p`0; zi`k$a%_(Oe-gb2g58u5vqg9An!-nj(mZLD74IHO@ySWUP0s(cCsj36}Fr*VOKk!M> zKT_BHjXL}G1a2>>$%pEnvpVTzCJ7bt;YGM}y0^RDUin0K6ve}Pbpgg2wd2m=)6n?K zza8W~B9Uq!<9bwZUPl>jC~9M7q!j<$DI~D(`ZCXfw%*nF8`I^DzJlnTbM>?pBc)W% z8C`8ytamH2Yp`u}RI5)HjdlRz_Q1$BvZ}UfI#?Duc+`D0+QtES$Ru0z+5uYFy-tZn z-I1+O9K89$~7HZs)#mB$5!Z}_E z>Up3`DvW(-KC;CDR=G6`2nM{c6#8&>Z~x9mbQ{EkAQT$~LrHkg!~16FkCtl39K&1Z7q(bDm!SguL3+)q}LUrA3ge`>SNRil;z_D=si$c z9jumvvj0??%EbF@Yk9(g3`v<0Lzzf6_AfsWS1btujewA|i|@(8gk8kVR@fIMzOn|H z3Kk6t;U3-2SsiIS2G&Y-!S`%eUH-Gc#VVFc$x(>z|4y^L9NgOhJ6UmY2CM6v9;azS zAonNBKbMmoqW0@Z4>;WHTtorLMN3ldw@{ZtD{7JcdeGwNVRuYjR(9P5ET0B-0dt6f z=*`fS!L~|aK2-$sB9a*8et;z1FN#WtGjqLr?P!SA2s<$I*D%03B$*7JpTmrHd8+DF z(sb|cDKpBSc{bXlko_*-+WgB8S+Xsnlp-7w23oXE}o0uFMGa+N#Q1&P|r|Js>Af_ZPTtSoJr^u_G+y!!! zQ&QrM`EuEMhC98C`&tjdzvfwR2~Rrbl>Mm*A8m0BC8|#sYF2Wyr1VFVSs}a^r2s6_ zPH|`^Y3@IGWgHgrDn(0vEa@fDS|~n{mqTAqux6sv_2!QxPC{Tt*pg|1s8-A#w24MVuv+nL zF^}u&T{JL;MM-S)M_R~mxi%6QiFD&V&}KNWUkt^!^TTSA9K?5OpVY8Y7m59&xf4y# zpmEHslOj*i2Xdo_Vd1j+P~Y~!JlRf!&*e-pXDfdAseP`}9>P4lpUY!OyiHrXG z?rMRHE)4Y)4aq*a(piN5`TkFj>iZo86`*H+<+l4w8w?OFU z9`}pk_x=d}TCC&b%)@V3cu&{W4!X~ql1N>&IebiuqZsX`<86rI;UANu>VPWsX8^4# z-x8+KHz{XqV$~&JWJAbzZ~gt`Gvvo;`;G;4ZE;7R)k_n}Qg{9w!32~tpi-{9r@Z(t zz0xcP^pB6!>gp+!pIsO6UzZv!kq^%2ihu@6p22xySwZN3gAR46AHUEFb5+8#KD?=m zOyW)?jK%4EfElC`Z;7j>Jb$r~TAwi`L(i&9U{(DjSR#E~Zpt|Lm<ur}+T85tI3(M6WWU*ia zkKc!PF@{DQqX7LJ<8rSPv7T_PFTd=i{8WO`3Tz~Usf@lUxdT~r>-d}#<>~#C&Hi=m zjZ9`}-op{^9*&CZw>+Y#lqPt+R8Y2{tzNnz5QQ7%&6YPV52$SfdaO>>uS?(bV;zG~ zAX@VcWM2z%3u!(-q||YP6RtB5ng2iONb{pWnHj2LyQL%!-A)tPX3VA@8B}>!PcC{6 z>)9zP%M5j{gwD7VEhoa||LE1gP;b4P|GS->kPfG7qV_Md>4+V8pf6`BPTt5$C%5ee`FTlvvuJ%& zUX(Z7T7y@x-!5#OK_0~IhF@8pDI=G#C?-88O+ zMfK4>@iwF(B~H#4BM6LEr`bNZK)e$bI&*dWYM35_v1DYdEH5@UX7SW3W_Q=IY5?KY z1FxFN);j*^c#th4)^jZ2U(q3Cfr&g*bR=)UzJaff_E~i@*(z%|T9~$<+>_&^4PkmP z9wyQZIV&_F_9Nqwb$aUI^K)Un7m#`so$q|w^44>ta(oEHo??sag@9{ zg)Sn4p>XRJe)SfNnL8p6J zM9Yme@I_@?(BtS7(Z7oy5b?b~mu=%6)*nCOnp%9vGJ}XElx14BLrM!b|z zqO0ts>W-!HT($2QBU%yp?q~GZTw2y)Vb+5Rh)9?7#nO@&H?D4X{DG794&kYD<%TfU z&L(2eQUh|GE1+>WrEWf}>D)W;nZ>H^bIuV4^QkqvTSUNR7zL;_Fh>3`I>|Cq{;isQ z3uYrsg26<#r}wwbnPcPI8j)p_;8ig3;3gY$n>kW^xng#}$}?&I>OAUSi&qtBHR8bd zUKb18YS<3FBEgAqLFol=Mh-Q_5*-WawxH^$O755GeA`@+ zNu%J!Ng+eoT1RJzVdTrtc}Z`Nz{v!l7DqnPJ*Ve@&Nf~0ik3k;-r{!Z@IXQGCW0D8V@US$Mere_5X z4VF`7?o^X91d?p9mNO;QYW3ocqr7GRhu+Yk6Q%f(MRdb&K!k&EkdB$+Zmyb_U&oK* zg4;A13Vrg4Esqz!KqH;F(b{v+btmUu4I>X#*rm{9r~ahAe2b|+uHecl$t;7I$vo7etd(Os< zNlR&H>6{L_XwJqM@JxG0bf{1wnPbms`Q{j?@vJteFR5mGIeguV^Ax}cLA7dVGsB!t zKL{X%*eR)q{t3&D6|9r?hOFXg)0v1FoYIs8dcX(J4)aUHRk$DvbI+z&#egn2tb3;%aw!10)Uw!IH)bRWcqR&vR@7 zm61`~B_DhgwCv7yt&>ny8p5E5NkDef2ouwLR$vgOI$A_GJfE-J*8=&cAmy z!}n8kqjN{(jVdt`=`Hn<6Tg5ki_Bx;4|-m?=j^$!3GcC`r*oV;>Z>EpnNB<)%Aq%^ zQisi(8*-?XhoI7fM!5F+ZpaqfE7Ia=I&W`V=Tz&x=DPT%;4ta*?spK}$HMnCTf}gD zr!+C4MrqO|gCoF=)xIa}>_&ZU6GqFo8vfPkR&$J1(vuX1@^h%F5T_{Q~3F;bIic4NaZ*9>Ha$q?(gylE?j31=d{j}%`z z>l8u!5XMQPSDfM!N0?3Tr@J(4_WTG?zird7J-vR01DrT2`PytW+k z@=9wHgu(P_>}=cg4E#~ZJf%gt?jcmp0u?k>F$T9DN2MJ5K2clEbc!ZGr@_HlOyC4| zfQSx>t5_P^78)C7@F#LK;ZB8A0lI+@Uk;YR)T>HN05(Vtg9s3y)%H{)YeqK4Bw1X0 zAI#dvi&@!i_%SKq&#bF_5ra+p2PC1($p+KFJ~+Me4;Ty{WurD=3NrfXKMc2PY(W8I z@f$6K{yz3lC^{*@FD zi<2l@NW5;YbMP!~aBx-EQUXmOTN61U{&l}SPTU^Cfd$B?hsVns_g@PaTRUHI?+qdm zT8fY+DO?Z(>QucE{E}h!r|QX9oy{}W2lq03^|}C!3UO|zK=_#(&q7GJX*p1E+KQE3 zmhQQ?d315`(pRqTt>ta~C8e6A##)CrNtzNs-BhTIJjFYx2YZNFUJF_=TN@S3&T2Je z#?@%RhghJIRoF5zx_rp!M&OVo9O22 z9W4)*xk^{Pp%cOlheB9{WYMdCN`2@bdZ#Q_OkwJ^KuBb0@2;_`BOueq_$T#*JYn_u z?gyYWLi=W%dL`?as~eE6Gk?2&9riXQ9#(X6@Ew2z?(SJx{Tvwd#MX)|1gY(|mA?1~ z5g<`AHonXd?F1xk#PG=vg!@`La5x$MXE;-|L~ji4iN013))mS5g(}0W_^?Qf;mlyb z;(N`%Ura9JK}O1Yvcw=t^D$wEXp3Hc$!x)|mIbd;p9*jsBWwx{c3|6IpYh~AbkH09 zRN8?JCA9AK`3^+*)h_RK>Z#oa);`t60Onw2$E|-T^EU{m5oj{72-`ZC14b?hsAE=Nahr0MBrDyprmE5s0qVg$|h~8V8g}n_~(tT*Jv7!zLc>aH7+ubWNzREk@f1`Jjhr4J>P8Lm&PF~G* zVh}~N@kIhlpKc<`IXc0@*?si81n6V@r^{LfsQB0)Up`}5uoOX{|2HTEz>(88evO(S z!&9-IlkDP6yAfKIU@kPrld{q{atvzOJ(+NFADKaOZmqZ?x8hZqPn?ni$hnqOgkPjpu^b%Z?{Ne$#~DM|fffQ1%x zp^pn}s-<@T6ktUiNpr`(JDs=NZyEeg)q`-nRgE*-g*^uAqh}ksps77PfM->JLGguZ zBzEm^5I*qyt%@G&j+U7c=e@@=mfY-pd!tbZc2?ZbavQVu7;bY_vV~EtDWNh7(34^Z z5;b@ywz`SiJ7E>goO3h0(|QSD zP4n(8MKW$ALe9L~{{9%clYplAI+z!}?EF;!oREp7x0$-k{CT(PPFVDQ9rLL3VCV-_ z!T{kBtNJuM;8M-;DnmUC-RPS@okb2s!T`FR&^a?XBT&D$IR^v+IgMB45)R)jmN`-3Lr>QZCMn#f{BcLk1{PX_01UHMhtsl+HJo?oxVBkQC@Ru_| zH!>7GJ|8hLe&I?5EimN=vSwVo9S4r;B^=x08vT%pqX?X^ek8XMM(TG-f8q)e26JhN zBt}veklc+Yn^A3C8x>)Me$^!STJpuCDOsK6>`NQ*kGlwyefT~Ay(XGKxues?llqzw zu+%FbJe-Wld_BIG+f-|`(pg78pIh7KB(v`waSgNNT&_@{Vl4qy@s27!=Mors)MIm&4Ouog$b6$A(1tlQ?q}z-_4kEZxmQ5p*IZHr3z_6{Ubh(-+PhSs_bn%K?@7V@$ zQErcSG+z-bHb*;dR5?jh+v+{Af|66~RzB7Zm7|~7dXnXWh=u-wvcVSO07_UXbx;*F zyRucPO3Y{Oq%Q{qaNa~7>qq{LUn{WUT={->V%(SZyR7cI%ZZ(y5fA4vD7PvdK7bK6 z11}CfXG<@rhQ;0&f0(HLy!U79xgwqN>y0g)yu)}+a?^5J4SeZVL2mGp`)}Cz*L?uA zJD+JOLy*9n)H6IAu)n9fnL6;|F3HTvHbDw#nsX&S+Wg5XkoB)MeU6Ni>;^$RIS>kp#$%yL0f8bar{Ke8t^aO7KM6Vi{QKyQp8<2o_q@lMsunyFi}ekK&2q{+uAqH$|5N?wxEiKA3Wu z6BI!)^O<}>-bgLou_Aj}Mj{9*-&$loVgHN2J%8nS6DKh3!UnO^QR9P*!UmxH5A0(wh@6w&q%#8k47Q^eXwCCZkb5J${ zvyS#dSW@v%*f$8Zs)$#vB!uO0gVPIak7X)Hm+5AOq8HT5&TNzdUiMAoF=yatTHR%8 zg3ie?(R>yQCT_KW4@{@scm$fnRk@ls0M?3GPp;^;aMXZ-t-w?i24}%4i@EHU5ig`` z3r4M9D$ha0>)RkO;DVVP&2=31tBK1~s#K0=h{BDxRK7^~(balHqu&SIJ~sdqUQ_+y zx5dk`myu};9Cw-SL1X2QG9m^HlOhnN^0&jZ`W&aW13lCtR9)(L;4r0g705>ut%{d> zO}5X;2+{x3C8PA(V7n1s@lc`%P=av4Xk+jVj3bLLaj!l1kQqDF8u@dpEkm|^H#5xb z#&0gmAzxqcgPKicN?j}Em-7L0kgtl+1P5nmK{^ON{Pu5+#hv}I{Zcm;L$~b-7Waiv zb*DG+rO}r%GL-(kztWbeKi^sybbhB8W+e6jcoaj|PJGx3@;3d{CtE1#kHFA-6}fC) zA`^q(7TRtwKtBf?j>ej=EOw5=-*X!d`1)G@dZ;hQBLqDkcPS{}y29ODOaaHrujK`w z=cFU4RAL57up{J2h)nI=IC9;^>jGO|1bUrSzw2~wC*svu7$tF%Smh8 z55=Lb;uMH#kp`jFX>^{TMd}}5M#UX6KWS$%d~STbWD-`xXlfwE9)*T7d;2IpH_ahJ z_;7vjxj18UAGJ0y@JF161}edU@5ht0=WR+;30}7YoI~A;NVbt(+j?mfPJ58}vChtC zho!_Jn?HwoAme*P-p)UdRX)@!(%9(#dCh(ccB_RX%b}aNg59DibpjPrI@C-%NJTc~98bBfym(!)}tr_gB-|tySsfndd^k!W{KN%E; zDIeLRDvz<-yI|z2KA~LVq%#8@ z6AA#?SkMJBpapZ4Pm)ECB%a~Fwwdk;fKgD5NcGGb51W#fHrQ6d!Dd4P*EU*2a09za zKSWP3Y#O_PAzfESXdPK9{3Mto%gAeO^S3ns(EFCXvwYS0j7$rQ!Gs&7GW{HHwPggP zt^J-e2t?5=@w^WdpR z*a~PDQqloH`~J$vLKfS3CfN%-h)WfJKxRas75t-EgUDSmU z`SrhJ`rruHGbjNg0SbcpUK&ymxMV)eE8`|h$`XkjN~Ge(7_O`cs)TBsgw6I3-K)i# z2bRLPHYQ`YxK&vAuHWeawCErb2rMAIiEvH{x;Nl&=rn4#J+8R?1H6TFXf@Yk_KylW zp=q4#`rHWTlNF0NoehX>tmTCBvssvrOspI^jE++v->J!&zfInhE6y&Y5h)uL&_>E; zorL*;xw{lf5-4MGy;>3*^p~SuN!PSy_sYz|tA*ttrt$>0_|h6x%k>h$Ot>2y6c%CU zG-czU>rP}Un5fTU3}yss!cyadLyIw@YIN>sT{N&Cl1LrHyh~Bq1>hRL)mNA4(9`58 zS9brAQ}*l6INg7iG+*T!>ZhYqq#YsG@3CG?U-YHtEkr2ZGqdt~aGIdEt;=D0`GZLr z=2%h}{vEWQ&I6o<*?Fs8;aU!2t@;6S**lTKYEV= ztrRCJqM>@rzDvXt4?4g?mAf3vF2JaT6%kK~`s%y}ZQi>ibyn`Qv3ym8Db>IJ&I}l; zXu~2a88>!As%>|cbBAECG3y9@Y;EiI>5$7wt8DPlW}S*gxl(sGZLxD`(?3!#ZWS=` z3teW%v8XAt1BwFI`-*j&k{hsTPcSJP^bwh8R>|*$Z(GA)mm+9q01Mw+@d%PS>Igs=9f02Tk#-UA#bibOsf|oD0x;UaPK+OF0=W~%>?2dd#@~>B z{`XNSDRv%oH=NUvR{(lLzb^LjWTnDM>+-l88Q})T1V0l$ISv}EQTuq*uvqC5iBKzR zj0@U~XuNG72e76%RzO@8_&BuTl;LS4ecj$8>DM8vAi@acv1DvxyoiW=7*uxc*;3>F?F(1l3;e-DfIg$5EdArP>FcU&heDbx$(hX>q_L1ky z|0ZRp$Rsf;%Y5gjIK?Rc1_njxO|Hfg0OrWZQtaZxNZ63&61F?Kdm(1a)>Zo;;FYGQ ze|(ebfumR`etIs)ofUd)%a^)%FxK3jW!{X?o7Zew^dtZ%*Mv$Lu-1AtM0sI<(@iWE z#s>b@Uc*oIYg2FGrXYt$q+FYHNawNejmV)3uff!F1C&aQvEacE4ED+NRk+Xg(aw*6 zHef69I;X#NZ&KeFNUzew50$*R{nt!ZxZrI*aTlijJjL@5N zHvK0hc&tRk<*T$Y!DtF`2vFw&*&P*o4aG0_->6xL0PA;C+|!I>CfnU%ESdJ%g(}$Q zS>hWnk&W(oMf@g7P_Q>wH(2&!_>$8r?X^0z@%e!?+%UC2at9%Jx3An#Ox(F$NgWi3 zqgeQ>hHVfgza2v@^k()PKpK1mBjS^&{&W?vD>$U@f#phJ<2JIy+YXC54(;soamlXx zD1^c}mx##ICWlf$y~KD%uzUts`r$nb)jq~IWB+~qa~_hP+vy zO&F%#wY3KE8pyzHT_qr>+E(I|Vqy_XASCTOHg_IG?c$+Zc;9Z5&7b@6&bO0n4`$QK zKK2`a8n^f1SVK<>pGR~VtUpzDrz##Is&EzOfbv!1{h^m|U!e%f2@=VN0+Fa0V%mOS zfc(Z$)2_LvHqE9Z;j7+OD)zECe5Bja(T`0;xV_^2VhF7KE^lz-Spcf1uu<#4v~)-R zS1SETgA{}ZN>s_a6&}ui*j1BU+Ih0K4IB3CN_y1eylo_`4M~N6NL!f~#A2tg)znM8 z37Zjy0RtR>#>d1kJ*!O0C)Iic@gqITbxl3F~f0=Y7>4tQFOg_GHo75vvf= z*=!-Rkt0igQMKShZa!`#K@z%pO4unCBg~?<&{2yP&g!u;aSPXk1AY<}v1QgxB+?NK zSWEZ~<4jrd8CI6Ug8Tx3WE{w}88zE#hg9oWZF|J616Q0^QJtsAsfECv2{N@hqGSV35!98_I8a&~@QsMk&ojim!pFzfn$ zbHBUk{a~oGAo@)K?!3|vV@l`|S*~(bUi4;~2ytg%<5@ZoVLA8i5ieEpC6iceOx=c( zm^kmo_VaWJfT_AnhS-%A_?1R$C3pF-3mXWMWZYHG!qInunJ2KmT-mB6HKTDo=xK#o zRP%hfo6^O*r;4^>6YKN^HcwHpbi6%4S((kP3N-MzgxW=6pLjg4Jxro29bj2@F72q! ziAsHbq$bO%Y8hCMGocHxYDgjXv9+@3qO+f|xHWG1H`H!3aB64ZWm+uo2X)T*6az&t z)nwfyL#Y(REuhgH=DlestV+G2_i*>m z9Ctc#LlkPE)ea|qV-=w}|DZu+>^hZw)3f!Gkvhz`)r~}(lWZW-?*ya2h1taQgH<#s z-JgNALN(b#uOC2-kS5-jb_P6}D30`?#71+E;uy66y~FJhoRY-9e3=lI?$5X9)#~qC z08wCWs#F$+=InD>Iy`!O;V8nIy@;lGYYy&)4y?V_K6AQTiVkeI3!t$^14`Eircn(Z zsph{GVEvne`0#z>Ov2>I$_9+Pf8fvY14+ua6J!gjZfjJgiGn-~X5pA}!n`y<<=+2O zuwG{x-yMsKHFXKT3be&UH*#tWn?Y7@!FhHN@rxzvuw^dN`u&IhpBi~lLLK6q-3yoj zZMubWO*YH-YIj4H{>K)Grp!-QNccP~o(I4oirj6M1-v!_u2gKuO}7cH3&5Yr%)p9d}FJW4oaQySsnTzCR;)R28z_ zzoexBc=1DyQo-1C#Bd}^3sZTP(cX2qBKKXn#CU-KK{MsvOH)7T>$c<{n;=q*wQaGT zhjt>q7q*ijQx$5w-;&pj<&ZNI9TZQIJCPw7b}gJ|;s1SIf>8sPabKvvjbjv&p~J`$4^^v-B)6O_}aNONJgX=c-gbSWcjdpSibIE@P z30cF2tqLK{pOxH3L7`&SXt>oVWdNL+{!~pc+$5pHIJXmh;pJ3xU_^`Yueh>vt~7tt z4n3>O*+%|wCfVzb{W*fgN~elpLkdho!eq(qp04DLdOJ$rKi9tW-`N6@K;F{ByxPEt zE|tR|H*`(z4_=-qFR4-!O$z`L1cD#aDMl9g57W@$VRc10q?#0z6~Z(y zD=QA4O#I?=n3@G{h{JIEgd6_8{us17Yi<~3Yli#A*pKoD$ZHItHc3pt@hoEU)M$Slr{`%%7Ea#U?R_wVxC`%q#^ok zga%67#F`TOT^0d?8F=p-;f}dEtJ92^Dy?SlQCrmfcG_=QN&(yEVK#Cl^8DC&dp%yp z6%`oLpTJiw21`8A@5~&XePoqYMv}LUY$yaXSJ_OgxW5s!JHa@i#^fe%P~M8g<;VQhmizJMe|!MiE8Uc)gh zWXiE_WKC}2XAU$9trf&0txzc+SFR`>cf)WUwK_*(-hpv}yEg;aRqpBCXn#FUS>xa^ zkzKL@WOf?WRT9;g%sNVk(;fp@iO=J?PtjySjQ|zuke*9|dJlHczazK@%Ny%CvEtC( z2YGkzgQVL)#EKkdfolgTZ{Rss=KD7;w%twV&75wt;|Vsc@fUgRF~|>?ipnFQ#6zz% zPp=z4|Dx4E`sJcaxLHJPdz$Z`m8+*g$sXyx-gJ@&G{y`|F%u52;otzw^3fuC7BKZ! zzsDh$WV(Lp+&^NqF-hMSJCG}50V_&pTo{sRi)_swzLY)6kXdR8Jmulsd0}S-N8HO% zdUl;%;<#j*MkOyV=rz~>yedFGRPB=)J^K>-|1C4dp>ZkeVR{+!*_%y{HIN^#cOkq( zoT0`gcjvnof(QCg!^!G@HA`Ze9NBE@Y^WLAL8PbhHEA#nKnroJi9#}zB zf88KKnMi@d{A3wki*%Et2F9Q9xag`g(lecuwTphutLrc>V=n2sU+2E(Z-FoSz~d@x z@GZzBAOuZa^7Mt@w#8bX*iBG8g5&za4iYz0oXidD=^;_varS+3!bi?HE!0B+Y`#s} zw$h<}b%b8LVeR_IyRm`-E@wNQ7#k_r-|av+T9O?FRVJvu_nte=V_K7eTM*5@g$7kQ zFo#49d@94`Nn@i_Y5`lo`VwJG7TQD_ii4_f1l61B0zO6{4{lRc`lOvMpt#}ev(=0o zAQb&Q2TyOj<`dS%|B4lxxU9oS{b1$M3XL~e4UYiNA&~pgbKjQP!5);OBqhEjQQWml zJYj*r0JS~(_tp&TJH`*mX1Kq$x88e=d|Rd6dN-e$V1fek@G_t4ri?s0F3aB@o@eL_ zOl}@@R(@rT!h>MD(L&KEAr?F^*#yzx%dD&JSQ&hy312s>ciDK7k|xL&Pd@X43sD}7 zrrJ4ekv0EMr)_6TUZ_$RZ0iK-cDm0dLO@M9=;^3y5{u4({-pCE{*71hB#A&N1MpDj zcAy;$z^Xr!6mJ$#2n#~%GW-FA-nM-D#Y@#-JUTdI3I^u`a>2-;LXoQ3TjAbfR zX?J@_ouzDDUHkaJf;tWJBwatq^F2a7WTH4|Sq8*}9rJ5L4c1hdpfCVwzBoe10X}g} z6Omtp`pB&IE=;~d=qJP&7Me$NGM;#CGpNK|h5BJFvvMR$ODgb{l9mw|A$~H@bn@3& z{N`F#>a};YPcE%X$t#TDw$ZM*jy=L+Pfq9}4emH!pqnCodDprTUEYZak1LC&_^QUY zc?Yr4B{LA}!O7CyFIf5drCS2B3Kp)B4THCQ$|Gc)_R*0o`YniQAbiQJxZt){oMJPl z=`C^|CR7!+tEv8J5IzvuFeUM?>gA=>yyig#8$JUfEygXF|5(RlB78@e=hJ6Y|5H_f z#0#;OQ#1$cl_N~i^Yk)lBNo>or(ZhaDQ0v(QGjlf6aS7*bYvKYvg6K2Sqm3SQMw$P z{O>GbANhhAK`6`UMP1A%_ge?cHF#q={?(e>+Em9q1owgCi_1@ZOZ)id{66fM$tA$K zS|z!@F~7uuA{h3`yOPjkh|R`Kw%J#ru<=or_PSsLsUt*2{RbC#L5?QzKtL@L_GGGWjYdKG;8)YbgJbE5a1@1RA=F?4B_{Q2=vnV=k z%Xzn0$r*@oaD11nYh`CUdZqDe@x(+P4%>uP&$$nl;J#~u_hfjeb>=JZZM-tBKe?n5 zcfccIrL^E$<=QV=Mi%~L01CdqE#bHrWcZiaSW24Al@Ky1X;o!8tqA~4K(fCW!uCYL zIl^G)HD#3mw*C1`bZNThbo9XS`yF>z^c`J7*G?F>yQAF2u- zb0pJo-{CCraE-D62Sh-pyQl@QMDsELTOO_z^FUZ__pZQW06ep{=H0ConioA7MY*hh zg{2iK)g~AiS)oHez43+0_wq^G9lK#%`|1U6r{+VGTkS!%@a7R2^j6)fYr&gPlIUP@ z4V4=Kq<%o(GRAJI(j+zSaqE&oL)$sW9+VY)fgGMghyjQ+1L(;nP%RPaNm1*SyI45+ z)I~Pt2j9tVR$FtE5xROb*~U?Sryv;5;rW}#ESJTxm zk>wkPXrxKN{{$$_fZ`6vrz!rj$))pm*7^9!WzGuPZK$*|TZDFAX{aXs<~TG=)>1^q z?{L&C-D8tT&4Ki`xnHI?jXwX)FvmL{nv0535@WTb%V6610C}%)!pG_;^yJW1;rfHs zkJspQ(u?+at9cl*2X4#(t4-yWnePBu#IJ()Mu>iE(Q%e7hYqs*sVmQhvoIZCAR7+> zvJG?nKq3r4Qew?Svav$I-rjQQ^$6U>+4YZJH!$5S7skWV?1A!QIGM>#l!3(6}iV zrZyYwT#+LIL}~Sor!O?jY!?IZy$oTk@RVVg!XtejI6xd-j-##NmBq$?!b&5Aub<#r zrFZzHf*Kp)X3~dff_8?#%EX)j3=wSV(rkC8-=gvnTuTXzY?izbLg9yxx`ExrJmOkmV(b!?(<2Ddp{~9A!^Ac%| zt+GAS&oR&s^X`c=xdDYNmTYgihfH&X!E1}rhp`R(6EqpZX7L0DwhKqfy_hFYRcn2q z?UhEkkgf3URdnz46mb*U`>Xmq)_K9*$fBpVpj0BCmS}A>r`S|O9HvrnY0B;i5a0TVGlPTKlHzxh^B;bc)Af<@sw7@% z5L}*u+iHiG?m9ju%Yi2LCDaa1`f$J8ZgXI|nDRz+xtniq+>kHbw9#lXGclymH<-C~ zQa@S~`Uxc$@usPqvx*#59Q;mLh2h&96xFvwJEG+&vTf*_G6{nU7zpj7xP)*6=qcE{ zYAHyR1N#k5=y=l~(xqW+ri0=a-==2l`WI0F@37Hx%ahV)wjF?3znO8{ z0|3H!KrH<08S!G^pWmhG2@q#?`NXOOsdEhgOQ^DbW|%JgN& z#@5D}bOmXZMb`al3`?vBl8^yv02nU~LSOelUKA_vVJ}sfRO2nyo69OV8{VGQ*064B z>HZ`@&`#_;0U}$%Oox&O4oo|Vy(#fnMw4lT4^HHi|7UjTf+~?YIut+U(6J4l=8o6b z6v0+wDREpSv4O~Ske_u6bU7Bxxb{;^L0)|VX{QH-qWA#;{-bIt!rwp|YvXBGF=-%& z71&j>UUdH#Wnf6~JTz|F>j_x(R5UD|MhH63KY8KUX}`V+UXs$UPGVbT@XJJh7@re+d->Vx=1a8MFGkZ6AY?58yH9$JX(hI&GDn%L*V=utV_UVf^wXJLaID zk3IuoudBFA03VfE;V@CX%^mLuX+%|wL%-vP@&zzqMc&rdJk!UN!bofSI|!sw#}BjZ z*Pm}B^NzqX%Q-18CmaK)jxC+Ce@_~1PU;HF@=Termchozhp!g)kzbcM7iZe^C|2-GbEkk!YiLq) zHJo?6V6ym7NkxUkH=iIDH*yCDiHi_jTwXPdL0^-oTI6VklIAx0hFPgHvniJ8LjUfb zxkUrxSu7D*+bpawI+B6Oc-ryGGKV{95_hem+w54v2ybp`^Io{yvz~eM1%*)r0Uj9A z2_Cj;i495Jp9xz&0*BYz;?1PAZkCEa+4RtO@DdI3anmW8f>{*9;+^PLaFEkAN>z+Q zGi+6Cv+b9???4u^812zRfV0nFSat5*G}=nYJK*_5LuzH|@KdQ@D0LY2C$EBXx~`@t z5_x4Gl|x1E>yCr0oN-5G@{)5PaiqYdfLbq~orY%{(io@mQ4@J_jU3x{ogr+vEzjgq zgUj-$VsC51bS4kBBMZKFHq_2Ei1CMIxO9ju*|KpTPKHEMr?E;o9ED1oV;rHyp#g_st^wv&&U-@HIux${P1hKRv*uXD)FZ6PqI+8dvpjtqxrN7p zSt7a!rp7N_^)s$kw9lZ=oQg2xrK`?!}o7-Xc%ds%?Vv3LLx7tHRIMizMKNMc}6_c!=>HUC(D!=MqS2Mth~S z$wPw8qwlmbRpoTMcio5m{QQmgqz1g6JrTGE_;i34aCvVuTy~=u91ttQ@=p8@Ak>MS zO`psq+y?qyOPN%b<$=`sY1UCE{>3MbJ73t~X`a$+iJi5KF5TX)AGJAaR6^V==;osRAf#^46CH zhc^%y4eb$zWh}S}S3mGU#BVpP(pZ?c96V+mp)uiI+Ch8fUB98MfJp(_O8*xt^kY=> zc`#X7aSIj_i&E#TpKhYW+IUj4@~U8Xi_v~3rT1AbI>$8E!U$bpr{BjLa+Nik`-p#+ zZ#JlCdMvFMC|)BYCfu5-6+FK8CLu|0BwBb?*5FsNv_$svzx&JT;E+I0il36pz$M)M zOVXW>Ex~LGZ_{rEhPNjW&ac1yi?u1?%oM5tf?W%jTJcvHp*2U4GyD5WCMlb3`J!WR zTe5B)_5z1NFcd2Ht_8tSrGh;rZlleBktesXu#O;1q1q%cawukd@4OS(DzYeze|6QF zVxlpQ=_^T${EPM(P0BlJCl1Y~XON2VR5|Q_pqF>z5`2HG%3Cr|48P)!lN5g1uBU7p zWwYUae-PCeP4J7Xfn8Hx{E}8U&^45Oo@cvHAtf%7;`J3kpj)wopOpIpKd=#sH&bEn z2ChQhzz)Y9`VG`{)ogSD4X?^jv{2)r99gvj zb5ewMF4fF&X03*S=b9UNKYd#M_!nM1LZA!O{6k4PpdX_p>2Suw(H=7d%J8;M?+@&* z@rW@IK}N1Wv|Q9e@$?nDK>#vvTj~PmgZoD*FKq$R;F7RMk|c~R@5wymuSD^LO%%H$ zmg`TC|93V~;27-Em#Q7mSLzmq>AMPe)JSj| z%jzE0P*}opPQ>86EB+}oA@;II!+i&l`Br{BawgrK<|f(fnY(>|{v%D)<8$G*i`u;UEB+{lm{~ zUW%B}sjUrwJ9-36me7k8spy++#+bAHeu|(#_dFiXY4|e3IdtlUw?WPYbnC13S}y#gaQT%miS|+T5+dAK}!S_0ks&eZD$6r%!i9i$Sx4h z%QRQ3X#oRuaKnm(s&a}BYhlR_@;?>kMb+Doy%hS?fQtlWq&{^|Dl1&ov!jxf^{+RX z*q7AoECfX%P@S<ICuDCtaL#EW*brX08cpzwKD|j`Pf3ixo3n zsaMlYQ$lpJyY-1O0I9NTwYVj<&QjVmJY0!Aa=$dB@>6;QOP^0)rZecJZG+LZ!=VQ9 zl$KId4c8xzBL#Z2Why5kv=aS5S!hnRBA+$;i(sidXDU|)& zmn8v34`r>^{uoWCM!zSv;VPy3g+KX<^&frK7ZW3tFS!$Lk$ZNI!f~3E8`Ph<5}wNd z2{oEpF5BI^$YPm%ITElcxiGpL-Ms;q@#laURSoP|0^A}Mdi8fUFRUh)S_dhZo6E|rZuz=&~PP;;9u3t*iN^U!iG zt!Hh8aM8(AmGR%1gSb?Lim>X&YMYqbY(q@Bv8f`;LCyX_Lk*Q-R2P5AOzfjs?8{=8 zK8V`U>wFoACW#%kSXZRK7R#;g1H7SXY#1GAW%h!fF#C&Q6;pkC-bWlcXmsEnk_}KA z^tuIfXLc-p;<_;=JgI+$l`nG7{QohEuT2VHk|!i1ZZz?&1nIBHOwVqP470dr-8iPB5OO=TjFBkPs?IiKsS<*M< z&o#AK+CQ^wZgABf;i+w8Q*Ziaf*n4bzDqKlWMn1V0#xMH_n1wLln7J$*0UWlW5bWF?o0D}yrOPCqzE)a(9_S!eH&b}?b(h@Ynr)JP*N$i!;r}Gzus>7uY#J@btW5fMtb{%?;f^Fi{#Ur9@)|;| zDy5P1<>xsZo5e6JzEfZ3&=ihwb6Sy!Ey;XykBFdZ=!Ac8ky^~=|IjK-%PZ-I8o^nh z1D3)$w7vaa7wbHx!AOc42bjbAg}GPJ?XJ)N94`0x9W_*eM6YDuFLAp-s+>QfpfL0UN zHF*!o*?D7GFFHKIdI6i-Ae(5Cv>L@#Rts>rASqCgIT%rYO*mi(0L1w-4af4C;+4ND z7>vWI3!g_KZmjLT-)JgMbaG|Q5i6zlFnEPb!A3TKz=$8sDSTd2y?+M4GTnWmKd@%i zUkHelpeJA%RU#gN?R{?%D}t6)r0EBVNVXZJGexCv6_k~q0uC1X>)N{`r0OK3KKjz5 z9Hd@%xFuOMXlh<~QJJc)Tq4T=m4NEkTo@d%nj*-;2R#S_M8&?r!PIXw%$RUxYis(& z+@*Le?8@f`B$Q&%czbB&O>JcTxIWqQ=$rkNf#UK|-`OeeW>|I0dYW`2O9HdBgYtuF0P>JA7X(Iw@gOd!16;OfmX5QxhdVoXb(#@` zELoJc+be}Vn^P5D2dW&S)nVnKs?)$V24?X7@Pj*9swx?UR9JB%`w|IKQHm2-B^j*a~^YDL`q(1FC|C4&{1qJPiybO^>Gn+MY1a_p=fK zw>#i_vb4^c@x5%h%_v*UZs81P?l~s*iiO7czHsPf=MIM`n^3zLkn)|n{#2h2miT9< zhinXd_1AFZOqPRdVXB`S2Ag)UNJXAS+^R<;O880B0N1s}0y+}k6m5glmqUl}UMM)l z>*;qCTVMVZQ(YEr?hlyAhA5*_d}lZEt|?^g_n#X+ShI`x5hMfiep`p2aKa`4ci6P5 zL{Yw}i0q@_gy`u@=hZ(ryxpNyGr6IGQFQE9&SHI95)QY7cN9u=qoFGF+fLw2Zs^No z7CUaxN$JOZ6fxh`1M39p@3((H>grGm6UeAZU&%Y!rj^Z1OL8yV1v-zPLUH{UEbJ%G zShh96Gw`ndkZM)o2Y;#c0!-y<&H$@o}t z=!GppJEidT+PMoNrBY%#z8hOuZ^*)Q@Y)#;5dFA%ZFMQk@8(L{4e;Fl-p;?z-~>Vo zIR9sJTf3{HgR7ZVEQT^KHz2s24?d@?n(V+EUW9KVxHPTYue6$_hk|xG)kIa@sR`Z5 zzhnQn2jr! z_l%aqsm3hv2Vo5>s+Rr;A5Xgc*kR3M?ZimUAnA9(QeIoY2bun-Nptn@4hNLzC5BHK zjMMm)7TrvsB9;B!Cupk}fn2xk84>sOidJ2ml1GQJqz-NKad+IyGX+KPp|d|)P~HuZ zQP&=3L~VKE*lEQHHAA%P&tXU5%T!8up=1IRi{)y>o^vqhUW-~TD@Q@vT#H3i{FYDC zWa3Gl&oK;Yj$UMX4ez3Ps$7Q{8(3-VVclqm{)F{>_#FPaPU+Pgy{Zou82BOxNOhj~ zq2M%T@+pnlNZZd@y(V(lswe?qu2OW@69#hJHSk3ES?QaMM&@0=&6maREdovzL0wV_ zG&QSGO+>Tp{q_`c^N>a){I-lmV8h3}j99!k5jbNjmHp1rC_-uT&x>+J$IHul2RWKC zjNoPE?o0H+)4CY3c!+szK)7bRW=Dwt#d{SIpzBA}Vapi1*m%G$><-Au?|=^*b9@r| zrvsJ{6kSXM+CSOWRGw|hDK%bM6+j%tB%z>=RTNpk>(@pL=6Nqfkmq%*#6IkgceGV; z>(=09kNr(1H_SIYo3R_f_~L9|9p0rjGM27;%6RrSUAHUue1EQ4;jYrD!6^7Z1Fog%Z|(c zeNMfZw{vMtciN5DX=V#Pye{-@3J!fF;Ld|qqKpz4Cj6P%jue`e96yIbzurmGl_PfD z@~jwy9@k*>BO}@c?Y`;noVhfYa+gzO3b?+=oq0@AV7({OA(+4bstgnyv`b=$jz=F6 zn$eRSXNrXQJWMCI66mJT`C&xHHxOuok8MeW_b6*K=P5~A^arO(<>_Vfxlh4-E~Ci0 zJ%Q{`Hu?-gqVu!L1-~25X2nuH8+cg_QTC7!lRi#xh8P2EkB7{bcOl|1hhFHfl=q!M zT#qh@nO6Vct1p(eykH;ynrq|~z`S->$%}zfTKhZOmy1x!jG8d5D{H*5F-16mu2V_m z4KC*qfa1tCt`OicNnP5^*A`p#z(A1n>LFN&pBmnZP#E>UX>MVi_k_U(&(q=WkBQRWd;dUHyDVvpR1nQuL8Jaso}ljDJ)ib#n+Q_8?YwK^ zZ?x-yw5}y+XMjM#O-c-uN{zysD&<0rL}HT$gFz0Y4XJc#7^)^pFsFNgz7cqGe80!^ zH9c+1tPU_QOM53ii$LX#h~0Ac3=YfJ&j#e*FV_BnKzzxq-B33<&s2m$39gh6J$p0P zIT!)5+13?cp6B^TLec)_>U+mAz^Z*=pQ)*mlfc8@zedc7nso4DD!kH>!-yc$q1YjX zsfIm*b>z9_&T==!zi#Ix`v@nhv57#E%I^r3EebYd_CWzVZJit$2pi~o0VK8RirYb? zxoqlvU2nMz$0Qxk%_Z1D+SteMip+0j;};;gKq@L^bT%L|o+Bv)6&)pzBaXdk!2L5c|X}>9Na-{&?}M> zUr_v=oAgID85A=jhRrNgIu>nDdzjm6jn|!Vy9f-17)pc2Zl^`ng6IENg6_g3ZbR|_ zSB7(5h?E0%D5K+-dI~Q`3=@Uw``$$_$kA0Tn1MV((4ECsnP0tu@k_xe8en>}MxbM0 z3OImFJGd{TR=pdCeyO>#@bZ#(Uec?A9)=04f`ey*Jo5r;Q4vDgTP^zzAzUi1>XKGB z0sio=ebyOX%KGTL&k!^9HnCJ|#p;*RV4&*Y$n4BmBPKl7b^AJ^9g0|=*VAv4Yv>4} zq-8Y&=n~9%2@DnNIMc!{hd}=*qazpsuzg zPiPaOY`av?nB~;`RKs(E0xNBV1pGLz7Z@WqvNKNqKas($uIv8(4ls>IA^V=xcEs$q z-NYH-fM#74+%UwwRD%>QtTGknamP8)B`Az_LmPcz6{=RBJI0Q|Wbd|7%6+`+U19;p)P|jP%LH(Ng?hI}Ss0 zEted25e;`Ml13~qr#h|<^1=Uoklt3dmD_}2V7vKwG$+lhdTFO}0voT=Sww4E<|#)Y z^LdA2!!v3!z4Y;pdzxXuJ~qHhHp6gv*qfdM&=pg>sGPr1jvOM0uVm4YF)*dvpGtWH zGY&NW9axe{4gYq4ou%~SFJ z6;eXRWR6rwN#8H(e07E$FE(iV2h$W+{XR2!qJqO0qfF?RgnW_ zD!sHa$uwZP-z662t~%!$ZJ;6dZ&BrxQ|=*;vM*l6VaoHv`GL~@*c4jP9N9IC)6+PZ z51G|lODvW&9knSW3?3k@3I>OCdk4FC$dQBqgmv*%De38gsgVR-hMh6fkbQ5(Xmjd! z|L=RcO~v!|!z$J$@hw>xS5V@t;EkdoMx1A|`2m3(UKY%6$7;z9UfBbC`!dIdS)h;b zH|ofWH%LnDCMpo9@3zf6bhHtDCehTfzlfzZiNje-Qj zyYanxKYW2iJPR~J9CbliE^u#u2oIUdG1K=HPN6m;dcSn0rwrfk;E%Olht&|N5x(?s z5Ec1iH{3{sV0IK9Z2ZX}-1%YqCNFR3^+& z%vA7Kp-8N>@p%$!8|mlHfc1ko+&1YK;#3e0yR16)tp8mCK3n<**!iDUi_NKs$Q5r_ z8en_(`bJ)v#x?_9HIKqOCwfs)Udb9~cWS@>%?39|W|@a$P}~a` zhJ?+8J-+l+2ZhhxP@TJy8DuUX7sb{x%Os_pe_&(dv#{$q3^YtlG@VQ7f&sxVD6>bf z%@8$RF8n09f`GQi)tx}aHa0X+isa*0%(a!>ahT}*-f@JMNBmpxcMDBnc;Oc0gpSR5 z>11?K#NB+y72h8sxl02y^o|iD3}ZxTJ>ZzXy+FNq9vuyINO$)sB5TB|&sFrSX%@vC z9t6b=PvSZ8S82S-cx23Tu`>+MkCDv)$~-}hFvkK+<)bKome2G%>4=idZa>k;IA=W_ z$@=wYlzERGN4|Bl&blqUO0(}GQF67DYD1n5_!z@jSjI9-a z#r-zldyj8k9}VkH^TwxMd`@**uGLM+>7e>kU1}O`aZnL~T2KsN!Es{~qgfSj!6&st zxS*x@RNb2kHiQ0=TlSu+Y;Jmh0?$rap5d@_cK?8YVIVce1*3nl*Z5MvI5}xUPUh(x z!JLxSaER3?&TJ02Qy4Lum)5l=8+`iGm2Lv%+3qOamB=`pks|8Ytq4(SXaD)Aj`B%I z)D*$5+NDul|LZqWC&cYY3gs-p+^b!L(TfxkooU_O&yon-!m2WZZl-#>`UBGO6V0z6 zaY2jI4s|aD6}8^!E4H>!7CPvm3FlGjd=5u-AzE=Ln|K+vj_EN1s4K{QtmpMHy-Ek8 zU@_fH6_{r_1qN0bn;NwZ4O@Ff!Ek)r%a1s2mbNo)h(kt~W^2J@5%!Vs03EW+OV=jB zO+ttdWGAb;{AX6!Ypb<%fK77veqB*Egr7z%j={rq$yw+h zuX&IWQ#VhV+LqD8%xonT6>7!8sNCh=2@BAZwYS8$oCj76)G6Vad3tSROMgjH{|$p% zC|q)F#-Nq+3RX9W7Uz8KBREwpj5{A=bFmJMO|quMZ`8fUFBk^8=iC&{j|eE};F1!s zQuOCcfep%CXEe&mBGCk?<#p*xH1WXGm19}}4T4A|M*H21o^M$7eX6>bFw8#Fhg37E zY^_;~=1S@^b7f?b|36kq%9r#0I2A^V2$4X6Dr617b~o8Z3LVkuGgP6}zrGAWDasC~ z%lG=;nZlgbgIP?YWkhAh?piq`S@BO}hQ2UX>(cK@6%LTZj5IzqO{9HigS>tgE%`k- z7F_M4!N6MBVD3&j>k%-AnbS&q?U4wFGVc(JV|OjUD}W!u@F0ktC4$1pOxrUGLs~0_ zWO)x9zQX+4X8p~VvwFlU*u~6q^A(&{p^fZXUCmSe2}uQ*I^2?~gCt=0%5A#d@7jcU zDCyBk)Q?Ii_QmdF#vsIr?`OYw91EROsYhe20+65?ACS1#Lf*;A zarwqnH2&Iv4VLXDj4@b? zXd3~t;Vt?fmT0-vm0ivgZECCw6s+Bln)>KmcO7ilF;!1*r&wQZW=kf6E{j9Q-c?{_ z;P&t7RudK77w90%#=V(L+yKafOIJkchL9qIHvI}mZxf54`7m_7Z2#B>vBibL6zBj& z>7(-&6}{$#$->H@;%)n89jmB!l-OIsO>QjdQJ{RG7iKts0}u)qZt>a&)P`G2!(bX0 z|7ZBcyb+ZlUy(WTn5ye4XFh_bKC=HRqe~_CTy_7wW!zYz$`vCFez^niJPW19Ddm{!iy(^{4r3QSk%Uf5jOe0yw)@F*G=tc?&czJ}UE*YWA^uzCe&UTg z7^j{_rgupzMOjJlcfK1PhP%I!*hePUuHvS!P-5^BWY%mEq9J|xI#3ZHldid6v3E4 z$is%6>x1lHDLYMWNh3~yzgl8Y4Pg1rna}FyzWB|vI8LD$nEWp{rg$DMDm3zRH!r&C zkxP%4rax$nFfD@ab{oyYRaPz7OTl-DeTvK{66) z9Z5C73~`OH^Vm#APKSbYl`sM=C6~x9YC-n()g(ibx*Oz0IBl!=7}u{6V(_~eZ!jsQ z*g5(eb~uS&p*HP{pXab$^oeuA6*N0^z%D6Lj75H`;gV%Yrq`T=}vX_A-;yYR1D$O{<#uFNk1R! zs|IJZ*J%TM;d#T^YfxleMXX@8b90yNF{N*10Ce(i8ET}{lHpy*-SkfRPQFv=saS_` z;EXbYq4bON$wXYI@~HDoMh|pu5vxUkU6R>>dD20V&K_Ux6J-C93X{=~1>}!+Btmg%YsgX88CP;eVSv5)7JI^jKXaf?d&_M}E}M9s~ZE zP+bKPdOA(K;M>5NM}(kxVWwKXX#sG+E_|zK@9(bu2PMnnM=muiQD~{8L>C(9vE+lP zlCw`IS)1dFuUD3FxGH%?!%9gKzie?lm~D$`JA#@B^a(y-veIGdvyDa8Vek9|p1OCm z$waYq&rYpfgSDpU9@F8UuPvRkdgR^VC!>V^aB=KS!F0{rf$|n& zn=}!VlPrJAn=D4(XMMsB17H#o=hjh|!wua!za(WSki?ZQm9)r^u}U4>4K(U*34v8p z&{Nd#D1yigTR$WY)+|z4+qbT+te${VT81dqfS)v-ew1wt=O5rZ=(l01O^|VlR`G1u zej^<)p4ZK`eQcwmlwWPZ+yOtwEFzjW$g50s!@~E{&bBJO)Plc|t+M;T-+O0z=2{6b&9ijekN=UR!WNyl{Sa zWhpI318~tmETz*CBGvjkdmxQx{d|rCM^v_Jq|Tn^nq6AI@YOTQHZ}?bl=Rv1w5$N0eS$J@^N9p6bpo7 z55kdaqkUC}o9JuPIBxb(?Mq|wB**;p(c>IWMeNC`l|DE}mr0p9*g>vWDPaJ#+;0Gb zPx`Xz%5J^Vo%>gX0-_I5M3O8TcMjbw{{}sml-dyh*vr-{nVH-)iKa+p2E*W`b=EKY zzz7~qzyME*wz*C5Jb|&u!^o1PYg}un@;DfGH21eWNgwJ|1dvF`W! zl!b5$?DKb=T$U`uEoAUFZf*OkVYO%tkXmE8RT(`cY^E#I z-e+2b5$ZUf5MfC+d;l>}1EQ#ye*I3iq-IUHu*mvd)q_MP*xL~&kd^%0cpn!}yZF{5 zD2Gk-2HUDr(UP>ox69fc{NS4|b4~R#ye?~D-b7$7J~i~m3k*>7Tkr#OQW>dVT?@z^ zjbj$r(2)(i{A6i-HrfN{)LJAEXem<$-v67mzyqBqSi@_&SLueflyoI6 zj*ZD$`}7~gNB_(Z8?Pzc6r0U+?Gf6oG4xqFMD_g%&C?5_dy554POi|UgcL#IHP#!+ zGsRrClvLuf&c{I3;#W&go#8800o`Yn^&kjw;<+Re(WWdk;OtSr{@yQf}qa9&nrzgIx#rw7}Eo~-CNjSx=y7#jD9T!C9gQM(k=aX6VD=rhnC?g}+o zynDdS+7tto)w5Y%*M+!3ua3=&!=r)_Rqp_$ou%BRy=jg}@7+tCVq1e0qFfHOP1$HW z3z@cbHRV6Uv|ba0k4tod!;nO%nQ-rCY;HMlJ2q!VvWfM)N-y&1A!gwt{u0d$tsGF& zr@MdQtY)xr?fnDz6?ucZ4szyuJh?zo26rM)jdA`YXWA;ibJEz*Zwn<} zOLJC7hQD97XJZi4YnX7)mYKzEu5DW4bs1!Oy1_qihyron0oKBc+T}y?A9uqsZunV{#WF-{YamZCg?mc#UGijb=H|TFeFv~f`+#Xo2sHcw)Fiio8irgWZjk6g`kR{Y z)zcEBOg!BVdO0fiC;l?aK7ce${sotj(hrQTl-c6$lwa|$Ne7(6FExt2$O*VDIJ82> z0J|pohgWHY*mI=fRbS9m+ZG1ZTuv=LuCntZH_~7Cwxu#*8c?(P>u2E7xpZcn`E^bG z=`~IjSj!)$(O5=*i$kcM?&&Wj% zk^dTf@^RZ$JZX-I=uqk~(WBZq7`hB;wS`x&IN4>Lso71?_*Z&4+o3@@ct;iQe zlC!L3=>7tFvs}Rs4}GG9#gPF-iC$)fpcd_6~$fa6t~e&k=ikM5O{XA zW$-2XgoUJel6aa_IM>j|cnoT3>8c*uuCuljY9I#fg83vo5Eps^j8QBU%>2VT>iI1k zGVu=oS)cB~g($-gNKG72Iw_XJ494`BvW8puN_1S?#9&|kMfUGXxrrc!!dkW83quE- zNawrA?jH1ht#{zpknMrKhSrq*DbetnR|ZW8)oFaC3O9 zMNHBHep8vzBV}V7jb--D-O8v)H&`edMf3{JWj1D{?!;{wY*M@Jo~oaPDHb!(pKqIK z9`0mA9ITezhxQ~mXV~mDFl0uq$U#CwD4i%}SM^ z&AATD=G81v?5{9nAU!rfUo7*t{;HyzW1RE9Shmb-a@&9&zSj&6NZu|PsxIU z7vz&H>oJN~x>X#vN!$HxY}*6M%0_VJB2Am<;5_lN92}>Y-(D}$%u}#zDc3Z{LMa6oyi)w zuPc@B$*2LC8X3O?J5@Z?u?ZAj1fFN>8{P2(H8%KN1K5RR_oT)(1-?0!3^L32C{ZFZRXwM!C(F9WtkAcQ4iKOLSBbRztzE1-7xnH8K<{w z81%?CV^!H%+(4?=og#{{HZBT@)1Wz_IhcZQuY9&>kAQ5`B24$g~{1i zBc;jC%HDMilJ{42DR7XDSqoB}?xzA_XAJ*?br?Mj#Xt}20inp>&>7d(Qc@rb)6s%n zWvU#Cy^SbjBk091=^gOcunq8RFF3R5?0{sXomSrA``3s*y@n#|Y43_`1JH=f9h&o`hFvz@u3-P?JGE$D>=#p_!+S93bQ411eSr z!EMC9m``XzH2nf}bD-Gf0kXGmGS>*&rqi#HczC#cRM|Qpz&qtv&+99P0-#xf#L^e- zBhlJu6NfzkL$s;FzumRYJb->$M1bq%*m0-J0IkpruAml`7!+sb&ArBT85Iu|!(Sf5 zwIu>}-h9QlVpjB)%j-M1Bcoxpa?pg&e`dylHiwEPH1(HhO{}5}T2X;mS`rJ=h(8)% z;59YtvTEH2_y!F^L%!De?-?&58)$~Xiu!otB5BN)^wR7UQB+gw39J)JE3oJopuMu1 ze5Nfj$7y#28xD&-j*VkMZm4i{JbCQ>tPuHy7p(&P`-luO_Ppe<7-u&|dShdy@vmOD z!yM)z)fV-lp72B@w5;@kzmR;IJ6cp%<561}>|Io0%{nltB2FxkB)BbIx&=|pZ+4Fb zD=RpAQ&4~|<@jP5W={73-@--PYmliUiE|#d6JpG6?J6yL#6p?w9^8BR%z@xry>F35)`)=aU2e}_|*5@}Z}o=bQ)oKFyv7M_=o5^b)r$n}}r^1E&qH$~PN z_AxXf&V<)H&x98(oj<`zM8V5Lz2Sy3l}$tOPzf4=qdM4;Wa6Vu;tc$<8wZ+qz}y4O}s-s_E0 z%L^hk{rU}37Ue?gl#a>M!?TV@8!3n(PrD3i&nucmmLxOa#hLTtPJLO}WZk?Y5o-Ts z*HVgIpXc{7GI0Gero}DQDh!5w_DmJlNNV7AzM@9jJ$_}rQdMa6tL(>I&&nhq%J*L~ zp=am#Xn?|L%CCL9evS0z>@lUdzD}oPx3mS~x%1UCdW^$aAr(sV%B|=M!=C;si@~69 zLt-%<5bW8Ti}gYx*&VZYYA-7$M8N|f{+98o^FxZ~<$DotlM05zLUvy6spQKF66*`0 z$^4=Q%SHJn^nY&&g68c`KQ2{rSGf;{qitw{Pu`}np_Ps_oG)wsgu8+sMFiDm{a-fI zzfsyg!flZiAxI1Hx@TK?xF8uHAa`Rixq`>}ui6M@;z-#0R%{TwBm<5?f?>TsVno;Tt$PBc zJ0VXQd3C`t!Ieh|%NH~JGviv;kVd`au}DM6Vq7mGZ1}QtBIwFW$vG*BVmE{lT=)qT zvLP1+Rjq5a!<`xh!T05JV}oR_p=xMn2o8I&uxV9`>rNjyQ;vgs}#t@Zwjy2SS7kxK7U zG8Cg_dEQEAQIh$=?iimxHRzk3My}oH`A1ET~m7aSzD~D>PA8`U^a_Lqm2_0;`jp(AyA<;hG z2*b!~DZhj;(HZ4ERiEDV7=3e`{<+UwXFC<$WErLmwnKWs+9NxKLdO3uCNP=CN(5d> zXkLz(D71m{zG~o7KW_n9<9L57IFLTJ!Tfz48|Fv8+dlgjtdcp3O&}xpbIEQQv$a^)1i<>dBSvnnXtBqKIR$A$ ziUv@)Gz!=)l=!-ntO}iIgo}9p*61NoLiB|Ukt|n2+_Y8`^tCTmEoC~3L)$eZc8?C> zOdW0I_{uAy{*zYEtzjiBFDil`Ne}R_g+Rf%hOj&VE?FE2y|jlPt-^6A#|W|l>%hjF$P9){(e(U(!RFu(fs4>+Aa92IfVxQr#{efzz!=*|DYp8Tc_V6&>mMsDoo4SpU5->%)cru9PR{UqeXa1i zjp?u1bqu0`rm8jkhbjVH*?{KzZoE9gRq+GRi6#=rVm%R@NTrH9eqz9HyM6M?7W1)r z`Qxx4LzY(X`hz=5VGSrY09UpdTs%poc%@a=1Rp4}Z;oE5o%{D(RzL+a#FF2Y zXk;5fop<{iThJB}>}OJ4ag79$)$SQ54{(=3r5CA4VpVX=w7(Q@?b* zJfq~rboBR(+EDg^p=I8@o7$LwfIi0m05w3$zx?J7@34X1qeJ;|uK$luINES8+Jio) z#{xF|1b$yP^RBj!Jk+HY9L_T3^>wXRql%Krlo9UWIH)9~ z*9&~uVa7!t*Svu6U5Of@5x!9tP4SCvpg^%IYAdz>e=vFEHAZVf!_pjVf}r6@l%IKZ zYnBhEz7I+1IBR6N4T&8Z!YLeXZ^^IlKCK^;+Fu)F>*(eQF|VLzdroC=67G|OpHr|j z&VUYe4xPw^^JCCqKnZx-H|7qR>$Fhd#gbr;mhIR8?a6bo0*ql^>l2jxs1*nq`5>X{^iR-SkJ?~e3#L|k8=tXVaoJyM>pbQ+mL!`~q z@#R@$oGjM*RHx2VY!br0z6%mM%lPE+y)Q{3W8Wy|8IcN*2!Vc!)P4CZ*n5b{n~mfh zO}&>yp>5aXtWemasy}GOl7)}}m$rhKECoA^$jpgW-;?^JL#&JZoE)BptaCQl!wZD4 z?K9nkhTjbBG6c6(^H>SSJFTo6g|)6tC(73vJ?Tee=XSG&=&m9J3(9ei+0>aC0-WfU zK1r={fzqqn4;Hhf7p}yStz6z?B9+w~`*tW-7(2@z$c-7ReSygA>=y6_;g=+4Ni>K=bL|_A=8ek3e7SdlVYkiVz;Dv3SXO%DekAnU)nNG1S{^1 zxcy7Tg#yXB&(*Gn9{G{N6YUKKv@NE-#_~+m-X88C-Tm^@Jwlj+0d24r!;$2N5~d;z z#F`O5-oyM6%fy5)30yDpBHn8y))OQU3mZ~6;x9DjH@w-n{@f+#<&jGwUCUZPWS0d^4@FItrI&nE`I5 zB~f01JEDap*-M`~CZ{)eG)(?~^n-k}jgRWCV*eK9E@b|x27b-lQ5ZbU*Y z8*`zvrVG_iHqV;^x@*PJqBWV>dEFLz`fh-YN=!FLAX7t4-pCEBC78GjX#BH|YgNib z=)RYJF)R4D_lF@EwT1}-gQc4dX#`~Nh(EllRbWtyz~GuOhf`h3zSLGR^CCDzC;U`o zxD^(#V^+Y+-hu2wk!iv=#1_FkL|%Qn0tJllelO!hWx;R`V`ppg$di@vWB~p2{>>VH zx4OcO3xQY0K}A$tzv^r@vus%}Onwx+sfCNEDz0H!WGt7>p>7xf zs8)3e@|w!s7IQ^H95Bq0GX<*RQ*8k+$e`Hu_QbbAzCWq$<)e77angF+%acP9!vLRB zA2WW91!p}?XK8<8bT^8)+e<@l%(wTscGk3;TWj2YG4#WH~`bRjN-nWjG zUH}kgtgkCLM#jDo$G0(gCDL!i_geB@ApsIzs=#XZm6!+ohTaG?@n3ps#S7D( z)&zTc3__z_eISst?@1Nkj#f(ulV-LwwC}>@gV5<342WUZ`Woze=~lVuVb2q4=uh=} z22=!e-#hzE4(EBuGY+$mlI>3hdJXd7Q%XT$lA!dqwM34y72fqKNw8- zW!iXPI02LZFg&rtLMsf;yTBml#-aF6JpvxuanNr!?*!^_J~r}sPMOi;+i(nduk`GP zdzZ85BJNA9rR;%iWDD|gsNjE0>>8+qR951s@8-hxQqxbXO|(#5ADwUd;E&J;Ero64 z!ShEg>vf)^O7i96_L~G)!O?4)TBL1ct^Ux2p#(`*i^73hC?$S{Twol`o6Sj zU?sI&9mY}421(efL^(!f#enb@Q$5g^ntK&*Iz1-Pi0~Wwm}JFqBdyA_*%@$!RP9)u zD`{1?c#mx=sV1<~I@$wiMW76F+I33qLgvP0&94I3+OWtO&gB-m^9r{8H|4qSdTioX<^3Grvd#7JwID;FP}XC%U!dgSrPs2 z%Q#KoV1*o=8^#>iUAF!!^YE3KK%`%7C5aW`&oH3Z+0o7F(7pcPO>UHm#s9k;Xyk(L zfm*TRb_)la=Ed5n%}W>QPqx=-M;c*mCjDy|4jGsQ5i#g3CP8Hr58|J`({GQe@xE~b zm{9o8dE)Al+($y{5b{|&{y7*uRwzG?*ny4?zyj!R}4(7lT|; zkIs=7gV#2=hvy{M9B54mIC(bxM*qhRZQjf^r&%?Rc^*&#@Z0jy7ZE4pdVwUe>5$TD zS&hCKiRUjQOp6Ii{c{Zq{N%TkOgpnFt(Vc0tu~FG`c=J$+{LGznjaLP@9@_}C(noBA!}R(P8>SU zllh8`$-Z?meQaOre#^={L4^6Of^VaxG7g@7`d6~6pna}(52{|Vd(!q|)32sjsW#9D ztQ0CrJsi@MtorLp{yi<0bMtYLHN4%eZUn{5y>65Qq_Le-HJh6npExLC_GdC0($Z_Q z5Nq|xP28n8Z4(x=w-Rg~)LRLG1UMTDd&@{X! zW);B#<8~oeJFpg3%ivaf#X zD+H=P&IoENXUi7`98;o!c059A)_%x~1zb=lb4gBLNJX>#oh;BS8zx}1ifXYaJvzgcK zZk_j)D26ZmrY;492oXd=MF2N~RYJ??Go)=B$T7m zilj=6U0LR8zEFkHe%izF~-wn}B;y%1uT>)H1)Q;K7oSnA8^O8Hb&pQKl@ zVc=a~_F4({SAO>&mytqNYtz$xLkX@fYU>kSGjw4NjM?Twd5=J@2E7>TpeB?AWbM|eb!a;$4GC&UW7ACt1&oxwd9CLsZbEv%}plpZcLiL zufVc|B6~CQw2TW?@y-()4|{~pYSZWc2x?H0zkNPq(oz;9y{mDH&X>(=buVn8WDXZ0 zL=)Na!dW?KQy)+As{NX*0uQBu<$<#_gG5{V3lrQ$+7=0vlRuC5?F9>(A>Gk{ITkjB z1?CN?MA22`F>crkGDKO;md0tJS8C?Nwr6sv@=yFndo`5dYQG8ae%QJ7Y{c%bIs=zn zBO1}|YW$`;n0g}ieC4u{8mS&^>lEJxDeKa@OcULV^)nlRF+}WPAGO+`1)4YOeV29p zdt>Iw)+uUIi}@eADM0nZ_VRS6$~xwM4D&c`(|lUaG(j>n$J%Ph5DZi9kjcTlG6rR8 zC|JRslRpS&J*gy35$eKLakiJEbk@)2ShW1hi@j{HqR9(c_Cy91H3@W45bqh!!V&fI zmj%5jw2#}|)**4O^M=rvHVnXt`c8q>kh)U+Bl$tA<0l_IeVKsoB+l#9{&>IrEVu9U zh-oz<9gU`EH_RKsEk4PU#ldDh+F38qX5nFG>85uMo>fPq0oR*0I;`?k$ME>hg7Prh z&Sv=#`q60j-L5u?UNxoLa_=#jFR*#yx0ih9W?$cY7a5&AxRp8pze;^wAx)z2YR6jn zW&4>#w|vsNbos&W){UR#F7T%!WNR*%gc)uFWH}hAPa(jtne~rBJ*Bq+-_4W{Tbh5i zi@PFx;nn|)?~wQXhSC{|f%gCE%IwZ!;?Y@!S3#q=SRYjaKktvktHVeu)FE?k8;0=7 zs;=R34s@VI@>))wA;cGP+qAS^3$u1Pi;8imCRXOK0At&}F$#on-2TRPyQJ7&%7! zWW*f{ZX0U{h~6Vd;~*~gzexz3b9aXo7~v{U3?LFM9(4oUGrH4p{ihTt4muY1l6F&q z5jJPs2PW}A7iuzEvRoVO0G%tL6}||J$!diPz4}DO)Rk$5sgLu;Z_q|HjPCw(g#*jb zK|CY*DF`9F7Yli)Q*hj?w!vn2Y!O?Q=abR?ipL8-Uf61QVtQ)Ugw9rTKH3uef-EIT znv&@?xlc08#T@PO9}D_E1tU_ z2*eh0Gc=kwi^3ZrZ5}x%+92E`dPbqyQV$S?-Pi_aLgbINeM5yEBSP|KImaPSf(~M6 z%8FNXryaFRYUgOk){*(AbF^ByX`5J?7C-j|&DsJ`874PX>{(|5<1_=?OhermbK&L# zzIa#Z+mfm+i|Q<0gj=-*Q{`YL`Ip0zGsv3#Ju-0>+cY8w$NeIp@rgaQW#7ij5m8)% zt2&W>EBAF2j%mtaQt8T6pO`L@tEB2GqgS)M$pn;rjz-!NvdI%6#e<2_JYa*nPC?Rk)igB1l|`dDO9>nPJO|e64{TB?WGb4^Ys!MezGpQ z$sPs#q3P3O*P#d&q>MSE(B_|J(~CCJO~6y{v7|L$C0-z0{3QaxBTS#76kC$@R-*Je zmQ~W43GL{N3uy@@2L5Re)b3&1GX=MmV3PkSsU+%%iUwk{uZQB>bq z3Q8B18tB8mGC$Z&2vSqG7L{V9liL+E2i}%;eu!#s+7fR1aE`&6+h8u8%Zm&WoM(#=%CqIcekoUJPRpxJS(VVJwhutXkRBWgL9mnK z?{e+8XLy3dCWko)lVclxtbru;8|z1i|AKv~Aaqtl8dH-ZTYd?^N`qg4{-5o?qshOI z@Azy1h#~p6wn&1iee$P^ix#br7wO(Rq#71=bEadan_C8A#KS#4kXW0S(&5DTg`Gm% zG8Om;19HBxjs8Fb05_STR*)9K1^T}9?nd;3th7O1q>4cB zc@dTxv$_Ha=FGZ26Z7A|O3C{Rm-ck98`bJ2Lgy-#I(_Xrcdvhp@Ms5QN+t%!r!QBI zad00^%i;QX=^$g&K3!+{7OtJNZIkW&Q%EG@r;9^U?+aCZr{&CaGchl!W-n{51q=`1iA15&8DVR zU4!*yVFY-79WTh66wUuBnIq*uD5E^sm-FVCPT23p;bN3_Ou*Xa$;`dsbTPs4OZYg( z+!5Xri zVeWeIBwaQHwH_1gFM6b!(rc0O{2+crl|YtS^md|Ob?2)^3eF>y%uu12YnKYRh+dbZ#Fz_C|8?}^NQc#>X5A=Rc_Ga=_Y+ZOd)GVbfK zTG=P^^wK^ILlcfTeOC)q-3?5DFUd+#4-nQA1{0D@tR9>iDH)=@qtVs%Yh8PJ5>X4W zC*hn?<`RpcLcCOq$Sfnz@!S8&*$>hu&2$P}O@L0(+V7-@jnxJSvj={mn#gv#-3dXV z57t`em9U|da0q;;bQ&zF7fa`xrlFq+-zn+gKU8p;y794QgbMbm7*H zUY@R7c6Ae@37#F9>n=KHza2Req#srg!{RktciM+zyQ=W*rjRMi z69A4fw%N=^X1k!w3eDZ&UTC~!z>-yvk0J$Qs|!V1(@ZcAHl$)y%D|ZJ*h()Gd%UD@ z)j(?qh4!wF%~!OJytoZc!5&k1$OXJYt4SU#!O9w`Oo$T1tyE8MRR&=Mi0YTY(o))l z@L0I-HY>;v_ln|RRpC@Gahh{#RXx6ps&&a)xD9&)h=1E^VOg5^?p*BOYo}I4ONO^) zYJ~r3k0Lo!P?cJXJ^2oLs(!)Oh0v$cQv1+By91gtd%n9_x+x8L1qxsi~E3K1Fz^=Fmkw=+u1_FbUKlX+$XB!hgJ{AI0~m5*e-!d+~t1@R=uqH zCW2W-D5%>T1Eb*R|Az2pM3EcmVO~Vyhb1jPC)Ea6{fJF3$_4%A)U>TdLa|O5Htj7bjHM+Ch?Q=48?YmI)&}`)>K38p#Ij2_4h;CYpnc$asrCQk!m zn)dYb*}eVI@?3sDk!qZgDxLjatel8;A{;b%t{-k@Skmu@J1?MOsf5*+3Vk>U$)upf zr}#tKM*j6>wdY)7W^g#s-`{^#{K+`19#F_q(y|Lqy9<>bGYJW^UX6vIy>_e1IodZh z>G_fa`mlTQ`7fI{h zs6der`neRGeYK?Wn#m^&=2d-}*YLT!+57T<4e*!*BjAX>dtZ5D_p-+AAUM;_##u;A zA*EkmtHLs!(ygE`D8vWAi`s%NM^RNbdxVF1t>Q>3A{zWf6QgIjl_u)vnU97k? z3)#Jh1K404?UIAiNSEp>jO*+^0eh2`s7ixmoaKa_$aVXS>i5S%!C5Cbhp0xUkWiVJ_Ox7?`Im>C7@!hLO8+!Sn5o%H zA5=9?nZcEnJC%b+4kWFvtaXJE1)(X+ZAPpIp%k`Br6# zy>+mUd8;sS!DIgo!HS{QZ=-rD)`|!I2`4UX6Lc3Ss;*d{;5E9?a9*hEvTnYhPv$4x zg2c_WbflaU54a;8wx3Hbc{Wy%=XKH*o(QGm!cMTe{ZcEOPiub)ME7d{DVMElcl=#R zcvXAqxYv#A9_e#n9U7=;zR*vLFHVCM2ce;TihT3d@ui> zeePdzFmG7f(MK-CRy+hfTjC#CAE>K1p$Ed75fogyX~MTR4fu|Kl;Nhf6R{KLXzRX$ z0#eBd1O=9@KamK)y>35r#T>CmE5&SLIB3}{o}3=YpMHS5fe@11OzajA)goo@(u!5SH;lXw+#fQ!aaGV> zWG+7k#V;cYwf`{IyPeDD(T$za9VWJ~IOtm0vRF=ONeAvcR`Se@RMrM;Lh%!x0*rHg zi^>|$S7?I=<$rj{ON2_`!5B^;=mD*NZn|THhXqY)pK8gk{32?5WWTLnCGJi^8*+Me zvn7J5&Jiq!B@<-!UAB`1Or3zZl3%?H+--mE$oc@KYK8Z7V9sL7s9*gTwcF)h#(2ee zs+0AqYSxq+?8=gC(C!au0vA??BtremOXA3c_k`v;+S(V~vSN`N&-SA_=l1-W-nWN5 ztA!HRFFTdNoP3io`dMVi zI(@3@=qg%RDqY%udLZSQf^HPwgRm4uX*AK!2+KiPQjnYi&n|MjZ_Ttt#iq^fGbM2Y zV%A7y6kY{Nf=Qg|rs(f5M?K@F$sPE*v&+f?|NV2*3vSAbu5GL@%_lDeX)n2B+qz4T zAuMLq?}#!y-g#3ptQ%u)#}tf=nx5O7~2AeH=ZOini_-I$HJLA zrbgww#2~mcdiJ4@hSVj2&l5^h`FR&Hdx9x2Yl+z`M?Gt=&1ALo33S&ZSHmX;nYan< zd*ub!mu9jq{<6J`rTwk=**Eo9tS;?Y2mvhfU)lQe=~Y068C81T{i?3{WJGlbnu8_s z>R|brH21!@hgOdtFKq=D-cZzrsfXGaHK^8IzoB3kR&$!5P<)OtJ$K~t2(Fz9;SOk( z77QKd0|xw8&u`Ud_L0CAviHYh$p9|9KX{7ztjy2CaA(Tv@C zu)+Tgm~Jtd&{Mp=NhbAk2LUO#_{KMWHyU~UR|%;0Krl!al({<=rOW(8N0;NEDG(6< zne?m6BcEan7`QSjxX9h!_!;h=hLBIBN`nm?n%n8fYj|$>DjhY=hhlmaB8B8d!`AIqi^qS8Q zO^H`F15U>$J$8SK0<-T4|D0(+nsuFfP<=!1C%Jn)!GW#={rd4cCiscmVHzsVI zg&_fFgvs$^_JH7}Dgw36hR~v5696UInRZg{-+L50iHK9ZLUxo8(J*NA} zK1`uycs`iw=p&>T0Wgv#s0MM6u6nDG@u8RZjszYK(bfr<_L1nzmC@wZjslr}0hsf)0! z54WM~(=D_T77WPlmc=P;7;rS$-P6Dbj;RDVK@u=pk_xQcg~j}$;S-y8*Mb^0#JIMX zO?wDf=wR!~yLI&gpfe>V{PF*r!5nx=_=Jb}aRjYH<9o2JqEr1fsY`tfRgcY@;h2+k zKX@aw{mTC8jS6rUXWLIL=4eDjD`K=JFrEVvts)3^05oyN>%Y|px!5ZBF=wKWTbZCQ z@D!&X=xHo~#RycJw^8nv;it)*ja+@__LGe0I}1Tt3|0HiSyR@qwudklzT2uJ3fq^> z8#~m9!&2@pR|)`hZWOgZZHD6i`+-{akn!ld#kKf=LW`7!Y-6ALWLv{mg-j6y)kX7= zBGv^ztTv7sV}eC>BN-P|UL0fet6JgVsO}~t(amXmIyYRlh2Z%1_>&-d!}Ytw!}q$E zt${_>)d+$Jk7q5Z5Up78P!C6VHC&P52XpTz_cxJ;rDz*^^P8EbG`1h4vj}a6F#Y{! zA!~D8Gy6hXDuKc73SM+I&q5%El<-u4w8g4O-MtphbEY1ELDzNO>}3QWD|)iW>IYaN zhS>XwZ}Nc+>a$Mdr3+KIme=TCxsqhMcJAsJ7peLq&JS`Ulyu#9i>D#1J+^PaCR)$q z`~T1}>NRGrG%b5w@qu23f8No^C`pJ`{B{2;>uI>S1oqR%x`+VJx49M*UgXLv4jcE) zlMff;0K_oK*FRiRd14yxuU1+kK9B)#z?If$rsOtc9E5plm&KKCzp#C5D_piSF3$y` zA2f-4%o&fAv9o;^3rmG}R736CAql<8rcVBQh_2mO=ADZnaDHQ|(!O&+Y}$ z-ZoU7V`7Q+z%&)E{$nRw(;1d4>%J1teCsdx?m{%;nuhW4HY7VGvx!9C`QqespXfL? zg9nG~W666@&K8j6f+yg!zAR$JiJ9g-KuD}*Z1hx4b}VS}%sOXQRiITL5Y!k2)0Za; zs}x|{lycWn_yP$HUl9RmTOJbbNf7vTZdRA^3VGfsILd#nw{a<&TpKydLV19Y4CEcR zSJv_kFy^r5mLi=ol=h|yC4p$u_9lzbgp5VXvo;|`HeXTiwGFowKap}G4C#CKeOQ zQxarReukMCv_}&j#6)36tdQTl^x@0~aD6{bpCHQUBxCY5dX~%!N`{*~K>@jP3+jKd z;!?u$(LG(2Vz}P0s4WoG8!s#B{19HXaz3^{QFN)NK#R?)A2_z4v!ZXIlQ(PLiWmCn z1Sl0bT@&bcP=!7tL>5TVPzq2&^ZJv3E`|KA>_BBI2r($x10wGrn*h<~p`vopR6sSa zz6c&l&%q+oH~oOfbZcx_DRut#55SW*OhE|xfAC`DHB^0crj45*ghDE7&G=ZPj;=mb z06S|~2sLYnr?V59E>%H z@&Gtd7XQ)>Eqc8|7^x4{=E09s-ryWAxinaKR@uV!Ft2KZD3@%nrf_O;n&XPJctBO) z&4+Wj2Hj$U#!a&{SZie(Zc_znWho(MIS*+jmnzm1|QfC0|x8p=NNbXUQi6M8IO38zPtGe&KPC0#F5 z?j+BfK@Ez?&366kMBpjWH6sJ+1O4&OASG(AeKPR~VzyFEY#6yS9c0ml zCOj{`7V!lefvb;-u?62#5LP%qo}`WjdNx@r zIb$6H7$r-YDC|&jlEy~F`|wDHz*ZFwW8GS|*ISakRP(e-h!aYPsu+xUuSfIcDcXV? z|4XWl_y(f85CW#0mimG8}B2RO`JI4r`)}s@mUN#=J zTjOj>z|HicjbfcH{Mp*8ny}~ui4I#lU!c!h&@1=(Eb}{SC51pvmD{>LVbLhVL+Y9J zjO%d`fe-@zHTLqCs)CRFL|c1+#>Z_fxAmb=Epx>ux#(m0dRRlZqZqTO4S$%x1|vmM z<2Q6E3*ue8By3bDrNfsNmX`mHAM6PVHl%An&ALu1h)k?!m@f7VM2K$u!~LH4UvH3u zfZLN%8T+3wwSZucCIn%m)UW8)sLDlAM8Lw2W}F{QDLmYO^~HN&%aovEK#sl~?5jLf z}plSyd$hh;ndI?S)P`oQptMN_P-tdQjQ8LBK=WEW?e6%x5g+iqV_W#ai-}xdzzJLmCAk>St zU=EuJw`1I^2S;ivmAP+6A1z(-PEf5tdk61s3rn<7oba~AyGUQbg6Dn2g&<$9EuuVG z68}$wf32VaR8abONALQYTzZ8~DaYJXBBa#*$e5Pn7Jrx@pQ&{3G&~M$y7agL%OV?? zzCEJXu%P0J*_4Bo)zGU+A}dl1Q(|@{)O;KvUav!ImZ<>FJ}ihlIsEj^`dA}K>QyEG zrB9N=*0p}P7a?gq0!(!_WIMX#e})zo($rU?LPEs1Ly7!TM&)T#sM&TFVQ{ zb++;+0gl63Q>nuO)1@HU8#i1;Bqta~aKjR1R{=avZTHy{XJJmoK+)!SsW)<%`0_x4nRf{MYe6kWZ1FCoI=56*9h2Agf< z&rh`O40G0jglBB~E~{;KE?G@?j|89`V>)yinv*L~d{McM`YW)*lga1uY2hLU*)=%l zLBxl;SOW6q4^A&zmB)UeRMojvgdxuD@+vB8g|)j^@I{=LEo`-w|%1_`+%J46w{%QB#PnOBG0 z;H>D=(AQ92GWrC7>-N?e>yAV+35?L63B6+Z5y= z8Ob0gNUcYA{P~{nH5G3vl?Lx_o1&lTA`kk4O~-s!{skvxesS^h^*=4rEI`w4KDb zH)_HV8_4tK4#C=GdO*rg&_J0c|Jw7x+dxauJ{duIXiyOM(1rcmADl_o0vC_EivU$e zCh963kn^M-^TYWE@sD1rN5X~}oYn3|8mtibK3n}EMU9WIkyKYiKP=ZX-|%cdkW#rp zH!q=0c4=i-R)xy=?cfAwp*!6C*yRME{XBd?HI2olfm*&RYGAhm1`^a*U+CwPy9e$X zH@iy0PXKk&up6q}sl9%eMGogjXuif8+)z9r$#X!^&apSX;<0A)4jCiSjX@$!9RvkE zY*k%SBJwSF{^ZjYhS?kez06&?;aGC1gi2EyJ>)}e4!H%r`&6V$aZj$($KdA8DepR2 z0@S%Q1&;#_XyVj2jJK0U1PWY}q16ri{g~+SS3-AA6k`W3L(Ie3o(0f=eWWh1WXSHf zQWc80_S%rK)VLRFIwom(?w~3fKE=7jK%;F(_8ro=+3YDNYWR?zl{BeI*5v&ReZLix7#bT)Bi_p;O4DZrWq=WMn}I=6(YIEbM@nB{+w zy4(d7>-PCdu9_!@-1p0_HkciqX`O(Fy$f`UrQ#YtgPzx7_Es%Rx7F}nkQSK!$61S8 z*y<>}aUsf}T_pc>aITcrQ4;?yCd}R;ZPrrx0wkh2Ldev{+%ge#_GFAwwjpSjqXfd z1sO!yOd_C_qp%EyQOvXMSlWv_%_I)Q`_at)N}YQxMlIAIA&{+n8ruSQpV-EXoB3h@ zlRsZa%iPK%t0%4lz|E50R>1 z9!tnVtAnVo#j_m=EYIT-jAl=u_7NirY;)-Z%ywq!r?WzU_N62TU?PSgjAFeg0C*GV z^bX9-MBW`qU;lcLX(1@WTNc+qF~okRjwpwl>xQyqQF(eeh|=ijSz|-)Zi+g;*iCGl z7MgX@#Z!$Sm_kx**Dh>(RN{>vxKnzOZWU||s?hu#8KkP!YI`2bR~b|tmdqclep&4B z-{*v~2DllhC_c=Hs{Ej^Q@;7B@=fjL8(WSuwPj87yVjb5N(xrnCnSK1h~wAzJ#4sM z1cKhbbKw8dL&pOG&>aS^I64znF3OH3r5#7z%0ix05S7)?dn=Y~Jc(dd>4$jak+1hs zDbWc*Gf%@(?4m+e1vK>LB>^SAA2h{99!cCw0J)(Ym=QlM?HWq}(*{iwO6?@2uDlym zVhIvao=6pH9V6MBHJ55hjw26H0Yy%;*K^^6=bf3k-GXU`h&19%|1yK=$L~S@&|Ej( z2*$wqKV^C!_y%4T)MJ?_dC9I@uwNs5J`+)OgDd`agcB@M4eHk?-(Zj!iT~~eCf&il z`iZPE->jC#E7Pxf&hd;N6ktwR*xmZiKcN z#?=dho=TlrBak!ElCW?pWW3VX@t=Gr0fj662^l&n|M9SQB3_vSxp80bF0vO16QieWo%yv@7H>LtJht6kg&W%B4>*vvA9yy_jPV&Y!zvYO@#ULy%s`gpB z;L=O;KYLuHi%Ae5PXnP-Zv&%uG-p4#c0^bO@Ly&xEtpMy{PBSw=mcLpK#C+QN0f54rqm1OvGII%jzhG)P*@!_ro8xKfc*p@aA{ zJ4#1#5WuvI*bjqRfzThKcgpuQ&pIq<40luChdB?X5(+)I* z3}YZMLh@)?o-GF8vBv~<2Fp5a@ooZd^^vE_$66S@c+H4yy;VCfWk(+GpbbH!)RMPb)ia#PE94)$-9;F!&rv5w;*u$d<6HQELp&S5kKK94@J^8|vc;%cH3 zLu;Bk>pxvZSiCR(*EbnMKX=^jWfM7c`%%bV7!cwy_Hj2Dvla=8^Lb$_%;EljgF3Zr z#3ED{-TF3xKvEwn-y$W!gNJByKUO&C#zjT)?h>^0mcN4ZkVvwsPGwYOg}GkF*aoCk z3~^9Gi~$iNENT1tgJQymZia%LlJ9DuM#wx9+jn$%)CW^X{CUF@1W`BnX+2LQ5Qr$3 zdM2KnUK9t#*HxwAQN=SbIC6c*tfyHBN1&q@g-bq_X#`6fbZ#lV%WNM~yy|n!< zqEI?BiQFQ!!>w|zWKk8RsY+YQ$A#op3Qa|Iuz5n!hv+uMSa>z=8e0vCvosV1`ia&J znbngvk+nPQO%{~VeFcTp{X72XdV{J$%_8OWc!>KfJF#~!y)G#3b5#Jg+!n?RZjBkG@#KT z6oCwdcCeDEN2V9L@<5`*<81xlD-Rd8iFOVrlJ%)vXc!pdfJTEkM(kh9k$qnK=d1vf zbcF_5rkO;>(?;i-G-u9^F$_8O2%^dupjiB0X7amM+XnzQcjYcH;hE5849Gs4q?DM)^Kt6 zGDR4QkcvSkzxFo&@ehW9Yd${-BC{>gr-4L#Z4>Qg8C^Tc!O7K)N8;M^b!R_P*rU|s zs9h?xuZ-_-g6p|w1%veuL9x(=KOCTyYhw9f-8m?*3)_3{=_a>{{(R!tZCLc@1Ic zZH>|>*2$rTkKxo8DoT>frGWT6?s&XzyhrG>-B zvM3J>8MpJ=qr&J!5aR;0k+#zHy%_W!xzvzo28KrN$kjsqLGonIi4HXR7`!42*Pc56 zh_%Cg*KX@DiYqpQ4(WyjXR9xFmT>fv-DOo?3|71w5nOZwJE&0-j{?-9-3^2scFdfNUm`DsM21Hyg zEwJpQ;DwpU8-Jh&N2QciJY+yz9^@V;FbBYx)x%%*W6G(<`OSG=^%Twu69GlxKd)*D z`+K|s5#>6v6}78X>kt;?>4hp*Th88{OZhD`fMi_3=JEYdNP}3Z3lM-=>KNyF?xauz z?i4nldCxVwDP&O`9QJ(BtC_LDJp{Y2_Z(NtYt`V7n1H`dP!GGk0#*3Fk_;3Z+%aX@ zx}9R9=IcLUd<9ue?SgQ=?>kD{3P*#EXrlm3la;doU3VRzIvqouIiHt0^!$NPH&J6> zP`?i30&oa5f3ymgwb$pXI$N~`lG$wc@AKJ7)rmG%0^@Pg7U!Gn6p^M${rI(zVwM!# z$dt*TyVi0X7Xb1C28EnsN(%(&Lo_VcdQK z2ixY8ZmlF0y3S4^=(jG?WkM08PI9#Zo903D*M2n>{G1eXhmcwwzzckQv%iv71eYQk za>?mJPCV_(=Qs*3qzX&MM*Sc$i45I=IR>*PW$0wuF&yoq;J^M*$dNgp_VR3p@$8_3 z1dPm~pv$98sQ%@RZFAV`kYs0Got|Lv@HAD74Ip?O5u_mY_!<^VXCkJyB#s$4`NSN~ z%1{i{LrJb$sB%v?FtxnXxV(sM0ow`R0D1)WC(xJtPVVHekpG%z#TIyS@A>fNcD$#g zZ^jj(q|uij8Zn;FlbDC056Or~oI80e{OuYplU%I4gC)ZxEU>$G9J2lLa)F(NJW?o`UU*-<*2NJR6KGnPmFj`gCa`#foAybOKm>n{f$ zARpX?3BAT|j8qcd6*lh3qdYgcIaKpf*b@kk$3QH`$ct;1%<5Grs`C2{)#i8h{FkCz z8yPTnA*{VZz(ya_Gw*{GI{K3%I}j(}VDz0AZ;+=#)2@&d-?(?&waFS6BvW{nR+@mZ z4R*lUTVag+2eEFC-({=t6@1(?Us*T~>`leOn4^?+MYKSF2z=33;$Rr`WddY)x*&+E zdwU6J&(=`T5H5&Bi~;+OwS|u=t!>%f=E6f;{?#X$O(N6U%Nn5;-v>Y1mj_KWwQaOp z6#wv(-~I$0UsP*6Lqc!QbX;kq58k|g7f_#eT0~%Yn+ja0Ta|CRq4aDbR`zW2``PFH zbrFKIezakO@#)M{E8lE|2zuO5VZdH^SoGb2kiGNsSbtRh;`S!TfyMH=C=-IBsG^wu z#FZmXe_!F%oZ{gUimuZIYbT}SCke;ho0>V-1N0iq zVavZ(G;_@>%M^nm$S$&fNeshQD-2(|i(%C>x3qcc!DzqMgy53|(eZHoq7RC-Nwg6{ z0l4tgAv+lp@$crAxuuXb63bW0#dIK0Sd9Rkygcv@-*L|iDT|(b@w=wy2I<4OERlS- zkVW6fyW{WQ*DwsWwHSj`J%C-Ls{H`oL~s3^=cUKN`iy5+_d`>?Q!*KKVVRB55*8YP zVVPzVw7hZexZVM!TEt_)b#Qc~8ET%%Ch{+#UC3Gw}D}0SB z*b60yhe_+Rp@u2T{48xo7E+}{u^pttb%MjU`o#naeD4e1*ixC8o&BX$UT62wt?AD{ z(y>N)wUEU;!hYUSk<@ENh_OsmUVKDe_7h501Xr+|Ib{i^pFWYdm6*iApX$Wby?e=N zaXd;MQkopM-RP_d3PA-*p+nDgJ|mQC3+LLFm_5J>Ey@b#=yy(BNxW*2cyA~Zt1eBl zJ4sso-OSP)hcHYgJ7QQq%e}M#%Wrl}Go!6Ts11B(6i==42!i$olo-aD8se z%H0EKQ`}A%WXwgLb&@v89I`7m6j^0Gm8BmOYVh_ZU6H&sim8gkDcn3S zJ+0k(Th{?o$BiNy8HP_=>anj=DW0vsP-=zItl4X9z;^58N?$Qp6w(jC8U~e5iZ!ERxKWNM*WnqFMWP6dg^8%m9``VxerGWy1ZE{_J;hgn${Ud z>C55aw9~|rY*Hbl^xVkRH9ob3&$U-r#4Lwh&$rToK#LkVja$rHr-rl5FGjD`6otW zW?_b2E&L#c4Q*A&$N3H_P?Y+qn(sd_jhw4Ta__!}iSUnlK%Rk}thY^dB^O$kZMLAD zC_VVVU}ATI6OZH+R)1@b!UEM8r>J7F!@&vv7M{6o6DIT~W88rcnV>xD=mayq@@oR{ zPvoz((=N%vB1(BVRZT?|{o1|Q806spftbWqWH9~blkzl}MFsxFbEUeGj?(!tE0`;0 zKF<&P#@+fLF2bjNTCCHbGZ!j-Ar=$lGfFW(N#Y6Axz1>td82mjFWC(L(5y)3KM*CO zy^{B5iF|v{z8>^cyoqOBLdahziXE>A7igO;o$T6fbTtn}`dGKo-eX)I-w{+jZFDI> zIAYNKmDTW4D~iQ|`ekN%u7_qBk}6+1Wra2tECdU+zMyfCdzSmRI)=$OHeUfxB!>*g zvLv&Ed2sQa zHN5R?lvB{7p!dHVq6-`C;F3GFNlm2N3&I8v0TrGN=vXcQ$-l=zN}cJ8;?4f3Q1nJ6`XsdDyW>!tgqT3ZXkP zE`XX02fsy~)U$1n*6k0f6(cqwlt`)OD`>P!l8KHW5=vBQE5j-B^FDJ_M;ELe(#3U? zevS`LMTtVU?2W&aQOVrT0 z$)>Rt&nA_YwI}bse{5O3=EAwH|5VZ-APJE%G_HRz=_(0kS~QoD4ZtoB{n9Tv7G=;D zHzysf?TtYB&o1k=sATQ}Jc_pv)2~WNdSa7}7CspNJv1h^b^RDcE?$1+qS1>*U!lK> z8a3J{$DsU6X4|XFJpst!`#QYPnMSp`mUi%TuI~Nm^aZmnHm7J#1{xHpJM6riFKCiq z(jZaotqMWjTqtMS!Q(#sZQ8AIWFN32vT~}^r!B?KmZKxokJTob`L^<}H|%5!oZ@=@ z7p{shXmZpw$IzE?X8xK~?P4Bm#L53U3) z>`^K?dfIVL3X)xvE>5H@^V+WThXB7xI%^L4Zfzy;si?mWJ$eL2P!l zafhl45pO4SWQ%Vbt>1RHQj^x<2etOinv}gwP5uCbKfRlPDxC=gF^hv4Q3ekuyGD~{PT_L=?i9yVL9@)ox{cseu8CJDc25nR&sYpR&9*7Ya=@&Q zJQ1{l6!elq+dseG?*l+9-HfK0__D@!3%%S0P@1$b^gl6j-~Hf0u2qO0mXVNuJ(xW7 zrF#?e4IUTq5#OZb)y7jjIL!+Y%t?#Dr<>@qY2xiufiS)Ug;w|yk<}{=Q;JA}n$2S{+N_A%r+dWEoDjO}9Cc8arH)v0h z4;M9YuTF)0vDl`Wc=pvlRTH0%p$2;$y9gzGBsZ$if|yE~s;DGbCzS}XAzjiR(id(n zY0K3>IwOUE+1p`v(lkz z;NZC4#-|yjMuv_nEC*!23$5gL#Fh7m{F!0<_ddVSR}bo4MbeEVSiU$F=`QR!a-is7 z?i<+5HM15CTis>w(aU|}<}gjtix=WD)$Ni-=pDbMoB8HaGPbU;wg!~B099|;SE#kX z)r6mqh4Y-8#ggwl(EfdK74>dwac3}cSx96`dj4qM-1%SDJ9$mCXN^3`6To`uR9kA5 zdfz3#*o=pAssdah`6$+tiN5eun4YxC_L)Ad+s)DATy>zgLYuNYiL}#xQS9Zk1yDYXT->%N*dGxXoI^ zA`!{^y39N8P7-1*tKXp!+C*}+<0;FUfQ9Qcu1m$7x@DxR8O`Stt~isPf3hH5@K~Ro zk5^CKDl>dJ2%kTFO(S+T%a*S22-^Akd`x9HK?KG@U@RPHOmapXCDOJ!LE4x#{$v-6 zbT)neJ|IirdYj5wOQBk6qoFtDh8K}2ipCV~_)`1mL*^tzoM%B8YCBqM51CGWf82x> zJjF=zK4N7=AHDORUJnCMx5(=`=-AO7VLZCgMpe1`hT64hS5d>0v** zD7t^+t@CSh_m+YRqHG{t)u(@2>XFkQfvAuE(?=lwOK(-QxgN2pn&37X3G802)f7?cC z=jASh)8<-?Fin7P>y_87ZbqfDyC(h|M=vgQi0)W0tmNcXC1ne zXKI)6`da1;O!^4tGb+#5GSfIRci>djIC$qN-847q^b zQCRvY{YC-`{E4*v97dKwh9#i@P`zE4@(p(do?hGMP`AE@oz`ZJ% zE($wD97`L@R9ev^w%TZZ?RH-3D_GCdJ%|ya?f~#&SMSCKdUNXB5@(+4=7D{4`F9+Q zk;}DjIE;YUJR6DTkV~-<1G|kk7S9boyFt7`r=;#E!7x3WEO_%V6t8>+gtKU|AwH8> zQd*-Y?5?x{hy>)*akG0>2F3d+>Ig9FmU{urnNQLAZOT3KlfV%cwZ6*gBNGq_k8&%ZN3$m8cp zGeDvUAQ>}OgkuE7<-1FZo^+@wJ{3a(^O5>|h7fFzTC3RpK!U|$#2_Smb3;2iQW2wo zW9oysOorh%)(L*F5o9#!3N88~I6#mBMyH-k!mkv~@)oq{PnrBJy}- zb5^-QS>LbMhL+{uZ}Q*#^?wO2$ae0hNRA;^5)<59qLI>2gMs@6s{+jV>c!KNQaIk? zIAWfo*5yzZ^5&it0ZrA+gkKfne5YSZD)Y$izPu1&GlRcx7Xy<^0w#&17A{Zg5G#(-5?~wm8#R za=J=&$o*z(uxWT`4q%*`-vR&Dj`U@CAe%?%^=_khU9I0AzR$dP z0Kicky{I3m;Apc+c%T>8wslz`q^&NA3v6aQJt}A<4$U(xHaDL_@-565YzK2D8$)hh^AR4*n1r%LL9U~+f zLFP3sgm^Su3>n-#60>r&Mzbg?((#Ibu~&S0@?~TpdU;4@S+3i5YG)M_rx9k5dk%RR zmD74qh)i^9?=hM?$-I=8s$eAp4>LH|fhdeQ$DJyvjd;)4z)1%{M(7=})OE@v0e8Fd zm*1mVM;^X?$f3Lh0H$yC4-4|22P&NV+zq(yKxnbGcIA?eU)f3c@!-em_*o06icrF@ zeN`5^ww`%GlHgOuNGuaeHV51SIM|wug%R_K@wc&Uz#@Jenq`H2Re_xRF5EMBu1}Kj z?O>ZvrQpEi;uYF+aX1dn(Ro!H@+a-o4EbHgFqmL@h4{Bv-}d2s%&45i5Fy3TufWbR z^CdL@s*w6A^0|@hWq5pjVNU5J?8}itfMS{sy8awKc6?^#P^d4=J%|oUMKd+CDluRW zL9>Tmw-re3%9H1>{6hysx|r&EFekC7pVz$y4Ot93yd#=KuA43Ap5RcQ3J$JS&;P!B z1;kfVnmmtBSW%remxp!@=~Tad&TorjKlEr?>*GT8ywBwl19ERFrpLSXTIFX`F4*Dt zs}@jax28;TnFJ>j{UF_`N$9~+?CAs|UlStg()h*kC2h6M3h`KWCx$1-_uUnhu#-E{ zUT#%p>NGjA6b0lF8OdAzU?@8EdhChV`=|-Gi2`AbmY3-T68}?2U88;Vo1&0XefzKh zJ13bes>?qnx0)$`F(U+5D##bwyi?K~IBbrREF!`OCV%OG8tR!4qA-iP{~`kWVdHF6>+>@D#&yf8B!7ERf+!+ zG0!XZ_r1GljV&vl_7X<7*(osdY;JX8C{Ol+PDW_I6Q^60L~~PEdr-}Z74$8AYB!E? zUZ8A1m{BWY1Ru|8^3y!AXks91^|b>}o=1Dn{(YPJ=`gB4J9r8GJZYzB+J&YzmC45T zO__W()IW1oj_o1&2JuFY%p_f+X7Tq^l1Jl$HiG93Fdh8b*T3$ctsMS_c)}=Xc@@$m ztMm=tEyy2Ni3UpszPMh8jl|;I)ZG&=sD{F$^RN&IO2);)DQW9jBD)5phv2@__mK?ThGLdIAsqK)Wgsx_C!ICQyeBJoHvr)U!Mnzbg( zguhKXPF|ZUD4?8ZYNB!CY4f+Zjn~oksHASbgs;f4-%cIrj2OvzKUoDz{y&d;3b~l2#@6bBrcPWN>Z-GEuNwU$)LwUW1 zcU?!R@}v=Lwed3Z=lAMxYmQ}qYKR3xU1;L#PvQ&$!^nZcA{^y9v$g3;Bt=$ue`?eW z;M0IHqEgkr#FRs(?~05JmNBaBL~hNwS3+ zqirkhGC9>$MM@`a+g^^V+(wx1Ah^rbC^4Rs;=Bz61_dgJnVJ zCpLB`8Ct)NB{apaIt*d)M0!AuMdk(~AKb-paIFurS-ib_9i`5lGPeCRy9^|HQNErs zlEAsfHS5?5g`g>6nersJ^+zskn9f3r$l^vx3CQe@=IZtPFTD;biSdx>*_lhYy;l>qe<#=|2`;}TDZgsU^A`f=q) z6+JCPu?Y1!dWm*OQD>o>QRVqvt*{pitXCqd&#tbS0v%&(>zFV;XDMarwxL*#h0OSn)Lm(zRO(gwg^WxLl1>kqP2Io zOQ?Pt{x!(ZJP&>FH}?GESB;Y~6!VRNn<)NbEs|Jfdp(&w!nJWnotA$zEokzjN6GnK z&Qb4Dsc!ergz?U`A3>tjzyzBjFnt8*-Be)stcLYvHuGPV+eiJ?V(=FfHad3jv^CP1Aj@r8LS%0^4Ll+RK}knVU?L@GNnpU?NQqks2BH*T zT?xYl&f)2_iCrRNji=R-#~=M0shTsOo2-kPx$XrZxW z3@)#*2k9I{On)9)B}?!)ljvRuH=tTmXMPZ&j?ed&xSk|rdixj3mTahIVZ7IyRCSx7l?5U;g=D`K!@}uj%Y>CHc?DRLfnuMIn`~6S=;kc8* z+{Jtq4%_Z1v<)excHM%RR_v-mX?he+b`B&e(*l1(-Z-75cj8&GIUe5Mf}rYS6in*L z$BXb{4HKz>5%@JN4G!hRQ(3FZ%9&GENQ0W&j~Ho{{+7c?qyc|PPpyN()zsve^O)du zE_seEL4z&6M^Epgd~X>KB8Qe1+C$T;bQGd{bL5vY8X8p&D@z-`A|aGq|um+l>g z+lyl^ka|X}Ly`KF;943nSZdRESQQ652 zf%5;p&@lMbs>GmG{g9*VIOeVCO2bfdsAbC$(#w6@)^-`JGF1({Em)Xgx+VLf7@=3S zb$jhVOR9afck>=YbXqEA69x%dFcIP|sJ;D^2uRitb|QBss}8 zNuZ5=oTXy`ClTN)8x3eGND}jpN3jA7X`@b+ns&-FYau`7RIh) z4c7i#F{q8L3Z_`l+l=QR{OYqs9wjEQE65LN9)X9yiKEkF?o2}M2Zsoh2M;GZ_^~q7 zoNPpJDR;)F(75IQ%yr@XLnx~BF*c)rg4D$K!4cE?o2qUg8}LSN%=2FX_fAG&1ipnK zP^ZpFG&?DSPzE}FMX})=Kv14b_>^{XJ`z~b)rbeJiyVSU=Fkg;00~$LJb4!Farr9f zq2{P~jG_W#H4U`$;SRgLOdmDgc#nn{LbTpF0gih(E4BtA_f06T}$BKn0%!9^UEk91VgNAQp~nk5X0%sEMD|y31majE)SoJz=ix6IMVZbC*smyEm8?X#D7pj;_IO6o;=X(@Mf4aH5KPt{U zE)(wAF#ma-BpQwQz~eGn*XV}M0BKPwzNiltqdhq0%=A`ALu1?tvAg|rz%ciB5x1Iq z6POPmD~@^jAr-uF4C5m?1Ox1xx3Bj>-SP$_uq59vhayp9Yl+8m(2Y%_c zJ-Zu{jlzM;gORHyw^*PCysF_T8Z12(ojAi=ikgncV%zc9tOe11upAGq4zx19Pa^bw z8*-WmsoSmYo1D9Wa`yHW=bmlapfsYV(p5cg8`$zq(g-6S`R}Jt4U@|5yI7jM`WHt$ zs+_!H5_8whL$#$N&|--4tHkdGM?l4o zvQc<)^7(~~`P>Y*RUArY3OOFCG?E?IO~(@d**Wl|9ElXj;gjN9Bd4vWy>(rF0RhfyJ>sqiSDP27la@RgDR48W(4#p?}zMFc_x z)kob(L@Zk}GLd47w;6~bhneCn52unFSK?-tH141XLVwE0+=1&KU2Q@duD&QZq;zpK z&-i}T?~H;PG)AK$W#cCk$JvkwMBzm6hSePHPHCbAwhe10S8PhsjXd@euG-~#vL0RZ zLP3-%6yh{{;jdSo$mvmuFRS*5M)5$$xLDOA)8d5>hYT%`R^~{zcw&u|?Z?J^AnSNr zf+#YvI3ZzS5J$iNFgf<&K&*T}33DHiuxgo}kUvMTJ9249Rm-2i)_*G2dr*yR!kU*# ztTb|+-gDj%>Mlb|rOo`F5dVuS`VQt)91W=@JzF_uFxAr6(e^<1z2393xjH2`!fB_$ zN0UfD*its_wiVv!rkBQ-`1;GXyBoQsc1*4UkSQ^@7Kj)DdKx!ML0KmLh~r*)DKP_e zK*c9Befyyc?){j3;}JGtU7;Xz>_6yg6!@&E{B~<(N6vR#T^Te?wvBKYNb&69AR&V8YFHS0%+0G#{4w0}K9Z(X7prBd<0-#P<0NKv>H6M?=JL(`}fwIpp_d6gc( z;v9wvsXIl4eJI2ZDv@RSd(kHx=?vlsv&h^JFj>(SyuO4Z8Ays4FJ%Ro(D9MttDQg4 z@rmAG&KgRru)8zaJRCOu$e^`Mp*(8Y&m!}JG+kPAArCOO5XPC(6-Eqxq^Z}0Dto`nHrs4z3(#e%CGK*iw#WNjdJ@kksLz{e z)|SSd z-0mE65#NM$+RW#}TKw2)+|+ILeU;}+qmB0~tF8*jFs~;`4pIg341-Wkr_G}1Rl6sK zu}D;wkGqXo0M4dfX+$(U!*qSCmgbNeZ(o`IEvCi*=M-jP3Y9E(ra|+yick@j$YiL% zpeyc>bT;WAWkpAQ_PjvXjEnK(S$`yZ8m+x9^qq2jkGl3qSlEM)hY8z|VvB>FkK9{j z_izTZB(8jX)|nfOM!z%sdMRZF4Wbg(vc+n5OoPr^Z?lKu3xeJ_O2#5;n;LNd^EY?k zp4p{8i{)8gDY!OGd&NPpKB&Nw?u|_>VB* z3j&IWa97-o4QNH%w}>unyhuOLZm4Udaegqmt0^8uvr#Wg7X^nG`y4 zaFw=nf_!`bR}mp z^8-O#bEO#iKsA5#>ES@hZeIc--rBh!)j6wjFLx@zw$I@{R0#GnsdX|`Ql87KJ*9e@ z(2|CGzpY>g6i^UY) zH$YJtreUQ7G}@-zw%Zn@1aQ*onh1#9&MWXANcMrry(hf?zW#aSNUp@P3;fms@p_E$e^dbTM1CeG4J#xpyvV zI;2?*jMT-;@K{(q{Opz^^AGF^IRbRMQi`nM8}@}AGwJ0MPG3Mb4V6z3Zg~R#Rc-mO zW!maIc0T1r%MtUAiZGDxYy;weaU7t|>^eYO4&ZstUz?Azgm=7{C4p4;jk&|3tRmA= z!=o~Qjf4V4lV3XVm$YJMsrz`h78#RtKJ*AWbY8PmPb;bmqg%fTBX5?M1tcdS6x013 zsp@TI1x0cSZ%-iG^9b<6Eg5gmnw_{|%kn@z;S@$$qOr#Xtw?7bn5Q+GZ*vvFDkwp1 zG#XBT3x=gx6d#+AAbc$}9DpU;U@$hC?C)bCmKim*NcIKp715~lUkPK(JPhRe{#^CU zJ}-YJpF2NAF4w?*708FgZL!vVf(m@Gwx?NQar_ax5?@qZltT_*kg=o%Cf)(flhaz% z7<)#~k0if*%r8@%u%aRPphJH5!w{)}ueQcGshk6 zVuPyT4v?ULQ4v&S+n3i`9>V0wv+0#B0^8W+j1Q|KOkubrIsv2X_J)X2#Z=m6OAjvk?SoyJ1Ve}4z$JJx1Mj6!^9 z7oSEZC5t3DH^a%+*b|irNpmjW^Iu({a0{Xs^z&H*06na z9AM2}-sLbv&a1J6V^c%P8zuI{5Nyz~N=J`Cy;cCFP3PvnBG)1E6g|Oj%TPb==d*SG2d!|CQPs^t- zS=5*RFwsxK0B;|0?g)%4it%bkRCZVlSL#=`ci<{dn)^D(rv(+D=^#hrjkE|Vbv!CY zLnU0K!YU7u@Hdii-TC3<;cNR0`Cy&`sA5il(fh_hsUesEvjbbg(L+U<=qzv|&jOiu zWcY*^a(gLxhTQg6USTX1g%Zmxmzkehd&QT*G@`JU^B3G(A+8CEL6={h7XuLel z-7y3Uazs@1w4O3@{7;wm?X@a|lQHcgEmm?OgLvwm1Lzg!mck_QEi5Ed*5-XYxp0U2 zwds??JSBfviG{Md#S$6yvS7Cp_AW#%-Fj>OIK`&kuAV5ElUQdtT{H@OJ|8AP zcrH!Pg|ike_)XJ_Qwpij)c<&XU)^AjB{-jrW&wz@5NAlAB2cvKjVn%lU&rYl%aX%N z;{E9ox;es6PxEQAHnYpHosLwPVzz%g^i^v!q9^}ipz=adDSjmA! zJmpw8_s-|mo7w*%M845o!#iUgNCXN{8&zt8^%39#UhGB+6g12DzA4{o>71I)LeuBu z1CW0HzO@IY*>wYbo+&m260q_o&_dQp;zP|v;_Nq;j{Y?h4wqMYcvBVx`ZN=2@ z(2#0?ToKE2)iAYCbX|C-KD`609(Q?Fn7&4R!5L8sj~S9>TUwctnt49Z@#Go2XNifb z@Erb}ji(zY$8^$g6eHrHQHkI%)CfZ2g3z+rc9Y(j#H zMTn>`(cTiQva1h-4@$12NTy=2qq6oC&(ZGyk zKZlZ=+c0X%=h_g+vJk9lTbHs#n=O)N_BHW#nOo0%+WncdV(#c&=shdNkz0Bi(={Wddv!r?PH3= z!84j(dwPWA2BC;lZ!k7{**cNjE`@36N5HvD%>*g+?d&{2u zEA5O(b$a6xoga?Rg}0UA9^u?Tl?ME2N4X^ui7e!NwnE(E#YO!=`@#wf{*jLZ zM@!=SI-T5uUJO#-`+fA7iyf*pfVbk83yFjsYeYxd)VN&Nq|W!WNp-Z)+-#CS#TG#_ zCHwr2amD-0;FZ0ZZYiWf%Qtx6Imc!nZF7EHG0lQojN&MDoNl^iq+g}e#BoswTp%pk z&`AFq_`t=mUFI%Bfi(cyaGNt;v1Jp8@H<>{zt_nbp4L<26S8q@Z*Eju;j0_%v!UCn zba{}B>GZOe2o=%K=nIWvpiB%hsL>8m+EM*&3wc;E1lAqrc2pagOlIJ~nq1UHQX_wR zEMf3^5=k_rhW8G~z&|;kx%S8yrJu5J9#w(`CN!@6O{|zdtD}Hd=t$%#Qv%tic6|Si z7@|Dhho>?8;yqEmKZZ93zy>4aD%iKKfEIgm((#OlPG;kan97*sJ-*$-MiC=enh3dL z@nN81f3hwtzy+!<4dJscG~0hE-Pry-qPg9`uaN{Y0x;_p0C7o~U5BZtg)|PfzyWpx zM^&>9Pgc47l%*2dLAmVRMShh5WsV87gPXV*OLcaaT!p<+0;Q~6-GS*Ho$tvpZu z!k$k4=d5OOg&s|x{3bI>=T_Fl{J@HF{E3gC=@1C{fQVan$0n0Tn~4a|&bPQVt|Gwg z()iV!S!p?-@(5v8SZ-0wIxXM-U-m$Ik??%-M~`YOE-)=#SyU%_*v;xwnFM~fO{J@4 zI#!Y!U3;I9`sDOoIZ-a>w?ME)wLUXcCy!Stc2I3XKw41XQ3NjG^y`1>tohygTbgA= zxpibF0T<+N4LrNPd?lx7t`c>1HyJ3kcpv@vj z2?orM>wZL>S}O%C7e{298+9a~@r(5L)5h^mRb2=NtDETmy4sfY@PvaLfDqgUoiE{T z(CpN4>#n9BT?hi`Yxgmu@Eya8!^HB>YbdYV)>hi&3eXZ{%3zxE$p7tMF-D?U`=a() zSm7jafeTVGrnz8e3UpJy&WbqxC|(Nb!r1+MdV}T0=xl zr{K;Xt`CdXl)&bVLV73UPC#fP+59v%WGhRwvNNE}p%R6esPsV$aItT*i;X$J1A`MO z7@n|ur25jK$zAu6~0HV_M@_EkZ5-XN9H`L_y>~0)33{xMV#c*EJ5jlBMaZGGY zgYQvvF6)3%p+5;WO`0NnOPD*YgG?UhV*)~{&^sTnWk7_5fpxQLy`ir~0KTRq)Hd_Ecyfri=f}QsY$s#E1*Jr! zCc1)18!LAd8Veyi@qXWMS*PJ=B5IaneWE&qac}V&`g@nVDSV3KqAG`j+R^Z5CRCzM zqM+2}%tN$7b5<&3v>=DPJ6g2U?w)Z&+JF8T=Q!w)4qTS`DDCisuTEht6(pABU-K2*pI{{rZ57FWqQR9G&St~xV*EUIe3AiYtn;LZzC zCpHN-?sAUd@{;i)9;9r6fakQ)YU351H<2u8HJv|+RleH#x_(w!`9k(Owmu5XfV1Ho zY4Zx;aNCR%8%IpDMqf62x%W5GP)GZ-mGZv#maGQd?PDeofq4>;m45=0Ec~y*;~N@+ zTM|WSXH}q}B8oLMi6{Y0ey)zZXy>t}S<)187c&Q{ir(e~9)}nMtA0I~5UDjYT2xUBaknGRiOn@+lT|omPjB1te4&oI|Ic_Lkx3^+6 z6KIpX#H#*f0qTlZeK`lJjNw3i`fhsE*RxElshmBN4mvm!BL}7ZSJ9}JQ;Zj(``h7~ z6ET1oW4BKONeC(%dFQ!8fl%%cc!aautV`+twV+W~U3PQ!;|fq4?;=`8S0{uiHXV*M6B6=PH}1FsPV_WX(sPSEgb_@d9(rEur))XYBEid zpM5WNne-Q?qm2Ky$LWd|kXPKVe+7iW%h(H}s56?5MHoJqK4A_fvFq^jRNE>Oi&h(d zero$Fb(L~fL5ze#_pAr#{0=J9(P*39i-#N8m1@>L5*!(M=|>q^QLSc^KXi8Y1^L2hPDA|PE7$wrzgebV;Z zA*~Vu?@{Gk2R^dRZsQjqjp83(&h&!S#7Hw4{RA}0K)JKY6NwE#M{36558hL3MQ_r4 zqTNtqpB~XzoO!{RgcUPz765y@{F~^mZID%-ZFJLIoqYMMUb<7CAkNdv7&*cd6{PR6 z-X9rghutCdjq5)Yzj4kqPG`V(om}OLHD*Mtz9W_cHelU}D6@c^?m__}JgS{?v8}VA zj#I(H4ySJ}x7?qM0Xzo{Ry2<;#m0LgNGVllD z?eX8PrRm6lX!7#QJlrbQs#0R~kg~QAok)Gf+|ivr24Nl0nN{v$(GsvTH9leJfSk`w z{=|Qu<6ILrXa_y~*8yhPL+x1QkwD&%pn9ki4{tz#eHaXg_Q+qTVK>c{yEDfko_`_W z+N#PzK{XZaYn<{WZO~q|UC$Hh!Bwlcz#7Vbjgfv0fqML)D$9laNcJR(Rz*-qRc656J=4g^(Of^}hz>CrByy6kA)o^Mw^3}|NYTSzY0qnHrLZITKDJT}{vy0YDX za}d7|y(KXyUKesZa(*cwfuiD(-RLc*gx3P|p_(TMfxR)sAh)8!;H_w2_?s54cOLV$ zQ<6$=QLQikGGg_VgwvJJi((0V>ppL}4dy3xAQ5vt${bt(8i-kDoj9eZhFn4a$-HA? z>8-n!U25aRjwROBMY2%C|FJy+S7A!e(}gaJBEZ3|1y#5f$D3_qs^IC!K%8fOq!nyK zn;8I~dO#S=Iw7~*X7RqEUhC3v07HyqQ>lJ?#ug2BtD4Qav6)}PK4F!?me)A}$W%QL z1Thtsg;iWrwWEvxDhvGo@0H!4HGhivL~+)9p7rL*#75hvHjPu2kPjX$EwW-6nIpQq z=!CtRO&B!;ZwM-oafKokY(&sfZVliVN#VIrZ*R^6Mi+&V!No+^x@6UaC4?^I^)h?Y zJALD#@i91k!ts)tE3VQV=nWl@N@`Y_C&hs#b+eQo$8sp_j3CqsPX1)x2W^762`@}d zdb-*6E0)*d&KRKv6tod36o>Z$gF9QkUz+vhvZ%REf1~JAS>Q=u7GMjeIYV$^zw$b` z0<}AqqFt5=D_ucq1-Gfz-(dD#&87^>J;o)8NjCNr#Biainq_;-m9?cRGG~D?kW$nh ztOuOV97qKF=il#G$JTPePvC1t;5%cZlEK)rtz95&W5Uno&j|rMyvxTf<70p<|PX!;t4KX$lOkT2qj zLZW+hfK$ukC(kxOP=wDWBBsheE*Qnt6wexbG`29C*V$die2YV{Jzm1_%cRp-GKA_N z#k#WNItN(Msn|RE#jqM_1wc5Fgi58AZCO;h%nkBbI0bPgP^7qvMnSdMD*J!G`acy$ z$W&W3L&~q=B2JIiOlp@XKAG(%f9*R+Uz+}AaRtPJ0hsPp!-B4yH0qFsqn(VkpJS*j zm*sxF4yur(LXAo-gm;la_q53$V0jY9KZ`hu&-lG9=aG9>5)sF3W!z zB7(Mk>6wM!wTzQT(+=h0+;HZ_K+Na4zQBl|IV#v13+7BkBJd4vgBaE9CuQ)1oVC_% z?0K#Aw5J9I8K)8YhioimmtK!gIHn*umbwZ136N-!UTOB=#Rj*(mFoBiRtDTcwe1Dp zSQ`ky1g_NqvGG3+!k8HEstY5%U>$4xCr=Y8t!HcQ96E-ogor+eXh%Zn6YL*6Ag*bM zq*O1G%kk4WA%b*w5plD437n*{VYOORJbZH)w=q}eUM?s!_P0nvJCm9MJF-C|8k#pN zW+Rpxm63uz)hu@M;0rvEQ0Is6!lNt^Yj zOIshx&R(FwmITB4)3T1Y-Z^)bI1utyIQI)A?lNE(+>A^c4&Oh%x1~De{rgf@RUr<6 ztOY2b7wjmI1XS-_g9)Olw1y#*2uAiGa=kP!Z^ZN;NCJ-4wt)!{2aRQ)vd|(KmGWZkeZifwXN~@*i z4#>|O*zK*T;3bm%q3`v0F>W&Xhc9$d#;%6 zSLd(C*8v6D;Y%AwVK1X#3iDJmVenv|#Tyj6=F3?Pr7ue{*p~FO9OrW(dP=Q|W%xKp zXa;}nww2_-jlqP{G09(FjpO$L3}9Hd4?k_&(AuB>4jKGi+&-1cPkWpGEyZU3{EZ+^ z*l;6F)u)1)Bbf9T{&Wgve*4zDr3qX?2blo4pKlyUH+H$t#Cm0ncq(Hc6`=K^vb>PY0R|&T$jR|%HKN;)gNtM{h!OcD zbRe|0T^NdJ1KkE&dv4pJULZsdrk{eXlUVg_8D<*6+N)JbF84W}hVCK6$wbAhV~CPT zf?WxB9gnolB5VUxnwyZT8ij~?s@VlRGd)t4#6@leKQf)@=*<(xy29uV%xfYo;5%`^ z2Anq|i?9HgvILI+dxCW~LPoZXc)Gn}a$LFAnt+}Gz3vxB5$?}QGCiYe&7wJW@G&S$8AV;j zZdohv=rwrDYAHwafC>pT6?Nm9Vp@L|a0DBB!KUw#mAU^_N$ed7U`Bs_FM8uz4@e|X zCd`ljxZewD0(Lad5cU(>`Zi9)T(&RzB*&}oy(}LOm2aY#5S|{l$(RC~u>V7=K51M_ z&LEwGJ#xA5odiGt=b-&y1qILjE1S7zeNGt=$I=;UtUely( zJ7>yt;_(3a#EFLTL^UP=$f%J1O`o0QhsqOjMc^l0d$YP?;geHe5zEkGho={weTF$Y zccgOQTqcLlQtopy=J^R|s0RB0<`3zqIUynhw2|B|p1F`<1FYol-cNn&B?zL4?qS$Y zHIQ!Od0OV^Ap*jFu&9CdT!9wa+?gLFi&1KQ$N?8(r=H%!Fk9S`GNm@l19<|{WlBaIr$c6G>U>zh^&C(P_iH%nYI1D&hzk`*JRuZISPPew(}|7uE<@Z{%w$W)v_P zxr0$PKqCk_g2PmG?>&`ZzR|$*1iC#(hxOzfF#>L?Ks%0M>TpkVux|?AU32QNr6@0lz4YN}Qvc zG^#FEUjVk2+VmwUs4RsPabzR4c*33V_NHw)Nej? z+uTnaqdMxZP2{*&N}WCn>nBR$_yw^-Kdfq@&uYqSVfytwoh+#~enOI?XMk!mBmc>0 zjL^e?PgujP&|Lf?26p%9z3y=MW;u&eB$bhx#IMFXuLN%{jkg9|^Fm4I{aBAYFs7Y9 zKb>wEHY!2k&u3X~c<=KqzFgQ2jev`ykrvMf6`BI)0I!k~4=}z1MSvm4)P<{?^+wML z#^a7*UF-vD5J_I_BvvReNw^_YD&x{*;{ys$OFu+bBK3e;G^>JD4R-`y$o~p7CUF7u z&%MnT{8E4S^Lc7T4Eo?Qt?9h$v$sa!QAC9VLHBsmdC&-qOU#>R?H0|kdzkyJEO?T$ z8C;e7T(8BZvve{97Zjj$wq2rh9EW(q+)YS73eMpe{69kCtoeQ6AlWV4)u_H2OgrUA z@}_Xvd`c@J-uCkmSUDMjSTgDm91d+|Kk6pAzI8m04>Ghr5xq;Ajc-M2%`m69ELG!< zWOj*A*Sj9Mo5{wZ0W*DGFx(siJi?GgD32x0pF~2%2$FUeiEb z(GaJ^mL2o%F|8O;i($H&JQ z-jc;1s#evFm9A|Dt28chcC|BfEa#QI0GDd62T-U~>GXH~$um`*YcgE}Z}#?J($S;> zd1eTWNzW-=#|J+LgB#=l#)XElC8Q$`AhT($Ucop-bT@PEj}$L3NNHKIgknX^mNYs0 zicR_9%U-(!!N*^eSE4XodS&r^s3d}k2;i)7QPj7>(wf{&{qjruatLaI( zN<|ePjW;qPWjcJ~^&9*7<*wj>j6kJYg5l2E=}XfDR(`7|_vyiQ_*1@|*HKClhfPu; z6;NSDzI52XJCw6jqL(S`!`3*Y$tEVh9ZN4gBR#`P`Oc+OQ(V9rCCz5CMm5|m5@N9Fbu`TcqUeIcQZ~4!zt44RqeH%E8Y8l+Cs2%N z70(V$NRN}#C_o4nhM7-y?4GWw`ZqgL4Cmu`ru}WE z3)y#F#TZRA8ZrN$kTWF^oemfqdmh+DyHp*5{QNe2Q76yV=85!^^U#6KBvfWu)he@i zH3j}|zxX32Cgr()&5*MtmlKPFjW{1!`G?xkh69?;38wl6NjiEM$!&+PgNwmG%I`u> z7aNHHJX=ACi6_e+8i(SvVhu*9ir6{c-(ZE8xh)UVR;luF4J8o_h#c1K5<^+}8R;^Q zq>fZ;PineCn!gI>0k-Fd#3=9p0DU}C*p@u;@|#J3CS>!g)X>E4ByDNCInmDGVL=2% zGsWr2`m^EyymtDizp4j@uk4t2x&zg4&6&3a2RR_=AsHGrAR+54WO!t~cQ>-Oc*H56 z!Uj@X7;XK4<6T{?GQP^?)}`K@6`*W&f^^)kW)e;QU? zTI2{Qy_kdgYp_#oyEBeJN>hNtt`VRPBPO6gA7&tHQ$#dT2GWNkPPSd{CsoYv@kFLw(R}X zT+Hx_b{%GE>#kFRy4AXsq7)wPCTTRCuu+rgvMe*VPM|2>6*j6-egu1ZbW#&d_Rw$8 zUs)9x@0pRB{d~%{iDq;~lT|1$JfW)1dq>24xX4N$M!TaDV!QInfxT7* zP)4AQ4-9dVjo?m$?f#S-x+%;aOa3v8t{GxBgAVI}-bb)-ruUs|Hg7jt{l+?~x&A$F zM4Zt}$2cLYkX7bag5(G`?2R!$Ma2q+pBTwoMiab^YYI$^<8$Q8-hd>Sa?!PTamn@w z8bwDb--P9#Mbx9BV!y2^lE7F%&so!XYBgKiEas6~Qc->kiYJS#UnN+)X7&#mIQGos z5{;UB`TS$n5>SDS8C}FUUR;oqJsE+z%8|3Marm5TRU|kMmu&4qJB;ZLKe$XM#5^FJ z9UsmwmV3i@7&|G~S_AEU%Dx{Bj`cx+W}g?~v2`{V+^7Fft4^xZcmrX`uOKfC8= zy01B?tmj1QM5jGVCuQt;{|!sx&#ZmWKw-QKkE+k6A`x4X4d%a(Gj}7!`Gp7@R(5ZD zK*PeB34oLeEQ^yE75oH<8-%x}U~OH(H|%p4ot2qU4}Ps=jt<&4*I!!JaaXDXnZs+> zU<-I=ZVF*7QF`kE-=j{Pqw_c-x6iw|=TF0f4NK7@Pm?Pw8XLh0}oc6s1Cn0uah ziZ1%d%0Sqo9h!2%$V=0kYc4-xhZ$rqf0yT-3V0eYP_N=MV^Ll0IneCC@m<3kuY?-V zbza`?v?Bj!7)z@FS{nzagUdqjL8AVit5HT2vlXP{_TelHN%1ugOlxbU`4}!4AP6SB z-))`=dJ!20zWe_&xG0_m7#ZDAx_+v@*rC^3fK6i&?xNZ&i%{DPw+Vp{SbrPrME+<& z)FZ3jG`9F69#$daBu`o9-Dg;$WC(H}1~*U0%7i3YwrRqV)s8;z`t_(x$;XU29a#pU zGE(H$V7&!rz6Zp4e4XgNW6Ob|{!*<^Ud8861~rDse2`m2dh#uIvTX}(ULC*)eX|yT zrEo#fi-|)c(k+p*-?M-KERFumW~R?8)9+tuRCUc8zq^dW<6#K_A6GGpEcvz_n2{L-NIAd%`$n z2d43%Mw09I92Wga9L@Ymi11F$S!krlGE9HX#wMJv;-_twOIu6Uo4bRY>TgvBZnV zb@1eCS?lM8UGLS&!LgSczsaf1I(~Kw#%>f~)MDWctJutAe?iNK$D>grY0g3ZqmV3O ztN^{;b1rDusMlYuu=@$acA5#$xPKRihfrhY9vxc#^3T2jV~p1J0wCF`!S?#buc_+V zYL=>>+pQ>r%JwCU4ME`Tdv4)0-lD@Y_){buyXOU8gkuSCWw>jSX1oum<=r6s+;KZo zi2+8vk4>H#sV0g4e5QqgRCx_@6D3)(ZRGZOG57bf9}?Vj|lBf1$Sb zcHwC*OjVgH8#t(tnJE_ilX8y=#FAO-+(LXnB=_@4C#_5Xh~!(I#h!`(+)L!d|fZS?rtvza!3hi z@~LM@nm*7>t)p3+677^qF=yf}@SrQS;ckaXHd{QxjmEgL*6t86Wn?IQI@?vb_GOb! zYbxB-%`d*3g8_PPXB?o93?zX~6Uh6j>i^ESDzjr-n-<CZWkDFD z&|%zcv_ciojV_ev=_lt?Ck7!MFLr%6h~I#8!jHRtIM(wq^vUqvxONgTk*m1l_QqQm z%_#3wbur>^<^pUAXY?K)qC?V0vguYXlhah7p1Z75;I^7}{{wNVyV@ z&uKFJn&E#ET`+$bvtpW{w*sks1W7&K9J@(95h@+XKB<^<+NlYTLm8Nr!v@>+?$}46 z6DI?JF5fOr@w4ZrU6|E~t>d3;6u8eahDLHHkh8>gPcy&VIkKIndyA`&=*gnfkAl;&ydOBZ+yBOUpDi&EN3I$tYhhckbBlkg*wnTnybF8~G8I1VYUc zAae{3q41V&^gDV8j_b=uFe|MxsZ2N8t?2?qlV!}O%{LVP<2N>!J}?mpxiRc7Q($DS zr^vPlY`FHQH&QRqd;xDg3-YpDVPnX})uLGaK*@&PLzZ)wpa#8zNV+C3Zb!>X2@ z?J`~eAr~SOzN1nuYj1JpX#VWdqTv9uSJYCN&mVinlxdpi%nR$5n#?CsM8Nn@tIpvE z%lcUG{*R1s3PL?hF|M+PReUh#>3%H0eZ-fnD7|#E5_-u}b3i~MIlc98Gxr|&S3LJj z=YwoPgY@pNNMk!j9y~02AI?AXQ3~QtA@#I3rHw4MLjawK9l`z%3R+I{&o0x1a$_57 zX54o5w&a%b-0hLOWG##jZ>R<(TZ?8XdClX2t~nS)d>MMh0!_G)z>~~>LS@&Vy+PEP zTG0KM#)q7uV3I!@V5j{TRGzrebD)d;_FOCqaTJ7i74{cvuYzb(YO z-%vVH@I}m=dHf-KihjrcQdEeYD2NZP!W+9wKn#?I%R7^E6)-ozf+T7h26nU*xsRtS zw&j_DUOmL^{bT@n3FB*#D+fw7%zdp(9jKFR?iQno!v~$m9K-nS()c&#ns6dw8Z2ki zByQwEqC~p?aLAHONrBR2j%B5JguOZCh=)`$>Jaeyy zB`%=g>7s`O9O5_9X*3|&4DJTB$N(1%RWfXKU5%Brn!Xf1TP@K`6~27{VSFh{MMZ0t z>=VX4Q%{;ye7lJQ+(n3{KDRajn@3(TG2kSr5vc#ZHA{7eN{4^3{Z4;$HkTy!%eH#I zbXFy7$lA$}0Gzj;1QKzELknWhVA``esdzRl1fRTm;#O8aNRCRq))+ES@~EZiL{8!j zyFy|VoOz5-XS0f^E6VQG81v4)a}BuZ{M^kwh`CM2*Wke|L7%-nq=5a zaDCvf5m&=9NnFAqEn%Y=-O%Ex}4r(6?_*I}Wm*%sK(zi}nyeKRr<}mjHHa{Oj zR%L2o7#mFT`=w{slAH+Dm=1Ga%4@Oft47JgNTR5j=B8i$ai6=pkowrj311inkTZZj8zHSCrCFn3}2Gtb^RU_i1JD&wb?W3QlYa{-k&;n3$gQUmY5CIuAoRD61Vyx zrS^G8a3M>N*S?{#K)p)AJSTF@6P`5RPqSHH$ zAFU+eDE2T6?HECRr0KyX32?^X*@EC*s{mwy3g%{Q1q%PK++ATT*bGT><^Yem82!}b z8%Z-sU9+`4qWQ@XXJq1i46&Wx0$16#vsd? zAlGiu39?wy~@ads)RHAfAUUP6$F64PFQIPLa;t2;&olT^ZhR zDAw-!hHMz0-U~saL!5K2LKf2mSV*<75Jj5APVu%8QEh_u@JrT*xlSMQzvvx;dB+5W zt>BRGuKLH?yVG*e1HROnR<4N8NWUF+p^Do_hVD)-uBI4 zKz3L~qYf*vXu`EqOfCAs?0Gy5u52 z?`bTBn$zRdM2;2MP`(j@XU%KIIjG#Y#Y<*wxuXjE0GNB0KPomMijjC32I(_bov@n> zg2~^9Co>S_c9<@_3G0SF3Brw>Aof%bqb%i)xNLMZJqpE>r6&%333Sy-(mr>uGaK^(%tKPH+%6j+~p z;p{4UKPBv)+W0kimmhwONLGeuA#qU&X6*aOkL&eh92)WwK>>LYt7WjGII4eO|DU>+ zns==+3+m#nZH7O=D9AW2m1}$#FgCCQj*I(NF&1Qem)v9d-=AaEd3?`XzSVfN*pgv+ zyiQ{kX~HpmZ=J>XxNQ-%?dEap`9Jzc*2z~(WvSVaDiffnprXZ9-DzUH$5gl$N4Cwy zVSS!sq3A|3xz)LZ^8{>m+^j5d|L0!a3=^;DaA}f>_xg2{8#PTP)5YQJpJ4c`#kM)`pUA30Z~HK`trTNY<@{c1cesZ*shsd%PRV zcRIC;zuNn%dAF^tzbWXEz0Lp?dpgaO%6-Yb6@ac?KeSpLu|bs({kt)l*Sr|wXC{P& zDhZy60*~IR$Q4K@GjM`YH6YHM9TdKbrF>Q*Pb4P8Ue^%)|6p;Chs78Z$=~sAAcWEt z?6W_9#zzFPcb<9{hDEF%d#F1aDVzIjO*kXUo}y{=WK&aiEU~iFBjNo5;ddLg*Lj@s zm*0MSe|UiaJ7%-1{xxm^NJ6hmM@u+R+}KT5G&ee3w%Dl%dzk|XRYatQY4RpbrnEQ5 zLkRhw3Oe*4MmJYst#bsKOOs4C6MroV&oPH_Ir zENA9^l$XuBUQ`W@TirTj;Z~twui_=c3wW<(d*2KbXKc9RKde>X;RP0wxhxRrNXyT1 z;LGN+z=!!MMnLZUl%a)Gb^%jAjj4JhO}55>wJoZ6!@+b|1)kEb*2WfAaVf4gJGRBF z)9geO7rU1wjfJl&6F52T1qB%Y{%V5z#NnpK>pOVYwhSCR)$CmX<}%ZIHGs zYDE!m;Ng(Gw`v*_+F+!KmsH_*TSM52P*`#X>*8e0aqit`np?x>l=bLNMSJV?;`)IF zNU@FW5%L6#TE}kMqdq)O>Ad_iQie6h&%1dG|k~aZjl6F=#sfXZzE)#ERa#ttD3dlM86690ozPX8^4C5a9&ELsQx-*R2C&N#EUn$^i1J)(uq`GHXrmQ|0Qn&V zJ{PXG`O2SE4=1hXI*9!6l!+7TW3B_;gS7E^?&^eE(^#5Zxulci2B&D&F9A>@4_E_gxSU2oK$4a5(~4) z$B!Sx#L)QJT$e-=hQ5XhZaA=w+-je6Yb`2h*ZpNPNfzuR(9-bi7+`n>QIBu}3@-<; zlP{)l99)=;3W;XG!dF=JQB=%fbd0L0Y;!eMakeS_1oZ1|#vhGm=;qF@f2~;1bPHTA zZah<$qK4$0w1KJ z1-9kEAC-;BMlb9TQdtO>U#tGqEUma(m4HwEy8|a7}EQ5%8 zOVO_4-sc|#aWmr{g%EWS$&uzsXytM42puSdKySESFs-u@etM#h zE4+%aLVsDX+s863qO3n?`z4$*9m&ug5id^V#QJ0JNvL(;Dk}W*M?@dESbc(9joc2n zJ$xyI1jX@wkO;{k=|g?^NYnzD#?rX=K-$)rlWU5+IRtgB&F{UGJXRsSbfznyh&s7A zrukN*CGSh@inx#h7<%6CY547|Dv3mRyJd(66*IOG5w#TYIuvhTHd5Q+D1gvy#DOp_ ze5;t2s#{k5=<%Du+r+1EAPfJl?yynYR=j}Io&Xc90&|P`+fu?-8xZXp_}9p++qKMv z-sgfDmrS@ps)ItXo!|_4Hv0dHvzeYb)FdS_hGJmp$I zz$Izq*8a5hM3i&Oh=E{F^B8XRY*!4UQ;GzPeS}o*tD9~##J!d(T@ejVMzL9D7@tOU z7;?J9x+Q!4&a&0(4j$}F`}We`ctDMyxKn?K7E#4lO1zaJAgzcmM^=D#exa@~r+?6za*LKfn{4SSR=p!j0Sd)7X6_n2%Ru;R6UMY2o9B5b&r z0*IaSe2#x?YuyUc4>Mn0cO#{xbtaX*-XFsN)w3B21_a0V?^gtPf8Cy5+(x4z7awN# z*HyvcK{2}K&ofl>3tXe0d^f{K4=9kh)E*gP8`3$|nKxA3+`*tc0#JFKFM2e2HMvEh19H;f3f z{{P1fimG$#9q3mxl{MzgT8hyfZoxN-9!T-xBsFe%Cjy)kdYS1@n8|zSlwb`Jr89-$ z^@(06mpgXi?zZbfLmb}KCK3`VJC&LAjwZSltqWDqo|*7d(3CNECP6rCu@VIZ&&bnB zf1EyQ8%T%<@KE-4mCT&9@NL-8@%&Y*n<+8+L$z1`s(hGytAr6yN+s_*x~|i&bU}v6 zoH1Yap7dlCsaDLsBp*7Bxg_o+=T;`$65q72DcT6=mnA00eFIKFI#cgJQf`zd$hRa+ zn1*ria~*Y3|1PgeH*V0O%o_!sM$fI`_J=}lNtr~Ou!(lbF)kqucUCWFK20LP3KBHT~NYP-Y4RZ zBDb-V^hu|%l&9np!jX--sbTxJ+(70yrMD^DRF*Yi3I-#e+_R#u8h><053)P`t`J|M zG0W#xZHr=P`e`boAΞ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Ν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

nlr&BD3#^y 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%0Dwn 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

jgcUj!T$%>T0Lp9 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 G0a;qhLLssM literal 0 HcmV?d00001 diff --git a/man/calculate_gamma.Rd b/man/calculate_gamma.Rd index 3e495d13..51ccc54c 100644 --- a/man/calculate_gamma.Rd +++ b/man/calculate_gamma.Rd @@ -9,13 +9,27 @@ calculate_gamma(cell_count, min_cells_per_metacell = 30) \arguments{ \item{cell_count}{Integer, the total number of cells.} -\item{min_cells_per_metacell}{Integer, the minimum number of cells per metacell. Defaults to 30.} +\item{min_cells_per_metacell}{Integer, the minimum number of cells allowed per metacell. Defaults to 30.} } \value{ An Integer vector of viable gamma values. If no viable gamma values are found, returns 0. } \description{ -This function determines viable gamma values to be used in metacell analysis. It calculates gamma values -by doubling gamma until the quotient of the total cell count and gamma is less than the specified minimum -number of cells per metacell. +This function determines viable gamma (γ) values to be used in metacell analysis. Gamma is a graining level +parameter that controls the degree of cell aggregation when creating metacells. It represents the ratio +between the original number of cells and the desired number of metacells. +} +\details{ +For example: +\itemize{ +\item γ = 2: combines cells to create metacells, aiming for half as many metacells as original cells +\item γ = 4: aims for one-fourth as many metacells +\item γ = 8: aims for one-eighth as many metacells +And so on, using powers of 2. +} + +The function starts with γ = 2 and doubles it repeatedly (2, 4, 8, 16...) until the ratio of +cells/gamma would result in metacells that are smaller than the minimum allowed size. Higher gamma +values mean more aggressive aggregation (fewer, larger metacells), while lower gamma values preserve +more granularity (more, smaller metacells). } diff --git a/man/cell_communication.Rd b/man/cell_communication.Rd new file mode 100644 index 00000000..365e2931 --- /dev/null +++ b/man/cell_communication.Rd @@ -0,0 +1,38 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/functions.R +\name{cell_communication} +\alias{cell_communication} +\title{Perform Human Cell-Cell Communication Analysis} +\usage{ +cell_communication( + input_read_RNA_assay, + empty_droplets_tbl = NULL, + cell_type_tbl = NULL, + assay = NULL, + cell_type_column = NULL, + feature_nomenclature, + ... +) +} +\arguments{ +\item{input_read_RNA_assay}{A SingleCellExperiment or Seurat object containing gene expression data} + +\item{empty_droplets_tbl}{Optional tibble identifying empty droplets to be filtered out} + +\item{cell_type_tbl}{Optional tibble containing cell type information} + +\item{assay}{Character string specifying which assay to use} + +\item{cell_type_column}{Character string specifying the column name containing cell type annotations} + +\item{feature_nomenclature}{Character vector specifying gene in Symbol or Ensemble format} + +\item{...}{Additional arguments passed to \code{CellChat::subsetDB}} +} +\value{ +A CellChat tibble containing cells communication result. +} +\description{ +This function performs ligand-receptor cells communication analysis. +It processes single-cell RNA sequencing data to identify and analyze intercellular communication networks. +} diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 71e5f99e..1bef2fc2 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -66,7 +66,13 @@ metacell_tbl <- split_sample_cell_type_calculate_metacell_membership(input_seura x = cell_type_column, min_cells_per_metacell = 10) -# +# Define output from cell_communication +cell_communication_tbl = HPCell:::cell_communication(input_seurat_abc, + empty_droplets_tbl = NULL, + cell_type_tbl = NULL, + assay = NULL, + cell_type_column = "Cell_type_in_each_tissue") + # empty_droplets_tbl = HPCell:::empty_droplet_id(input_seurat_list[[1]], filter_empty_droplets = TRUE) # # # Define output from annotation_label_transfer From 5b2fa70c30de487cccdd5f79166e7e0574d2facc Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 7 Apr 2025 15:56:56 +1000 Subject: [PATCH 120/145] append sample_id to cellchat tbl --- R/functions.R | 27 +++++++++++++++++++++------ R/modules_grammar_hpc.R | 8 +++++--- man/cell_communication.Rd | 8 ++++++-- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/R/functions.R b/R/functions.R index fd45fc2e..2f59d709 100644 --- a/R/functions.R +++ b/R/functions.R @@ -2023,23 +2023,26 @@ map_add_dispersion_to_se = function(se_df, .col, abundance = NULL){ } #' Perform Human Cell-Cell Communication Analysis -#' @description This function performs ligand-receptor cells communication analysis. +#' @description This function performs cells communication analysis. #' It processes single-cell RNA sequencing data to identify and analyze intercellular communication networks. #' @param input_read_RNA_assay A SingleCellExperiment or Seurat object containing gene expression data #' @param empty_droplets_tbl Optional tibble identifying empty droplets to be filtered out +#' @param alive_identification_tbl Optional tibble identifying dead cells to be filtered out #' @param cell_type_tbl Optional tibble containing cell type information #' @param assay Character string specifying which assay to use #' @param cell_type_column Character string specifying the column name containing cell type annotations #' @param feature_nomenclature Character vector specifying gene in Symbol or Ensemble format #' @param ... Additional arguments passed to \code{CellChat::subsetDB} -#' @return A CellChat tibble containing cells communication result. +#' @return A CellChat tibble containing the inferred communication at the level of +#' ligands/receptors #' @importFrom CellChat createCellChat subsetDB subsetData identifyOverExpressedGenes #' identifyOverExpressedInteractions computeCommunProb filterCommunication subsetCommunication #' @importFrom tibble as_tibble -#' @importFrom dplyr filter +#' @importFrom dplyr filter mutate #' @export cell_communication <- function(input_read_RNA_assay, empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, cell_type_tbl = NULL, assay = NULL, cell_type_column = NULL, @@ -2067,6 +2070,13 @@ cell_communication <- function(input_read_RNA_assay, dplyr::filter(!empty_droplet) } + # Avoid dead cells + if (!is.null(alive_identification_tbl)) { + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(alive_identification_tbl, by = ".cell") |> + dplyr::filter(alive) + } + # Append cell type if (!is.null(cell_type_tbl) && cell_type_column %in% colnames(cell_type_tbl)) { @@ -2087,6 +2097,8 @@ cell_communication <- function(input_read_RNA_assay, rownames(input_read_RNA_assay) = gene_map$gene_name } + # Remove NA cell_type + input_read_RNA_assay = input_read_RNA_assay |> filter(!is.na(.data[[cell_type_column]])) # Construct cellchat object if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { cellchat = createCellChat(object = input_read_RNA_assay, group.by = cell_type_column, assay = my_assay) @@ -2114,12 +2126,14 @@ cell_communication <- function(input_read_RNA_assay, # Filter the number of cells in each group are less than 10 cellchat <- filterCommunication(cellchat, min.cells = 10) + gc() + # Extract the inferred cellular communication network as a data frame # By default, slot.name = "net" extracts the inferred communication at the level of ligands/receptors # Set slot.name = "netP" to access the the inferred communications at the level of signaling pathways # If all arguments are NULL, it returns a data frame consisting of all the inferred cell-cell communications cell_communication_tbl <- tryCatch( - subsetCommunication(cell_chat), + subsetCommunication(cellchat), error = function(e) { message("Error in subsetCommunication(): ", e$message) return(NULL) @@ -2128,8 +2142,9 @@ cell_communication <- function(input_read_RNA_assay, if (!is.null(cell_communication_tbl)) { cell_communication_tbl |> - # In this case, we want to see the communication between the matched source and target cell types - filter(source == target) |> + mutate(sample_id = as.character(unique(cell_type_tbl$sample_id))) |> + # # In this case, we want to see the communication between the matched source and target cell types + # filter(source == target) |> as_tibble() } else {NULL} diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 42809701..91eb8c50 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -466,8 +466,8 @@ calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL, target_input #' @export ligand_receptor_cellchat <- function( input_hpc, target_input = "data_object", target_output = "ligand_receptor_tbl", - target_empty_droplets = "empty_tbl", target_cell_type = "cell_type_concensus_tbl", - group_by = "cell_type", ... + target_empty_droplets = "empty_tbl", target_alive_tbl = "alive_tbl", + target_cell_type = "cell_type_concensus_tbl", group_by = "cell_type", ... ) { UseMethod("ligand_receptor_cellchat") } @@ -475,7 +475,8 @@ ligand_receptor_cellchat <- function( #' @export ligand_receptor_cellchat.HPCell = function( input_hpc, target_input = "data_object", target_output = "ligand_receptor_tbl", - target_empty_droplets = "empty_tbl", target_cell_type = "cell_type_concensus_tbl", + target_empty_droplets = "empty_tbl", target_alive_tbl = "alive_tbl", + target_cell_type = "cell_type_concensus_tbl", group_by = "cell_type", ... ) { @@ -485,6 +486,7 @@ ligand_receptor_cellchat.HPCell = function( user_function = cell_communication |> quote() , input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = target_empty_droplets |> is_target() , + alive_identification_tbl = target_alive_tbl |> is_target(), cell_type_tbl = target_cell_type |> is_target(), cell_type_column = group_by, feature_nomenclature = "gene_nomenclature" |> is_target(), diff --git a/man/cell_communication.Rd b/man/cell_communication.Rd index 365e2931..465d2b45 100644 --- a/man/cell_communication.Rd +++ b/man/cell_communication.Rd @@ -7,6 +7,7 @@ cell_communication( input_read_RNA_assay, empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, cell_type_tbl = NULL, assay = NULL, cell_type_column = NULL, @@ -19,6 +20,8 @@ cell_communication( \item{empty_droplets_tbl}{Optional tibble identifying empty droplets to be filtered out} +\item{alive_identification_tbl}{Optional tibble identifying dead cells to be filtered out} + \item{cell_type_tbl}{Optional tibble containing cell type information} \item{assay}{Character string specifying which assay to use} @@ -30,9 +33,10 @@ cell_communication( \item{...}{Additional arguments passed to \code{CellChat::subsetDB}} } \value{ -A CellChat tibble containing cells communication result. +A CellChat tibble containing the inferred communication at the level of +ligands/receptors } \description{ -This function performs ligand-receptor cells communication analysis. +This function performs cells communication analysis. It processes single-cell RNA sequencing data to identify and analyze intercellular communication networks. } From 4773e50a7a9450730a095fe0c55171faec897bf4 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 7 Apr 2025 16:58:15 +1000 Subject: [PATCH 121/145] fix --- R/functions.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/functions.R b/R/functions.R index aa22de9a..d2b5428e 100644 --- a/R/functions.R +++ b/R/functions.R @@ -2088,7 +2088,7 @@ cell_communication <- function(input_read_RNA_assay, # Avoid dead cells if (!is.null(alive_identification_tbl)) { input_read_RNA_assay <- input_read_RNA_assay |> - left_join(alive_identification_tbl, by = ".cell") |> + left_join(alive_identification_tbl) |> dplyr::filter(alive) } @@ -2096,7 +2096,7 @@ cell_communication <- function(input_read_RNA_assay, if (!is.null(cell_type_tbl) && cell_type_column %in% colnames(cell_type_tbl)) { input_read_RNA_assay <- input_read_RNA_assay |> - left_join(cell_type_tbl, by = ".cell") |> + left_join(cell_type_tbl) |> select(everything(), !!cell_type_column) } else if (!is.null(cell_type_tbl) && !cell_type_column %in% colnames(cell_type_tbl)) From 72b87fbfda62768921414eca8da04086962773b1 Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 8 Apr 2025 14:00:39 +1000 Subject: [PATCH 122/145] update doublet_identification function and metacell dependencies --- NAMESPACE | 1 + R/functions.R | 90 ++++++++++--------- R/modules_grammar_hpc.R | 20 +++-- man/doublet_identification.Rd | 6 +- man/preprocess_SCimplify.Rd | 9 -- ...cell_type_calculate_metacell_membership.Rd | 9 ++ tests/testthat/test_single_functions.R | 22 +++-- 7 files changed, 95 insertions(+), 62 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index a40a1253..f8e2864b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -146,6 +146,7 @@ importFrom(SummarizedExperiment,"colData<-") importFrom(SummarizedExperiment,"rowData<-") importFrom(SummarizedExperiment,SummarizedExperiment) importFrom(SummarizedExperiment,assay) +importFrom(SummarizedExperiment,assayNames) importFrom(SummarizedExperiment,assays) importFrom(SummarizedExperiment,colData) importFrom(SummarizedExperiment,rowData) diff --git a/R/functions.R b/R/functions.R index 827bb981..e1cd0ffc 100644 --- a/R/functions.R +++ b/R/functions.R @@ -793,17 +793,17 @@ alive_identification <- function(input_read_RNA_assay, #' #' @return A tibble containing cells with their scDblFinder scores. #' -#' @importFrom dplyr left_join filter +#' @importFrom dplyr left_join filter select #' @importFrom Matrix Matrix -#' @importFrom SummarizedExperiment colData +#' @importFrom SummarizedExperiment colData assayNames #' @importFrom Seurat as.SingleCellExperiment #' @import scDblFinder #' @export doublet_identification <- function(input_read_RNA_assay, empty_droplets_tbl = NULL, alive_identification_tbl = NULL, - #annotation_label_transfer_tbl, - #reference_label_fine, + annotation_label_transfer_tbl, + reference_label_fine, assay = NULL){ # Fix GChecks @@ -840,15 +840,20 @@ doublet_identification <- function(input_read_RNA_assay, SummarizedExperiment::assay(filter_empty_droplets, assay) SummarizedExperiment::assay(filter_empty_droplets, assay) <- NULL } + + # scDblFinder can only handle counts assay, thus rename + assayNames(input_read_RNA_assay)[assayNames(input_read_RNA_assay) == assay] <- "counts" + # Annotate input_read_RNA_assay |> - #left_join(annotation_label_transfer_tbl, by = ".cell")|> - #scDblFinder(clusters = ifelse(reference_label_fine=="none", TRUE, reference_label_fine)) |> - scDblFinder(clusters = NULL) |> + left_join(annotation_label_transfer_tbl, by = ".cell")|> + scDblFinder(clusters = ifelse(reference_label_fine=="none", TRUE, reference_label_fine)) |> + # scDblFinder(clusters = NULL) |> colData() |> as_tibble(rownames = ".cell") |> - select(.cell, contains("scDblFinder")) - + select(.cell, scDblFinder.cluster, scDblFinder.class, scDblFinder.mostLikelyOrigin, + # Whether the mostLikelyOrigin is ambiguous or rather clear + scDblFinder.originAmbiguous) } @@ -1078,9 +1083,6 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #' approximate sampling, and PCA computation methods. #' #' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing RNA assay data. -#' @param empty_droplets_tbl A tibble identifying empty droplets. -#' @param alive_identification_tbl A tibble from alive cell identification. -#' @param cell_cycle_score_tbl A tibble from cell cycle scoring. #' @param assay assay used, default = "RNA" #' @param genes.use a vector of genes used to compute PCA #' @param genes.exclude a vector of genes to be excluded when computing PCA @@ -1101,9 +1103,6 @@ non_batch_variation_removal <- function(input_read_RNA_assay, #' @importFrom SuperCell build_knn_graph #' @export preprocess_SCimplify <- function(input_read_RNA_assay, - empty_droplets_tbl = NULL, - alive_identification_tbl = NULL, - cell_cycle_score_tbl = NULL, assay = NULL, genes.use = NULL, genes.exclude = NULL, @@ -1142,30 +1141,6 @@ preprocess_SCimplify <- function(input_read_RNA_assay, new.assay.name = assay) } - # avoid small number of cells - if (!is.null(empty_droplets_tbl)) { - input_read_RNA_assay_transform <- input_read_RNA_assay_transform |> - left_join(empty_droplets_tbl, by = ".cell") |> - dplyr::filter(!empty_droplet) - } - - if (!is.null(alive_identification_tbl)) { - input_read_RNA_assay_transform = - input_read_RNA_assay_transform |> - left_join( - alive_identification_tbl , - by=".cell" - ) - } - - if(!is.null(cell_cycle_score_tbl)) - input_read_RNA_assay_transform = input_read_RNA_assay_transform |> - - left_join( - cell_cycle_score_tbl , - by=".cell" - ) - # Get normalise and scale gene expression matrix with rows to be genes and cols to be cells normalized_rna <- input_read_RNA_assay |> @@ -1591,12 +1566,18 @@ calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce, #' #' @param sample_sce A SingleCellExperiment object containing single-cell data. #' @param cell_type_tbl A tibble of cell type. +#' @param empty_droplets_tbl A tibble identifying empty droplets. +#' @param alive_identification_tbl A tibble from alive cell identification. +#' @param doublet_identification_tbl A tibble from doublet identification. #' @param x A character vector of cell type aggregation column. #' @param min_cells_per_metacell An integer of minimum cells in each metacell. #' @return A tibble with metacell membership data for each cell type. #' @export split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, cell_type_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + doublet_identification_tbl = NULL, x="cell_type", min_cells_per_metacell = 30) { @@ -1604,6 +1585,33 @@ split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, if (cell_type_tbl |> is.null()) return(NULL) + # avoid small number of cells + if (!is.null(empty_droplets_tbl)) { + sample_sce <- sample_sce |> + left_join(empty_droplets_tbl, by = ".cell") |> + dplyr::filter(!empty_droplet) + } + + # remove dead cells + if (!is.null(alive_identification_tbl)) { + sample_sce = + sample_sce |> + left_join( + alive_identification_tbl , + by=".cell" + ) |> dplyr::filter(alive) + } + + # remove doublets + if (!is.null(doublet_identification_tbl)) { + sample_sce = + sample_sce |> + left_join( + doublet_identification_tbl , + by=".cell" + ) |> dplyr::filter(scDblFinder.class == "singlet") + } + metacell_gamma_membership_tibble <- sample_sce |> left_join(cell_type_tbl) |> dplyr::group_split(!!sym(x)) |> # By deault, calculate metacell only if sample cell_count >=60 as starting from gamma2. In this case, @@ -1813,11 +1821,11 @@ create_pseudobulk <- function(input_read_RNA_assay, input_read_RNA_assay, empty_droplets_tbl, non_batch_variation_removal_S = NULL, - alive_identification_tbl = NULL, + alive_identification_tbl, cell_cycle_score_tbl = NULL, cell_type_ensembl_harmonised_tbl, annotation_label_transfer_tbl, - doublet_identification_tbl = NULL + doublet_identification_tbl ) # In rare cases, empty droplets observed across cells in a sample diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 61b94286..4bdfb20f 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -312,7 +312,8 @@ score_cell_cycle_seurat.HPCell = function(input_hpc, target_input = "data_object #' @export remove_doublets_scDblFinder <- function( input_hpc, target_input = "data_object", target_output = "doublet_tbl", - target_empry_droplets = "empty_tbl", target_alive = "alive_tbl" + target_empry_droplets = "empty_tbl", target_alive = "alive_tbl", + target_annotation = "annotation_tbl", reference_label_group_by = "monaco_first.labels.fine" ) { UseMethod("remove_doublets_scDblFinder") } @@ -320,7 +321,8 @@ remove_doublets_scDblFinder <- function( #' @export remove_doublets_scDblFinder.HPCell = function( input_hpc, target_input = "data_object", target_output = "doublet_tbl", - target_empry_droplets = "empty_tbl", target_alive = "alive_tbl" + target_empry_droplets = "empty_tbl", target_alive = "alive_tbl", + target_annotation = "annotation_tbl", reference_label_group_by = "monaco_first.labels.fine" ) { input_hpc |> @@ -329,7 +331,9 @@ remove_doublets_scDblFinder.HPCell = function( user_function = doublet_identification |> quote() , input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = target_empry_droplets |> is_target() , - alive_identification_tbl = target_alive |> is_target() + alive_identification_tbl = target_alive |> is_target(), + annotation_label_transfer_tbl = target_annotation |> is_target(), + reference_label_fine = reference_label_group_by ) } @@ -386,7 +390,9 @@ normalise_abundance_seurat_SCT.HPCell = function(input_hpc, factors_to_regress = #' @export cluster_metacell <- function(input_hpc, target_input = "data_object", target_celltype_ensembl = "cell_type_concensus_tbl", - target_output = "metacell_tbl", group_by = NULL, + target_output = "metacell_tbl", target_empry_droplets = "empty_tbl", + target_alive = "alive_tbl", target_doublet = "doublet_tbl", + group_by = NULL, cell_per_metacell = 30, ...) { UseMethod("cluster_metacell") @@ -395,7 +401,8 @@ cluster_metacell <- function(input_hpc, target_input = "data_object", #' @export cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", target_celltype_ensembl = "cell_type_concensus_tbl", - target_output = "metacell_tbl", + target_output = "metacell_tbl", target_empry_droplets = "empty_tbl", + target_alive = "alive_tbl", target_doublet = "doublet_tbl", group_by = NULL, cell_per_metacell = 30, ...) { @@ -406,6 +413,9 @@ cluster_metacell.HPCell = function(input_hpc, target_input = "data_object", user_function = split_sample_cell_type_calculate_metacell_membership |> quote() , sample_sce = target_input |> is_target(), cell_type_tbl = target_celltype_ensembl |> is_target(), + empty_droplets_tbl = target_empry_droplets |> is_target(), + alive_identification_tbl = target_alive |> is_target(), + doublet_identification_tbl = target_doublet |> is_target(), x = group_by, min_cells_per_metacell = cell_per_metacell, ... diff --git a/man/doublet_identification.Rd b/man/doublet_identification.Rd index fad26396..0f70a1d8 100644 --- a/man/doublet_identification.Rd +++ b/man/doublet_identification.Rd @@ -8,6 +8,8 @@ doublet_identification( input_read_RNA_assay, empty_droplets_tbl = NULL, alive_identification_tbl = NULL, + annotation_label_transfer_tbl, + reference_label_fine, assay = NULL ) } @@ -18,11 +20,11 @@ doublet_identification( \item{alive_identification_tbl}{A tibble identifying alive cells.} -\item{assay}{Name of the assay to use.} - \item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} \item{reference_label_fine}{Optional reference label for fine-tuning.} + +\item{assay}{Name of the assay to use.} } \value{ A tibble containing cells with their scDblFinder scores. diff --git a/man/preprocess_SCimplify.Rd b/man/preprocess_SCimplify.Rd index 946f9cac..821831c8 100644 --- a/man/preprocess_SCimplify.Rd +++ b/man/preprocess_SCimplify.Rd @@ -6,9 +6,6 @@ \usage{ preprocess_SCimplify( input_read_RNA_assay, - empty_droplets_tbl = NULL, - alive_identification_tbl = NULL, - cell_cycle_score_tbl = NULL, assay = NULL, genes.use = NULL, genes.exclude = NULL, @@ -26,12 +23,6 @@ preprocess_SCimplify( \arguments{ \item{input_read_RNA_assay}{A \code{SingleCellExperiment} or \code{Seurat} object containing RNA assay data.} -\item{empty_droplets_tbl}{A tibble identifying empty droplets.} - -\item{alive_identification_tbl}{A tibble from alive cell identification.} - -\item{cell_cycle_score_tbl}{A tibble from cell cycle scoring.} - \item{assay}{assay used, default = "RNA"} \item{genes.use}{a vector of genes used to compute PCA} diff --git a/man/split_sample_cell_type_calculate_metacell_membership.Rd b/man/split_sample_cell_type_calculate_metacell_membership.Rd index 1685bc30..47836831 100644 --- a/man/split_sample_cell_type_calculate_metacell_membership.Rd +++ b/man/split_sample_cell_type_calculate_metacell_membership.Rd @@ -7,6 +7,9 @@ split_sample_cell_type_calculate_metacell_membership( sample_sce, cell_type_tbl, + empty_droplets_tbl = NULL, + alive_identification_tbl = NULL, + doublet_identification_tbl = NULL, x = "cell_type", min_cells_per_metacell = 30 ) @@ -16,6 +19,12 @@ split_sample_cell_type_calculate_metacell_membership( \item{cell_type_tbl}{A tibble of cell type.} +\item{empty_droplets_tbl}{A tibble identifying empty droplets.} + +\item{alive_identification_tbl}{A tibble from alive cell identification.} + +\item{doublet_identification_tbl}{A tibble from doublet identification.} + \item{x}{A character vector of cell type aggregation column.} \item{min_cells_per_metacell}{An integer of minimum cells in each metacell.} diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 71e5f99e..9e36f449 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -18,24 +18,33 @@ cell_type_column <- "Cell_type_in_each_tissue" # reference_label_fine = HPCell:::reference_label_fine_id(tissue) -empty_droplets_tbl = HPCell:::empty_droplet_id(input_seurat_abc, filter_empty_droplets = TRUE) +empty_droplets_tbl = HPCell:::empty_droplet_threshold(input_seurat_abc, + feature_nomenclature = "symbol") # Define output from annotation_label_transfer annotation_label_transfer_tbl = HPCell:::annotation_label_transfer(input_seurat_abc, - empty_droplets_tbl) + empty_droplets_tbl, + reference_azimuth = "pbmcref", + feature_nomenclature = "symbol") + +# Define output from cell_type_ensembl_harmonised +cell_type_ensemble_tbl = HPCell:::cell_type_ensembl_harmonised(input_seurat_abc, + annotation_label_transfer_tbl) # Define output from alive_identification alive_identification_tbl = HPCell:::alive_identification(input_seurat_abc, empty_droplets_tbl, - annotation_label_transfer_tbl) + cell_type_ensemble_tbl, + cell_type_column = "cell_type_unified_ensemble", + feature_nomenclature = "symbol") # Define output from doublet_identification doublet_identification_tbl = HPCell:::doublet_identification(input_seurat_abc, empty_droplets_tbl, alive_identification_tbl, - annotation_label_transfer_tbl, - reference_label_fine) + cell_type_ensemble_tbl, + reference_label_fine = "cell_type_unified_ensemble") # Define output from cell_cycle_scoring cell_cycle_score_tbl = HPCell:::cell_cycle_scoring(input_seurat_abc, empty_droplets_tbl) @@ -63,6 +72,9 @@ metacell_tbl <- split_sample_cell_type_calculate_metacell_membership(input_seura input_seurat_abc[[]] |> rownames_to_column(var = ".cell") |> as_tibble(), + empty_droplets_tbl, + alive_identification_tbl, + doublet_identification_tbl, x = cell_type_column, min_cells_per_metacell = 10) From 432d0dfa86590fb6041fd9f8269113f3f4e0096a Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 8 Apr 2025 15:30:48 +1000 Subject: [PATCH 123/145] fix --- NAMESPACE | 1 + R/functions.R | 23 ++++++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index f8e2864b..56ecc123 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -141,6 +141,7 @@ importFrom(SingleCellExperiment,SingleCellExperiment) importFrom(SingleCellExperiment,altExp) importFrom(SingleR,SingleR) importFrom(SummarizedExperiment,"assay<-") +importFrom(SummarizedExperiment,"assayNames<-") importFrom(SummarizedExperiment,"assays<-") importFrom(SummarizedExperiment,"colData<-") importFrom(SummarizedExperiment,"rowData<-") diff --git a/R/functions.R b/R/functions.R index e1cd0ffc..d5f6429a 100644 --- a/R/functions.R +++ b/R/functions.R @@ -795,7 +795,7 @@ alive_identification <- function(input_read_RNA_assay, #' #' @importFrom dplyr left_join filter select #' @importFrom Matrix Matrix -#' @importFrom SummarizedExperiment colData assayNames +#' @importFrom SummarizedExperiment colData assayNames assayNames<- #' @importFrom Seurat as.SingleCellExperiment #' @import scDblFinder #' @export @@ -810,6 +810,8 @@ doublet_identification <- function(input_read_RNA_assay, .cell = NULL empty_droplet = NULL + if (is.null(input_read_RNA_assay)) return(NULL) + # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) @@ -834,6 +836,12 @@ doublet_identification <- function(input_read_RNA_assay, filter(alive) } + # In rare cases, all cells in a sample are empty droplets or dead + if (ncol(input_read_RNA_assay) == 0) return(NULL) + + # In rare cases, only one cell in a sample is left + if (ncol(input_read_RNA_assay) == 1) input_read_RNA_assay = input_read_RNA_assay |> duplicate_single_column_assay() + # Condition as scDblFinder only accept assay "counts" if (!"counts" %in% (SummarizedExperiment::assays(filter_empty_droplets) |> names())){ SummarizedExperiment::assay(filter_empty_droplets, "counts") <- @@ -847,13 +855,16 @@ doublet_identification <- function(input_read_RNA_assay, # Annotate input_read_RNA_assay |> left_join(annotation_label_transfer_tbl, by = ".cell")|> - scDblFinder(clusters = ifelse(reference_label_fine=="none", TRUE, reference_label_fine)) |> + scDblFinder(clusters = ifelse(# The length of the provided cluster vector must be greater than one. Otherwise, faster clustering will be performed. + reference_label_fine=="none" | length(unique(reference_label_fine)) == 1, + TRUE, reference_label_fine)) |> # scDblFinder(clusters = NULL) |> colData() |> as_tibble(rownames = ".cell") |> select(.cell, scDblFinder.cluster, scDblFinder.class, scDblFinder.mostLikelyOrigin, # Whether the mostLikelyOrigin is ambiguous or rather clear - scDblFinder.originAmbiguous) + scDblFinder.originAmbiguous) |> + mutate(scDblFinder.cluster = as.character(scDblFinder.cluster)) } @@ -1612,6 +1623,12 @@ split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, ) |> dplyr::filter(scDblFinder.class == "singlet") } + # In rare cases, all cells in a sample are from empty droplets or dead or doublets + if (ncol(sample_sce) == 0) return(NULL) + + # In rare cases, only one cell in a sample is left + if (ncol(sample_sce) == 1) sample_sce = sample_sce |> duplicate_single_column_assay() + metacell_gamma_membership_tibble <- sample_sce |> left_join(cell_type_tbl) |> dplyr::group_split(!!sym(x)) |> # By deault, calculate metacell only if sample cell_count >=60 as starting from gamma2. In this case, From eee248e912751afeed5eb59d2ced52cf153abb43 Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 9 Apr 2025 16:16:26 +1000 Subject: [PATCH 124/145] remove alive_tbl dependency in doublet function. force scDblFinder() work for small number of cells. --- R/functions.R | 93 ++++++++++++++++++++++------------- R/modules_grammar_hpc.R | 8 ++- man/doublet_identification.Rd | 3 -- 3 files changed, 63 insertions(+), 41 deletions(-) diff --git a/R/functions.R b/R/functions.R index d5f6429a..8e803d74 100644 --- a/R/functions.R +++ b/R/functions.R @@ -786,7 +786,6 @@ alive_identification <- function(input_read_RNA_assay, #' @param assay The assay to be used for analysis, specified as a character string. #' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing RNA assay data. #' @param empty_droplets_tbl A tibble identifying empty droplets. -#' @param alive_identification_tbl A tibble identifying alive cells. #' @param annotation_label_transfer_tbl A tibble with annotation label transfer data. #' @param reference_label_fine Optional reference label for fine-tuning. #' @param assay Name of the assay to use. @@ -801,7 +800,6 @@ alive_identification <- function(input_read_RNA_assay, #' @export doublet_identification <- function(input_read_RNA_assay, empty_droplets_tbl = NULL, - alive_identification_tbl = NULL, annotation_label_transfer_tbl, reference_label_fine, assay = NULL){ @@ -818,53 +816,82 @@ doublet_identification <- function(input_read_RNA_assay, if (inherits(input_read_RNA_assay, "Seurat")) { input_read_RNA_assay <- input_read_RNA_assay |> - # Filtering empty Seurat::as.SingleCellExperiment() } + # Filtering empty if (!is.null(empty_droplets_tbl)) { - - filter_empty_droplets <- input_read_RNA_assay |> - # Filtering empty + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(empty_droplets_tbl |> select(.cell, empty_droplet), by = ".cell") |> filter(!empty_droplet) - - # Filtering dead - if(alive_identification_tbl |> is.null() |> not()) - input_read_RNA_assay = input_read_RNA_assay |> - left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> - filter(alive) - } + } + + # scDblFinder() can identify doublets from non-empty droplet cells, so no need to filter alive # In rare cases, all cells in a sample are empty droplets or dead if (ncol(input_read_RNA_assay) == 0) return(NULL) - # In rare cases, only one cell in a sample is left - if (ncol(input_read_RNA_assay) == 1) input_read_RNA_assay = input_read_RNA_assay |> duplicate_single_column_assay() - - # Condition as scDblFinder only accept assay "counts" - if (!"counts" %in% (SummarizedExperiment::assays(filter_empty_droplets) |> names())){ - SummarizedExperiment::assay(filter_empty_droplets, "counts") <- - SummarizedExperiment::assay(filter_empty_droplets, assay) - SummarizedExperiment::assay(filter_empty_droplets, assay) <- NULL - } - # scDblFinder can only handle counts assay, thus rename assayNames(input_read_RNA_assay)[assayNames(input_read_RNA_assay) == assay] <- "counts" # Annotate - input_read_RNA_assay |> - left_join(annotation_label_transfer_tbl, by = ".cell")|> - scDblFinder(clusters = ifelse(# The length of the provided cluster vector must be greater than one. Otherwise, faster clustering will be performed. - reference_label_fine=="none" | length(unique(reference_label_fine)) == 1, - TRUE, reference_label_fine)) |> - # scDblFinder(clusters = NULL) |> + # (Duplicate input when the cell number is too small) + # https://github.com/plger/scDblFinder/issues/123 + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(annotation_label_transfer_tbl) + + result <- tryCatch({ + # Run scDblFinder + input_read_RNA_assay <- input_read_RNA_assay %>% + scDblFinder(clusters = reference_label_fine) + }, error = function(e) { + # Error handling + message("Error in scDblFinder: ", e$message) + new_cell_count <- 2 * ncol(input_read_RNA_assay) + + while (new_cell_count < 1500) { + # Double the dataset by column-binding to itself + my_assay = cbind(SummarizedExperiment::assay(input_read_RNA_assay), + SummarizedExperiment::assay(input_read_RNA_assay)) + # Rename the second part of columns to distinguish it + colnames(my_assay)[ncol(my_assay)/2:ncol(my_assay)] = + paste0("DUMMY", "___", colnames(my_assay)[ncol(my_assay)/2:ncol(my_assay)]) + + cd = colData(input_read_RNA_assay) + cd = cd |> rbind(cd) + rownames(cd)[ncol(my_assay)/2:ncol(my_assay)] = + paste0("DUMMY", "___", rownames(cd)[ncol(my_assay)/2:ncol(my_assay)]) + + input_read_RNA_assay = SingleCellExperiment(assay = list(my_assay) |> + set_names("counts"), colData = cd) + + new_cell_count <- ncol(input_read_RNA_assay) + + # Try scDblFinder again + tryCatch({ + input_read_RNA_assay <- input_read_RNA_assay %>% + scDblFinder(clusters = reference_label_fine) + # Break loop if scDblFinder succeeds + break + }, error = function(e) { + message("Error after increasing cells: ", e$message) + }) + } + + if (new_cell_count >= 1500) { + # Switch strategy if the cell number exceeds 1500 + message("Switching reference_label_fine to NULL due to persistent errors") + reference_label_fine <- NULL + input_read_RNA_assay <- input_read_RNA_assay %>% + scDblFinder(clusters = reference_label_fine) + } + }) + + result |> colData() |> as_tibble(rownames = ".cell") |> - select(.cell, scDblFinder.cluster, scDblFinder.class, scDblFinder.mostLikelyOrigin, - # Whether the mostLikelyOrigin is ambiguous or rather clear - scDblFinder.originAmbiguous) |> - mutate(scDblFinder.cluster = as.character(scDblFinder.cluster)) + select(.cell, scDblFinder.class) } diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 4bdfb20f..97d10588 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -312,8 +312,7 @@ score_cell_cycle_seurat.HPCell = function(input_hpc, target_input = "data_object #' @export remove_doublets_scDblFinder <- function( input_hpc, target_input = "data_object", target_output = "doublet_tbl", - target_empry_droplets = "empty_tbl", target_alive = "alive_tbl", - target_annotation = "annotation_tbl", reference_label_group_by = "monaco_first.labels.fine" + target_empry_droplets = "empty_tbl", target_annotation = "annotation_tbl", reference_label_group_by = "monaco_first.labels.fine" ) { UseMethod("remove_doublets_scDblFinder") } @@ -321,8 +320,8 @@ remove_doublets_scDblFinder <- function( #' @export remove_doublets_scDblFinder.HPCell = function( input_hpc, target_input = "data_object", target_output = "doublet_tbl", - target_empry_droplets = "empty_tbl", target_alive = "alive_tbl", - target_annotation = "annotation_tbl", reference_label_group_by = "monaco_first.labels.fine" + target_empry_droplets = "empty_tbl", target_annotation = "annotation_tbl", + reference_label_group_by = "monaco_first.labels.fine" ) { input_hpc |> @@ -331,7 +330,6 @@ remove_doublets_scDblFinder.HPCell = function( user_function = doublet_identification |> quote() , input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = target_empry_droplets |> is_target() , - alive_identification_tbl = target_alive |> is_target(), annotation_label_transfer_tbl = target_annotation |> is_target(), reference_label_fine = reference_label_group_by ) diff --git a/man/doublet_identification.Rd b/man/doublet_identification.Rd index 0f70a1d8..c2f3c9eb 100644 --- a/man/doublet_identification.Rd +++ b/man/doublet_identification.Rd @@ -7,7 +7,6 @@ doublet_identification( input_read_RNA_assay, empty_droplets_tbl = NULL, - alive_identification_tbl = NULL, annotation_label_transfer_tbl, reference_label_fine, assay = NULL @@ -18,8 +17,6 @@ doublet_identification( \item{empty_droplets_tbl}{A tibble identifying empty droplets.} -\item{alive_identification_tbl}{A tibble identifying alive cells.} - \item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} \item{reference_label_fine}{Optional reference label for fine-tuning.} From 9a75f508cb9af966f0a2916eb2a461afa3ae9664 Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 16 Apr 2025 10:50:43 +1000 Subject: [PATCH 125/145] mark fail scdblfinder sample doublet to unknown --- R/functions.R | 68 ++++++++--------------------------- R/modules_grammar_hpc.R | 28 ++++++++------- man/doublet_identification.Rd | 6 ---- 3 files changed, 29 insertions(+), 73 deletions(-) diff --git a/R/functions.R b/R/functions.R index 8e803d74..822e2af1 100644 --- a/R/functions.R +++ b/R/functions.R @@ -786,8 +786,6 @@ alive_identification <- function(input_read_RNA_assay, #' @param assay The assay to be used for analysis, specified as a character string. #' @param input_read_RNA_assay A `SingleCellExperiment` or `Seurat` object containing RNA assay data. #' @param empty_droplets_tbl A tibble identifying empty droplets. -#' @param annotation_label_transfer_tbl A tibble with annotation label transfer data. -#' @param reference_label_fine Optional reference label for fine-tuning. #' @param assay Name of the assay to use. #' #' @return A tibble containing cells with their scDblFinder scores. @@ -800,8 +798,8 @@ alive_identification <- function(input_read_RNA_assay, #' @export doublet_identification <- function(input_read_RNA_assay, empty_droplets_tbl = NULL, - annotation_label_transfer_tbl, - reference_label_fine, + # annotation_label_transfer_tbl, + # reference_label_fine, assay = NULL){ # Fix GChecks @@ -836,62 +834,24 @@ doublet_identification <- function(input_read_RNA_assay, assayNames(input_read_RNA_assay)[assayNames(input_read_RNA_assay) == assay] <- "counts" # Annotate - # (Duplicate input when the cell number is too small) - # https://github.com/plger/scDblFinder/issues/123 - input_read_RNA_assay <- input_read_RNA_assay |> - left_join(annotation_label_transfer_tbl) - + # Mark doublets to Unknown when scDblFinder fails and keep them in the downstream analysis. result <- tryCatch({ # Run scDblFinder - input_read_RNA_assay <- input_read_RNA_assay %>% - scDblFinder(clusters = reference_label_fine) + input_read_RNA_assay <- input_read_RNA_assay |> + # By default, artificial doublets will be considered unidentifiable when score threshold below 0.2 + scDblFinder(clusters = NULL) }, error = function(e) { # Error handling message("Error in scDblFinder: ", e$message) - new_cell_count <- 2 * ncol(input_read_RNA_assay) - - while (new_cell_count < 1500) { - # Double the dataset by column-binding to itself - my_assay = cbind(SummarizedExperiment::assay(input_read_RNA_assay), - SummarizedExperiment::assay(input_read_RNA_assay)) - # Rename the second part of columns to distinguish it - colnames(my_assay)[ncol(my_assay)/2:ncol(my_assay)] = - paste0("DUMMY", "___", colnames(my_assay)[ncol(my_assay)/2:ncol(my_assay)]) - - cd = colData(input_read_RNA_assay) - cd = cd |> rbind(cd) - rownames(cd)[ncol(my_assay)/2:ncol(my_assay)] = - paste0("DUMMY", "___", rownames(cd)[ncol(my_assay)/2:ncol(my_assay)]) - - input_read_RNA_assay = SingleCellExperiment(assay = list(my_assay) |> - set_names("counts"), colData = cd) - - new_cell_count <- ncol(input_read_RNA_assay) - - # Try scDblFinder again - tryCatch({ - input_read_RNA_assay <- input_read_RNA_assay %>% - scDblFinder(clusters = reference_label_fine) - # Break loop if scDblFinder succeeds - break - }, error = function(e) { - message("Error after increasing cells: ", e$message) - }) + input_read_RNA_assay <- input_read_RNA_assay |> mutate(scDblFinder.class = "Unknown") } - - if (new_cell_count >= 1500) { - # Switch strategy if the cell number exceeds 1500 - message("Switching reference_label_fine to NULL due to persistent errors") - reference_label_fine <- NULL - input_read_RNA_assay <- input_read_RNA_assay %>% - scDblFinder(clusters = reference_label_fine) - } - }) - + ) + result |> - colData() |> - as_tibble(rownames = ".cell") |> + colData() |> + as_tibble(rownames = ".cell") |> select(.cell, scDblFinder.class) + } @@ -1647,7 +1607,7 @@ split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, left_join( doublet_identification_tbl , by=".cell" - ) |> dplyr::filter(scDblFinder.class == "singlet") + ) |> dplyr::filter(scDblFinder.class != "doublet") } # In rare cases, all cells in a sample are from empty droplets or dead or doublets @@ -1748,7 +1708,7 @@ preprocessing_output <- function(input_read_RNA_assay, if(doublet_identification_tbl |> is.null() |> not()) input_read_RNA_assay <- input_read_RNA_assay |> left_join(doublet_identification_tbl |> select(.cell, scDblFinder.class), by = ".cell") |> - filter(scDblFinder.class=="singlet") + filter(scDblFinder.class!="doublet") # attach cell cycle if(cell_cycle_score_tbl |> is.null() |> not()) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 97d10588..ea22de73 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -311,29 +311,31 @@ score_cell_cycle_seurat.HPCell = function(input_hpc, target_input = "data_object # Define the generic function #' @export remove_doublets_scDblFinder <- function( - input_hpc, target_input = "data_object", target_output = "doublet_tbl", - target_empry_droplets = "empty_tbl", target_annotation = "annotation_tbl", reference_label_group_by = "monaco_first.labels.fine" + input_hpc, target_input = "data_object", target_output = "doublet_tbl", + target_empry_droplets = "empty_tbl" + # , target_annotation = "annotation_tbl", reference_label_group_by = "monaco_first.labels.fine" ) { UseMethod("remove_doublets_scDblFinder") } #' @export remove_doublets_scDblFinder.HPCell = function( - input_hpc, target_input = "data_object", target_output = "doublet_tbl", - target_empry_droplets = "empty_tbl", target_annotation = "annotation_tbl", - reference_label_group_by = "monaco_first.labels.fine" + input_hpc, target_input = "data_object", target_output = "doublet_tbl", + target_empry_droplets = "empty_tbl" + # , target_annotation = "annotation_tbl", + # reference_label_group_by = "monaco_first.labels.fine" ) { - - input_hpc |> + + input_hpc |> hpc_iterate( - target_output = target_output, - user_function = doublet_identification |> quote() , - input_read_RNA_assay = target_input |> is_target(), + target_output = target_output, + user_function = doublet_identification |> quote() , + input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = target_empry_droplets |> is_target() , - annotation_label_transfer_tbl = target_annotation |> is_target(), - reference_label_fine = reference_label_group_by + # annotation_label_transfer_tbl = target_annotation |> is_target(), + # reference_label_fine = reference_label_group_by ) - + } # Define the generic function diff --git a/man/doublet_identification.Rd b/man/doublet_identification.Rd index c2f3c9eb..34d0c1a6 100644 --- a/man/doublet_identification.Rd +++ b/man/doublet_identification.Rd @@ -7,8 +7,6 @@ doublet_identification( input_read_RNA_assay, empty_droplets_tbl = NULL, - annotation_label_transfer_tbl, - reference_label_fine, assay = NULL ) } @@ -17,10 +15,6 @@ doublet_identification( \item{empty_droplets_tbl}{A tibble identifying empty droplets.} -\item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} - -\item{reference_label_fine}{Optional reference label for fine-tuning.} - \item{assay}{Name of the assay to use.} } \value{ From 23da4c74ed27688e55d31144794d4fb1508bd2eb Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Wed, 30 Apr 2025 21:28:51 +1000 Subject: [PATCH 126/145] Update report formatting --- inst/rmd/Doublet_identification_report.Rmd | 22 +++-- inst/rmd/Empty_droplet_report.Rmd | 96 +++++++++++---------- inst/rmd/Technical_variation_report_hpc.Rmd | 2 +- inst/rmd/pseudobulk_analysis_report.Rmd | 7 +- tests/testthat/test_single_functions.R | 66 +++++++++----- 5 files changed, 113 insertions(+), 80 deletions(-) diff --git a/inst/rmd/Doublet_identification_report.Rmd b/inst/rmd/Doublet_identification_report.Rmd index 02b260e6..1b2829a7 100644 --- a/inst/rmd/Doublet_identification_report.Rmd +++ b/inst/rmd/Doublet_identification_report.Rmd @@ -73,7 +73,7 @@ calc_UMAP <- function(input_seurat) { return(x) } -calc_UMAP_dbl_report <- map(data_object, calc_UMAP) +calc_UMAP_dbl_report <- map(params$data_objec, calc_UMAP) ``` @@ -229,13 +229,13 @@ get_labels_clusters = function(.data, label_column, dim1, dim2){ -```{r, echo = FALSE, warning=FALSE} +```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} # Joining info and returning a list of tibbles merged_combined_annotation_doublets <- list( calc_UMAP_dbl_report, - doublet_tbl, - annotation_tbl, - sample_names + params$doublet_tbl, + params$annotation_tbl, + params$sample_names ) |> pmap( ~ ..1 |> @@ -292,7 +292,7 @@ merged_combined_annotation_doublets <- list( merged_combined_annotation_doublets |> ggplot(aes(umap_1, umap_2, color = !!sym(cell_ann_col))) + # Using the cell annotation column dynamically geom_point(shape = ".") + - theme_bw() + + theme_minimal() + labs(title = .y, color = "Cell Type") + ggrepel::geom_text_repel( data = get_labels_clusters( @@ -377,7 +377,7 @@ merged_combined_annotation_doublets <- #plot proportion ggplot(aes(x = .data[[cell_ann_col]] , y = proportion, fill = scDblFinder.class)) + geom_bar(stat = "identity") + - theme_bw() + + theme_minimal() + facet_wrap(~ sample_column) + theme(axis.text.x=element_text(angle=70, hjust=1)) )) @@ -438,3 +438,11 @@ plot_merged_combined_annotation_doublets + +::: + +# Session Info + +```{r} +sessionInfo() +``` diff --git a/inst/rmd/Empty_droplet_report.Rmd b/inst/rmd/Empty_droplet_report.Rmd index 7925804c..54b60c1d 100644 --- a/inst/rmd/Empty_droplet_report.Rmd +++ b/inst/rmd/Empty_droplet_report.Rmd @@ -10,7 +10,7 @@ params: sample_name: "NA" --- -```{r, warning=FALSE, message=FALSE, echo=FALSE} +```{r, include = FALSE} library(HPCell) library(readr) library(dplyr) @@ -41,6 +41,7 @@ library(tibble) library(magrittr) library(qs) library(S4Vectors) +library(gridExtra) # sample_column <- "orig.ident" @@ -150,7 +151,7 @@ print(plot) - The X-axis is on a logarithmic scale and represents the total count of RNA sequencing reads per cell, while the Y-axis shows the percentage of those reads that are mitochondrial. Each point on the plot represents a single cell. -```{r, warning=FALSE, message=FALSE, echo=FALSE} +```{r, echo=FALSE, message=FALSE, warning=FALSE, fig.width=12, fig.height=7} merged_alive <- map2(meta_data_list, params$alive_tbl, merge_meta) combined_merged_alive <- bind_rows(merged_alive) @@ -268,7 +269,7 @@ count_results - Shows the distribution of p-values for droplets in the lower 10 percentile of total within each tissue - A low p-value signifies significance therefore we would reject those droplets as empty -```{r, warning=FALSE, message=FALSE, echo=FALSE} +```{r, echo=FALSE, message=FALSE, warning=FALSE, fig.width=12, fig.height=7} hist_p_val <- function(df) { if(df |> dplyr::filter(empty) |> nrow() != 0){ df_filtered <- df %>% @@ -290,56 +291,55 @@ plot_hist <- hist_p_val(combined_df) plot_hist ``` -## Rank vs total count across samples - -Plots are shown for all barcodes, barcodes corresponding to empty droplets,and barcodes corresponding to large or small cells. Ranks are calculated from the entire set of barcodes in all plots, for ease of comparison between plots. All axes are on a log-scale. -```{r, warning=FALSE, message=FALSE, echo=FALSE} - -merged_empty <- map2(meta_data_list, params$empty_tbl, merge_meta) -combined_merged_empty <- bind_rows(merged_empty) - -# Define groups -all_barcodes <- combined_merged_empty - -empty_droplets <- combined_merged_empty |> - dplyr::filter(empty_droplet == TRUE) - -large_cells <- combined_merged_empty |> - dplyr::filter(nCount_RNA > 5000) - -small_cells <- combined_merged_empty |> - dplyr::filter(nCount_RNA <= 5000) - -plot_data <- bind_rows( - all_barcodes %>% mutate(group = "All barcodes"), - empty_droplets %>% mutate(group = "Empty droplets"), - large_cells %>% mutate(group = "Large cells"), - small_cells %>% mutate(group = "Small cells") -) + + + -# Create a function for plotting -ggplot(plot_data, aes(x = rank, y = nCount_RNA)) + - geom_point(aes(color = group), alpha = 0.3) + # Default transparency - scale_color_manual(values = c( - "All barcodes" = "pink", # Default color for all barcodes - "Empty droplets" = "lightblue", # Color for empty droplets - "Large cells" = "purple", # Color for large cells - "Small cells" = "lightgrey" # Light silver for small cells - )) + - scale_x_log10() + - scale_y_log10() + - facet_wrap(~ sample) + # Facet by sample - labs(title = "Rank vs Total count across samples", x = "Rank", y = "Total count (nCount_RNA)") + - theme_minimal() + - theme(legend.position = "bottom") -``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## Mitochondrial gene expression and ribosomal protein expression across samples - UMAP plots constructed from barcodes that were detected with EmptyDrops - Each point represents a barcode and is colored based on its Mitochondrial/ Ribosomal percentage -```{r, warning=FALSE, message=FALSE, echo=FALSE, fig.length = 2, fig.width=30} - +```{r, warning=FALSE, message=FALSE, echo=FALSE, fig.width=20, fig.height=10} merge_umap_with_metadata <- function(umap_data, metadata, sample) { umap_data |> dplyr::select(.cell, umap_1, umap_2) |> @@ -368,6 +368,8 @@ plot_ribo <- ggplot(combined_umap_merged, aes(x = umap_1, y = umap_2, color = su theme_minimal() + facet_wrap(~ sample) +# combined_plot <- grid.arrange(plot_mito, plot_ribo, ncol = 2) + combined_plot <- plot_mito + plot_ribo # Show the combined plot diff --git a/inst/rmd/Technical_variation_report_hpc.Rmd b/inst/rmd/Technical_variation_report_hpc.Rmd index cbf6a04b..291d8a4f 100644 --- a/inst/rmd/Technical_variation_report_hpc.Rmd +++ b/inst/rmd/Technical_variation_report_hpc.Rmd @@ -80,7 +80,7 @@ calc_UMAP_dbl_report <- map2(params$data_object, params$sample_name, calc_UMAP) ``` -```{r, echo=FALSE} +```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} data_umap<- calc_UMAP_dbl_report %>% bind_rows() # Plot plot_tissue_color = diff --git a/inst/rmd/pseudobulk_analysis_report.Rmd b/inst/rmd/pseudobulk_analysis_report.Rmd index 93584da5..f35c5e69 100644 --- a/inst/rmd/pseudobulk_analysis_report.Rmd +++ b/inst/rmd/pseudobulk_analysis_report.Rmd @@ -215,7 +215,6 @@ data_for_pca <- dplyr::select(-TMM, -multiplier, -count_scaled) %>% tidybulk::scale_abundance(method = "TMMwsp") - ``` ## Checking that the input counts don't have global sequencing-depth effect @@ -251,6 +250,7 @@ cum_var_explained <- cumsum(var_explained) # Find the number of components that explain at least 90% of the variance num_components <- which(cum_var_explained >= 0.9)[1] +# num_components <- 20 ## Without metadata # my_pca = # data_for_pca@assays@data$count_scaled |> @@ -262,7 +262,8 @@ num_components <- which(cum_var_explained >= 0.9)[1] ```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} # Find the number of components that explain at least 90% of the variance -num_components <- which(cum_var_explained >= 0.9)[1] +#num_components <- which(cum_var_explained >= 0.9)[1] +#num_components <- 20 ``` ## Scree plot @@ -322,7 +323,7 @@ tidybulk::reduce_dimensions(method="PCA") |> tidybulk::pivot_sample() |> ggplot(aes(PC1, PC2, color=data_for_pca$.aggregated_cells)) + geom_point() + - theme_bw() + + theme_minimal() + theme( legend.position = "right", # or choose "bottom" if you prefer legend.key.size = unit(0.2, "cm"), # Adjust the size of the legend keys diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 68f4479d..299364c0 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -654,6 +654,15 @@ sce_list <- lapply(split_values, function(value) { }) +##### Testing args +# empty_tbl <- tar_read(empty_tbl) +# data_object <- tar_read(data_object) +# alive_tbl <- tar_read(alive_tbl) +# sample_name <- tar_read(sample_names) +# cell_cycle_tbl <- tar_read(cell_cycle_tbl) +# annotation_tbl <- tar_read(annotation_tbl) +# doublet_tbl <- tar_read(doublet_tbl) +# data_object <- tar_read(data_object) ######################################### library(HPCell) library(targets) @@ -665,8 +674,9 @@ library(crew.cluster) InstallData("ifnb") ifnb <- UpdateSeuratObject(ifnb) ifnb.list <- SplitObject(ifnb, split.by = "stim") -file_paths <- c("~/HPCell/CTRL_seurat_tibble.rds", "~/HPCell/STIM_seurat_tibble.rds") +file_paths <- c("~/CTRL_seurat_tibble.rds", "~/STIM_seurat_tibble.rds") +#Subset 300 cells ctrl_subset <- subset(ifnb.list$CTRL, cells = sample(Cells(ifnb.list$CTRL), size = 300)) stim_subset <- subset(ifnb.list$STIM, cells = sample(Cells(ifnb.list$STIM), size = 300)) @@ -696,35 +706,47 @@ input_hpc |> )) |> hpc_report( "empty_report", - rmd_path = system.file("rmd", "Empty_droplet_report.Rmd", package = "HPCell"), + rmd_path = system.file("rmd", "Empty_droptlet_report.qmd", package = "HPCell"), empty_tbl = "empty_tbl" |> is_target(), data_object = "data_object" |> is_target(), alive_tbl = "alive_tbl" |> is_target(), sample_name = "sample_names" |> is_target() ) |> hpc_report( - "doublet_report", - rmd_path = system.file("rmd", "Doublet_identification_report.Rmd", package = "HPCell"), - data_object = "data_object" |> is_target(), - doublet_tbl = "doublet_tbl" |> is_target(), - annotation_tbl = "annotation_tbl" |> is_target(), + "doublet_report", + rmd_path = system.file("rmd", "Doublet_identification_report.qmd", package = "HPCell"), + data_object = "data_object" |> is_target(), + doublet_tbl = "doublet_tbl" |> is_target(), + annotation_tbl = "annotation_tbl" |> is_target(), sample_names = "sample_names" |> is_target() - ) |> - hpc_report( - "Technical_variation_report", - system.file("rmd", "Technical_variation_report_hpc.Rmd", package = "HPCell"), - data_object = "data_object" |> is_target(), - empty_tbl = "empty_tbl" |> is_target(), - sample_name = "sample_names" |> is_target() - ) |> + ) |> hpc_report( - "pseudo_bulk_report", - system.file("rmd", "pseudobulk_analysis_report.Rmd", package = "HPCell"), - data_object = "data_object" |> is_target(), + "Technical_variation_report", + rmd_path = system.file("rmd", "technical_variation_report.qmd", package = "HPCell"), + data_object = "data_object" |> is_target(), empty_tbl = "empty_tbl" |> is_target(), - alive_tbl = "alive_tbl" |> is_target(), - cell_cycle_tbl = "cell_cycle_tbl" |> is_target(), - annotation_tbl = "annotation_tbl" |> is_target(), - doublet_tbl = "doublet_tbl" |> is_target(), sample_name = "sample_names" |> is_target() + ) |> + hpc_report( + "pseudo_bulk_report", + rmd_path = system.file("rmd", "pseudobulk_analysis_report.qmd", package = "HPCell"), + data_object = "data_object" |> is_target(), + empty_tbl = "empty_tbl" |> is_target(), + alive_tbl = "alive_tbl" |> is_target(), + cell_cycle_tbl = "cell_cycle_tbl" |> is_target(), + annotation_tbl = "annotation_tbl" |> is_target(), + doublet_tbl = "doublet_tbl" |> is_target(), + sample_name = "sample_names" |> is_target() ) + +quarto::quarto_render( + input = "~/HPCell/Testing.qmd", + execute_params = list( + data_object = data_object, + empty_tbl = empty_tbl, + sample_name = sample_name + ), + output_file = "output.html" +) + + \ No newline at end of file From b1eb88d094220aee99d6c0fc3f5556f2d4094725 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Wed, 30 Apr 2025 22:05:43 +1000 Subject: [PATCH 127/145] add new reports remove old ones --- inst/rmd/Doublet_identification_new.qmd | 171 ++++++++++ inst/rmd/Doublet_identification_report.qmd | 311 ++++++++++++++++++ inst/rmd/pseudobulk_analysis_report.qmd | 351 +++++++++++++++++++++ inst/rmd/technical_variation_report.qmd | 192 +++++++++++ 4 files changed, 1025 insertions(+) create mode 100644 inst/rmd/Doublet_identification_new.qmd create mode 100644 inst/rmd/Doublet_identification_report.qmd create mode 100644 inst/rmd/pseudobulk_analysis_report.qmd create mode 100644 inst/rmd/technical_variation_report.qmd diff --git a/inst/rmd/Doublet_identification_new.qmd b/inst/rmd/Doublet_identification_new.qmd new file mode 100644 index 00000000..c900f8d0 --- /dev/null +++ b/inst/rmd/Doublet_identification_new.qmd @@ -0,0 +1,171 @@ +--- +title: "Doublet Identification Report" +author: "SS" +date: "2024-04-29" +title-block-banner: true +format: + html: + theme: minty + df-print: paged + code-line-numbers: true + embed-resources: true +knitr: + opts_chunk: + message: false + warning: false + echo: false +comments: + hypothesis: + theme: clean +editor: visual +params: + data_object: "NA" + doublet_tbl: "NA" + annotation_tbl: "NA" + sample_names: "NA" +output: html_document +--- + +```{r setup, include=FALSE} +# Load libraries +library(purrr) +library(dplyr) +library(tidyr) +library(ggrepel) +library(Seurat) +library(glue) +library(scDblFinder) +library(tidyseurat) +library(tidySingleCellExperiment) +library(patchwork) +library(tibble) +library(scran) +library(magrittr) + +# Set consistent theme +theme_set(theme_minimal()) + +# Parameters +cell_ann_col <- "seurat_annotations" + +# UMAP Calculation +calc_UMAP <- function(input_seurat) { + assay_name <- input_seurat@assays |> names() |> extract2(1) + if (length(VariableFeatures(input_seurat)) == 0) { + input_seurat <- FindVariableFeatures(input_seurat) + } + var_genes <- VariableFeatures(input_seurat) + if (length(var_genes) > 0) { + ScaleData(input_seurat) |> + RunPCA(features = var_genes) |> + FindNeighbors(dims = 1:30) |> + FindClusters(resolution = 0.5) |> + RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> + as_tibble() + } else { + stop("No variable features available for UMAP calculation.") + } +} + +# Helper function for cluster label positions +get_labels_clusters <- function(.data, label_column, dim1, dim2){ + label_column <- enquo(label_column) + dim1 <- enquo(dim1) + dim2 <- enquo(dim2) + .data %>% + nest(data = -!!label_column) %>% + mutate( + !!dim1 := map_dbl(data, ~ median(pull(.x, !!dim1))), + !!dim2 := map_dbl(data, ~ median(pull(.x, !!dim2))) + ) %>% + select(-data) +} + +# Generate UMAP +calc_UMAP_dbl_report <- map(params$data_object, calc_UMAP) +``` + +## Introduction + +This report contains UMAP representation of cell clusters and visualization of the distribution of doublets across processed samples. + +## UMAP Visualization of Cell Typing and Doublet Detection + +```{r, out.width='100%', fig.width=15, fig.height=10} +# Merge metadata +merged_data <- list( + calc_UMAP_dbl_report, + params$doublet_tbl, + params$annotation_tbl, + params$sample_names +) |> + pmap(~ ..1 |> + mutate(sample_column = ..4) |> + left_join(..2 |> mutate(sample_column = ..4), by = ".cell") |> + left_join(..3 |> mutate(sample_column = ..4), by = ".cell")) |> + enframe(name = "sample_id", value = "annotated_metadata") |> + mutate(sample_column = params$sample_names) + +# Plot UMAPs +plots_by_doublet <- merged_data |> + mutate(plot = map2( + annotated_metadata, sample_column, + ~ .x |> + ggplot(aes(umap_1, umap_2, color = scDblFinder.class)) + + geom_point(shape = ".", size = 1) + + labs( + title = paste("Doublet Detection -", .y), + x = "UMAP 1", + y = "UMAP 2", + color = "Classification" + ) + + ggrepel::geom_text_repel( + data = get_labels_clusters(.x, scDblFinder.class, umap_1, umap_2), + aes(label = scDblFinder.class), + size = 3 + ) + + guides(color = "none") + )) |> + pull(plot) |> + wrap_plots(ncol = 1) + +plots_by_doublet +``` + +## Singlet and Doublet Composition Across Samples + +```{r, out.width='100%', fig.width=15, fig.height=10} +# Bar Plot of Doublet vs Singlet proportions +composition_plot <- merged_data |> + mutate(composition = map( + annotated_metadata, + ~ .x |> + count(sample_column, !!sym(cell_ann_col), scDblFinder.class, name = "count") |> + group_by(sample_column, !!sym(cell_ann_col)) |> + mutate(proportion = count / sum(count)) |> + ungroup() + )) |> + mutate(plot = map(composition, ~ ggplot(.x, aes(x = !!sym(cell_ann_col), y = proportion, fill = scDblFinder.class)) + + geom_bar(stat = "identity") + + facet_wrap(~ sample_column, scales = "free_x") + + labs( + title = "Proportion of Singlets and Doublets per Cell Type", + x = "Cell Type", + y = "Proportion", + fill = "Classification" + ) + + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + )) |> + pull(plot) |> + wrap_plots(ncol = 1) + +composition_plot +``` + +# Session Information + +```{r} +sessionInfo() +``` +``` + diff --git a/inst/rmd/Doublet_identification_report.qmd b/inst/rmd/Doublet_identification_report.qmd new file mode 100644 index 00000000..81ac71c5 --- /dev/null +++ b/inst/rmd/Doublet_identification_report.qmd @@ -0,0 +1,311 @@ +--- +title: "Doublet Identification Report" +date: 31 Mar 2024 +title-block-banner: true +author: SS +format: + html: + theme: minty + df-print: paged + code-line-numbers: true + embed-resources: true +knitr: + opts_chunk: + message: false + warning: false + echo: false +comments: + hypothesis: + theme: clean +editor: visual +params: + data_object: "NA" + doublet_tbl: "NA" + annotation_tbl: "NA" + sample_names: "NA" +output: html_document +--- + +## Introduction + +This report contains UMAP representation of cell clusters and visualization of the distribution of doublets across processed samples. + +```{r setup, include=FALSE} +library(purrr) +library(dplyr) +library(tidyr) +library(ggrepel) +library(Seurat) +library(glue) +library(scDblFinder) +library(tidyseurat) +library(tidySingleCellExperiment) +library(patchwork) +library(tibble) +library(scran) +library(magrittr) +library(dplyr) +library(tidyr) +library(purrr) +library(ggrepel) +library(Seurat) +library(glue) +library(scDblFinder) +library(Seurat) +library(tidyseurat) +library(tidySingleCellExperiment) +library(patchwork) +library(tibble) +library(scran) +library(purrr) + +cell_ann_col <- "seurat_annotations" + +theme_set(theme_minimal(base_size = 12)) # or theme_bw(base_size = 12) + +common_theme <- theme( + plot.title = element_text(size = 14, face = "bold"), + axis.title = element_text(size = 12), + axis.text = element_text(size = 10), + legend.title = element_text(size = 11), + legend.text = element_text(size = 10) +) +``` + +```{r, include=FALSE} +calc_UMAP <- function(input_seurat) { + assay_name <- input_seurat@assays |> names() |> extract2(1) + + # Check if variable features are already present, if not calculate them + if (length(VariableFeatures(input_seurat)) == 0) { + input_seurat <- FindVariableFeatures(input_seurat) + } + + # Extract variable features using VariableFeatures() for Seurat v5 + var_genes <- VariableFeatures(input_seurat) + + # Ensure that there are variable features before proceeding + if (length(var_genes) > 0) { + # Scale data and run PCA on variable genes + x <- ScaleData(input_seurat) |> + RunPCA(features = var_genes) |> + FindNeighbors(dims = 1:30) |> + FindClusters(resolution = 0.5) |> + RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> + as_tibble() + } else { + stop("No variable features available for UMAP calculation.") + } + + return(x) +} + +calc_UMAP_dbl_report <- map(params$data_objec, calc_UMAP) + +``` + +```{r, include=FALSE} + +get_labels_clusters = function(.data, label_column, dim1, dim2){ + + tidy_dist = function(x1, x2, y1, y2){ + + tibble(x1, x2, y1, y2) %>% + rowwise() %>% + mutate(dist = matrix(c(x1, x2, y1, y2), nrow = 2, byrow = T) %>% dist()) %>% + pull(dist) + + } + + label_column = enquo(label_column) + dim1 = enquo(dim1) + dim2 = enquo(dim2) + + .data %>% + nest(data = -!!label_column) %>% + mutate( + !!dim1 := map_dbl(data, ~ .x %>% pull(!!dim1) %>% median()), + !!dim2 := map_dbl(data, ~ .x %>% pull(!!dim2) %>% median()) + ) %>% + dplyr::select(-data) +} +``` + +## Comprehensive UMAP Visualization of Cell Typing and Doublet Detection Across Tissue Samples + +- This visualization highlights the clustering of cell types and identifies singlets and doublets in the population. +- This allows for an exploration of similarities and differences in gene expression profiles between cells from different tissues. + +```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} +# Joining info and returning a list of tibbles +merged_combined_annotation_doublets <- list( + calc_UMAP_dbl_report, + params$doublet_tbl, + params$annotation_tbl, + params$sample_names +) |> + pmap( + ~ ..1 |> + mutate(sample_column = ..4) |> + left_join(..2 |> mutate(sample_column = ..4), by = ".cell") |> + left_join(..3 |> mutate(sample_column = ..4), by = ".cell") + ) |> + enframe(name = "sample_id", value = "annotated_metadata") |> + mutate( + sample_column = sample_names # Using the sample_names list you already have + ) |> + mutate(plot_by_doublet = map2( + annotated_metadata, + sample_column, + ~ { + # Sample to not overwhelm the plotting + merged_combined_annotation_doublets = .x |> + nest(doublet_class = -scDblFinder.class) |> + mutate(number_to_sample = if_else(scDblFinder.class == "singlet", 10000, Inf)) |> + replace_na(list(number_to_sample = Inf)) |> + unnest(doublet_class) + + # UMAP plot by doublet class + merged_combined_annotation_doublets |> + ggplot(aes(umap_1, umap_2, color = scDblFinder.class)) + + geom_point(shape = ".", size = 10) + + # theme_bw() + + labs(title = .y, color = "Cell Type") + + ggrepel::geom_text_repel( + data = get_labels_clusters( + .x, + scDblFinder.class, + umap_1, + umap_2 + ), + aes(umap_1, umap_2, label = scDblFinder.class), size = 3 + ) + + guides(color = "none") + + labs(title = .y) + + common_theme + } + )) |> + mutate(plot_by_cell_type = map2( + annotated_metadata, + sample_names, + ~ { + # Sample to not overwhelm the plotting + merged_combined_annotation_doublets = .x |> + nest(doublet_class = -scDblFinder.class) |> + mutate(number_to_sample = if_else(scDblFinder.class == "singlet", 10000, Inf)) |> + replace_na(list(number_to_sample = Inf)) |> + unnest(doublet_class) + + # UMAP plot by cell annotation + merged_combined_annotation_doublets |> + ggplot(aes(umap_1, umap_2, color = !!sym(cell_ann_col))) + # Using the cell annotation column dynamically + geom_point(shape = ".") + + # theme_minimal() + + common_theme + + labs(title = .y, color = "Cell Type") + + ggrepel::geom_text_repel( + data = get_labels_clusters( + .x, + !!sym(cell_ann_col), # Assuming cell_ann_col contains your cell annotations + umap_1, + umap_2 + ), + aes(umap_1, umap_2, label = !!sym(cell_ann_col)), size = 3 + ) + + guides(color = "none") + + labs(title = .y) + } + )) |> + mutate(overall_plot = map2(plot_by_doublet, plot_by_cell_type, + ~ .x + .y)) + +# Combine the plots +plot_merged_combined_annotation_doublets <- merged_combined_annotation_doublets |> + pull(overall_plot) |> + wrap_plots(ncol = 1) + + plot_layout(guides = 'collect') + +# Print plot +plot_merged_combined_annotation_doublets + + +``` + +## Singlet and Doublet Cell Distributions Across Tissues + +Each bar in the plot corresponds to a specific cell type within each tissue. + +From this plot, we can infer: + +1. The overall quality of the cell separation process in the sequencing data, indicated by the proportion of singlets to doublets. +2. Potential differences in the rate of doublet formation between cell types, which might be related to cell size and tissue type + +```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} +# 2a) Create the composition of the doublets +doublet_composition<- merged_combined_annotation_doublets |> + mutate(doublet_composition = map2( + annotated_metadata, + sample_column, + ~ { + #browser() + .x|> + dplyr::select(sample_column, scDblFinder.class)} + )) |> + # table()|> + dplyr::select(sample_column, doublet_composition) |> + deframe() + + # merged_combined_annotation_doublets <- + # merged_combined_annotation_doublets |> + # mutate(doublet_composition_plot = doublet_composition |> + # group_by(x5, all_of(x5)) |> + # mutate(proportion = count_class/sum(count_class)) |> + # ungroup() + # ) + +#calculate proportion and plot +merged_combined_annotation_doublets <- + merged_combined_annotation_doublets |> + mutate(doublet_composition_plot = map( + annotated_metadata, + ~ .x |> + # browser() |> + # create frequency column + dplyr::count(.data$sample_column, .data[[cell_ann_col]], scDblFinder.class, name= "count_class") |> + group_by(.data$sample_column, .data[[cell_ann_col]]) |> + mutate(proportion = count_class/sum(count_class)) |> + ungroup() |> + + # mutate(frequency = nCount_SCT/sum(nCount_SCT)*100) |> + # + # # create the proportion column + # group_by(sample, scDblFinder.class) |> + # mutate(tot_sample_proportion = sum(frequency)) |> + # mutate(proportion = (frequency * 1)/tot_sample_proportion) |> + + #plot proportion + ggplot(aes(x = .data[[cell_ann_col]] , y = proportion, fill = scDblFinder.class)) + + geom_bar(stat = "identity") + + # theme_minimal() + + common_theme + + facet_wrap(~ sample_column) + + theme(axis.text.x=element_text(angle=70, hjust=1)) + )) + +plot_merged_combined_annotation_doublets<- merged_combined_annotation_doublets|> + pull(doublet_composition_plot)|> + wrap_plots(ncol = 1) + + plot_layout(guides = 'collect') + +# Print plot +plot_merged_combined_annotation_doublets + +``` + +::: + +# Session Info + +```{r} +sessionInfo() +``` diff --git a/inst/rmd/pseudobulk_analysis_report.qmd b/inst/rmd/pseudobulk_analysis_report.qmd new file mode 100644 index 00000000..0c0cdcd3 --- /dev/null +++ b/inst/rmd/pseudobulk_analysis_report.qmd @@ -0,0 +1,351 @@ +--- +title: "Pseudobulk analysis report" +format: + html: + theme: minty + title-block-banner: true + df-print: paged + code-line-numbers: true + embed-resources: true + toc: true + toc-depth: 3 + toc-location: left + number-sections: true + smooth-scroll: true +abstract: > + This report presents a pseudobulk RNA-seq analysis derived from aggregated single-cell profiles. +knitr: + opts_chunk: + message: false + warning: false + echo: false +comments: + hypothesis: + theme: clean +editor: visual +author: "SS" +date: "2023-12-07" +output: html_document +params: + data_object: "NA" + empty_tbl: "NA" + alive_tbl: "NA" + cell_cycle_tbl: "NA" + annotation_tbl: "NA" + doublet_tbl: "NA" + sample_name: "NA" +--- + +```{r setup, include=FALSE} +library(ggplot2) +library(stringr) +library(tidybulk) +library(tidyseurat) +#library(tidysc) +library(tidyHeatmap) +library(purrr) +library(patchwork) +library(grid) +library(ComplexHeatmap) +library(ggrepel) +library(PCAtools) +library(tidySummarizedExperiment) +library(glue) +library(purrr) +library(plotly) +library(tidybulk) +#library(naniar) #NA +library(magrittr) +library(here) +``` + + +```{r, include=FALSE} +preprocessing_output <- function(input_read_RNA_assay, + empty_droplets_tbl, + alive_identification_tbl, + cell_cycle_score_tbl, + annotation_label_transfer_tbl, + doublet_identification_tbl){ + + if(!is.null(empty_droplets_tbl)) + input_read_RNA_assay = + input_read_RNA_assay |> + left_join(empty_droplets_tbl, by = ".cell") |> + filter(!empty_droplet) + + input_read_RNA_assay <- input_read_RNA_assay |> + + # Filter dead cells + left_join( + alive_identification_tbl |> + select(.cell, any_of(c("alive", "subsets_Mito_percent", "subsets_Mito_sum", "subsets_Ribo_percent", "high_mitochondrion", "high_ribosome"))), + by = ".cell" + ) |> + filter(alive) |> + + # Filter doublets + left_join(doublet_identification_tbl |> select(.cell, scDblFinder.class), by = ".cell") |> + filter(scDblFinder.class=="singlet") + + # Add cell cycle + if(!is.null(cell_cycle_score_tbl)) + input_read_RNA_assay <- input_read_RNA_assay |> + left_join( + cell_cycle_score_tbl, + by=".cell" + ) + + # Attach annotation + if (inherits(annotation_label_transfer_tbl, "tbl_df")){ + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(annotation_label_transfer_tbl, by = ".cell") + } + + + input_read_RNA_assay + # # Filter Red blood cells and platelets + # if (tolower(tissue) == "pbmc" & "predicted.celltype.l2" %in% c(rownames(annotation_label_transfer_tbl), colnames(annotation_label_transfer_tbl))) { + # filtered_data <- filter(processed_data, !predicted.celltype.l2 %in% c("Eryth", "Platelet")) + # } else { + # filtered_data <- processed_data + # } +} + + + +preprocessing_output_S <- pmap( + list(params$data_object, params$empty_tbl, params$alive_tbl, params$cell_cycle_tbl, params$annotation_tbl, params$doublet_tbl), + ~ preprocessing_output(..1, ..2, ..3, ..4, ..5, ..6) +) +``` + + +```{r, include=FALSE} +create_pseudobulk <- function(preprocessing_output_S, assays = NULL, sample_name){ + #browser() + if(assays |> is.null()){ + if(preprocessing_output_S |> is("Seurat")) + assays = Seurat::Assays(preprocessing_output_S) + else if(preprocessing_output_S |> is("SingleCellExperiment")) + assays = preprocessing_output_S@assays |> names() + + } + pseudobulk = + preprocessing_output_S |> + + # Add sample + mutate(sample_hpc = sample_name) |> + + # Aggregate + #aggregate_cells(c(sample_hpc, any_of(x)), slot = "data", assays = assays) + tidySingleCellExperiment::aggregate_cells(c(sample_hpc), slot = "data", assays = assays) + + if(pseudobulk |> is("data.frame")) + pseudobulk = pseudobulk |> + as_SummarizedExperiment(.sample, .feature, any_of(assays)) + + rowData(pseudobulk)$feature_name = rownames(pseudobulk) + + pseudobulk |> + pivot_longer(cols = assays, names_to = "data_source", values_to = "count") |> + filter(!count |> is.na()) |> + + # Some manipulation to get unique feature because RNA and ADT + # both can have same name genes + rename(symbol = .feature) |> + mutate(data_source = stringr::str_remove(data_source, "abundance_")) |> + unite(".feature", c(symbol, data_source), remove = FALSE) |> + + # Covert + as_SummarizedExperiment( + .sample = .sample, + .transcript = .feature, + .abundance = count + ) +} + +pseudobulk_list <- map2(preprocessing_output_S, params$sample_name, ~ create_pseudobulk(.x, sample_name = .y)) + +``` + +```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} +pseudobulk_merge <- function(pseudobulk_list) { + + + # Fix GCHECKS + . = NULL + + # Select only common columns + common_columns = + pseudobulk_list |> + purrr::map(~ .x |> as_tibble() |> colnames()) |> + unlist() |> + table() %>% + .[.==max(.)] |> + names() + + # All genes + all_genes = + pseudobulk_list |> + purrr::map(~ .x |> rownames()) |> + unlist() |> + unique() |> + as.character() + + + se <- pseudobulk_list |> + + # Add missing genes + purrr::map(~{ + + missing_genes = all_genes |> setdiff(rownames(.x)) + + if(missing_genes |> length() == 0) return(.x) + else + .x |> add_missingh_genes_to_se(all_genes, missing_genes) + + }) |> + + purrr::map(~ .x |> dplyr::select(any_of(common_columns))) %>% + + do.call(S4Vectors::cbind, .) + + + return(se) +} +merged_pseudobulk <- pseudobulk_merge(pseudobulk_list) + +``` + +```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} +#pbmc_pseudobulk from sce: +pbmc_pseudobulk <- + merged_pseudobulk %>% + # filter(data_source == assay) |> + #separate( .sample, c("single_cell_rna_id", "batch1"), "__" , remove=FALSE) |> + #left_join(metadata_clinical_sample |> tidybulk::pivot_sample(sample)) |> + tidybulk::identify_abundant() %>% + tidybulk::scale_abundance(method = "TMMwsp") + +# Prepare data for PCA for each element of the list +data_for_pca <- + pbmc_pseudobulk %>% + keep_abundant() %>% + keep_variable(.abundance = "count_scaled", top = 500) %>% + dplyr::select(-TMM, -multiplier, -count_scaled) %>% + tidybulk::scale_abundance(method = "TMMwsp") + +``` + +## Global Sequencing Depth Density Plot +This density plot compares the distribution of library sizes across samples after TMM normalization. +This helps assess global sequencing-depth differences between samples before PCA is applied. + +```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} + +data_for_pca |> + ggplot(aes(count_scaled + 1, color=.sample)) + geom_density(alpha=0.3) + scale_x_log10() + guides(color="none") +``` + +```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} +metadata = + data_for_pca |> + pivot_sample() |> + dplyr::select(.sample, alive, .aggregated_cells) + +metadata = as.data.frame(metadata) +rownames(metadata) = metadata$`.sample` +# metadata = metadata[,-1] + +my_pca = + data_for_pca@assays@data$count_scaled |> + log1p() |> + scale() |> + pca(metadata = metadata) +# +# Extract the proportion of variance explained by each principal component +var_explained <- my_pca$sdev^2 +var_explained <- var_explained / sum(var_explained) +cum_var_explained <- cumsum(var_explained) + +# Find the number of components that explain at least 90% of the variance +num_components <- which(cum_var_explained >= 0.9)[1] +# num_components <- 20 +## Without metadata +# my_pca = +# data_for_pca@assays@data$count_scaled |> +# log1p() |> +# scale() |> +# prcomp() + +``` + +## Scree Plot +This scree plot shows the proportion of variance explained by each principal component. Components contributing significantly to total variance are prioritized in interpretation of downstream analysis steps. + +```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} +library(ggplot2) + +# # Extract the proportion of variance explained by each principal component +# var_explained <- my_pca$sdev^2 +# var_explained <- var_explained / sum(var_explained) +# cum_var_explained <- cumsum(var_explained) + +# Create a data frame for plotting +scree_data <- data.frame(PC = seq_along(var_explained), Variance = var_explained) + +# Create the scree plot +ggplot(scree_data, aes(x = PC, y = Variance)) + + geom_line() + + geom_point() + + theme_minimal() + + labs(title = "Scree Plot", x = "Principal Component", y = "Proportion of Variance Explained") +``` + +## PCA Plot (By Sample) + +Principal component projection of samples, colored by sample identity. Distance reflects similarity in gene expression profiles, and clustering indicates shared variance structure. + +```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} +# x<- plot(my_pca$rotated[, "PC1"], my_pca$rotated[, "PC2"], +# xlab = "PC1", ylab = "PC2", +# main = "PCA Plot", +# asp = 1) +# x + +x<- ggplot(my_pca$metadata, aes(x = my_pca$rotated[, "PC1"], y = my_pca$rotated[, "PC2"], color = my_pca$metadata |> rownames())) + + geom_point() + + theme_minimal() + + labs(title = "PCA Plot Colored by sample Type", + x = "Principal Component 1", + y = "Principal Component 2") + + scale_color_discrete(name = "Tissue Type") +x +``` + +## Cell Type Clustering via PCA +Samples are grouped based on PCA of their pseudobulk profiles. Color represents number of aggregated cells contributing to each pseudobulk profile. + +```{r, out.width='100%', warning=FALSE, message=FALSE, echo=FALSE} +data_for_pca |> +tidybulk::reduce_dimensions(method="PCA") |> +tidybulk::pivot_sample() |> +ggplot(aes(PC1, PC2, color=data_for_pca$.aggregated_cells)) + +geom_point() + + theme_minimal() + + theme( + legend.position = "right", # or choose "bottom" if you prefer + legend.key.size = unit(0.2, "cm"), # Adjust the size of the legend keys + legend.text = element_text(size = 3), # Adjust the text size in the legend + legend.spacing.y = unit(0.1, "cm") # Adjust the spacing between legend entries + ) +``` + +::: + +# Session Info + +```{r} +sessionInfo() +``` diff --git a/inst/rmd/technical_variation_report.qmd b/inst/rmd/technical_variation_report.qmd new file mode 100644 index 00000000..f5a747a3 --- /dev/null +++ b/inst/rmd/technical_variation_report.qmd @@ -0,0 +1,192 @@ +--- +title: "Technical Variation Report" +format: + html: + theme: minty + title-block-banner: true + df-print: paged + code-line-numbers: true + embed-resources: true + toc: true + toc-depth: 3 + toc-location: left + number-sections: true + smooth-scroll: true +abstract: > + This report summarises the assessment of technical variation across samples. Sample-level UMAP projections are used to evaluate clustering structure and detect potential batch effects between different samples/ conditions. +knitr: + opts_chunk: + message: false + warning: false + echo: false +comments: + hypothesis: + theme: clean +editor: visual +author: "SS" +date: "2023-12-07" +output: html_document +params: + data_object: "NA" + empty_tbl: "NA" + sample_name: "NA" +--- + +```{r setup, include=FALSE} +library(purrr) +library(magrittr) +library(Seurat) +library(dplyr) + +# Global plot theme +theme_set(theme_minimal(base_size = 12)) +common_theme <- theme( + plot.title = element_text(size = 14, face = "bold"), + axis.title = element_text(size = 12), + axis.text = element_text(size = 10), + legend.title = element_text(size = 11), + legend.text = element_text(size = 10), + strip.text = element_text(size = 11), + legend.position = "bottom" +) + +``` + +```{r, include=FALSE} +find_variable_genes <- function(input_seurat, empty_droplet){ + + # Set the assay of choice + assay_of_choice = input_seurat@assays |> names() |> extract2(1) + + # Ensure "HTO" and "ADT" assays are removed if present + if("HTO" %in% names(input_seurat@assays)) input_seurat[["HTO"]] = NULL + if("ADT" %in% names(input_seurat@assays)) input_seurat[["ADT"]] = NULL + + # Filter out empty droplets + seu<- dplyr::left_join(input_seurat, empty_droplet) |> + dplyr::filter(!empty_droplet) + + # Update Seurat object meta.data after filtering + # input_seurat@meta.data <- seu + + # Scale data + input_seurat <- ScaleData(seu, assay=assay_of_choice, return.only.var.genes=FALSE) + + # Find and retrieve variable features + input_seurat <- Seurat::FindVariableFeatures(input_seurat, assay=assay_of_choice, nfeatures = 500) + my_variable_genes <- Seurat::VariableFeatures(input_seurat, assay=assay_of_choice) + + return(my_variable_genes) +} + +variable_gene_list <- map2(params$data_object, params$empty_tbl, find_variable_genes) + +``` + +```{r, include=FALSE} +calc_UMAP <- function(data_object, sample_name) { + assay_name <- data_object@assays |> names() |> extract2(1) + + # Check if variable features are already present, if not calculate them + if (length(VariableFeatures(data_object)) == 0) { + data_object <- FindVariableFeatures(data_object) + } + + # Extract variable features using VariableFeatures() for Seurat v5 + var_genes <- VariableFeatures(data_object) + + # Ensure that there are variable features before proceeding + if (length(var_genes) > 0) { + # Scale data and run PCA on variable genes + x <- ScaleData(data_object) |> + RunPCA(features = var_genes) |> + FindNeighbors(dims = 1:30) |> + FindClusters(resolution = 0.5) |> + RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> + as_tibble() |> + mutate(sample_column = sample_name) + } else { + stop("No variable features available for UMAP calculation.") + } + + return(x) +} + +calc_UMAP_dbl_report <- map2(params$data_object, params$sample_name, calc_UMAP) +``` + +## UMAP projection of All Samples +This plot displays the UMAP projection of all cells across samples. Each point represents a single cell, and different colors indicate sample of origin. +UMAP was computed based on the top 500 variable genes identified per sample. + +```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} +data_umap<- calc_UMAP_dbl_report %>% bind_rows() +# Plot +plot_tissue_color = + data_umap |> + dplyr::mutate(batch = 1) |> + ggplot(aes(umap_1, umap_2, color = data_umap$sample_column )) + + geom_point(size = 0.2) + + facet_wrap(~data_umap$sample_column) + + common_theme + + # theme_minimal() + + labs(title = "UMAP visualisation of Samples", color = "orig.ident") + +print(plot_tissue_color) +``` + + + +```{r, fig.width=10, fig.height=8, echo=FALSE, message=FALSE, warning=FALSE} +data_umap<- calc_UMAP_dbl_report %>% bind_rows() +# Plot +plot_tissue_color = + data_umap |> + dplyr::mutate(batch = 1) |> + ggplot(aes(umap_1, umap_2, color = data_umap$sample_column )) + + geom_point(size = 0.2) + + facet_wrap(~data_umap$sample_column) + + common_theme + + # theme_minimal() + + labs(title = "UMAP visualisation of Samples", color = "orig.ident") + +print(plot_tissue_color) +``` + +```{r, fig.width=10, fig.height=8, echo=FALSE, message=FALSE, warning=FALSE} +data_umap<- calc_UMAP_dbl_report %>% bind_rows() +# Plot +plot_tissue_color = + data_umap |> + dplyr::mutate(batch = 1) |> + ggplot(aes(umap_1, umap_2, color = data_umap$sample_column )) + + geom_point(size = 0.2) + + facet_wrap(~data_umap$sample_column) + + theme_minimal() + + labs(title = "UMAP visualisation of Samples", color = "orig.ident") + +print(plot_tissue_color) +``` + + + + + + + + + + + + + + + + + + + + + + + From a70158f929c5d44e645b384a86f0be00ac2cdd9c Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 8 May 2025 11:20:31 +1000 Subject: [PATCH 128/145] skip cellchat object with only one celltype --- R/functions.R | 17 ++++++++++++++--- R/modules_grammar_hpc.R | 6 ++++-- man/cell_communication.Rd | 3 +++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/R/functions.R b/R/functions.R index 3a011f9c..808a95bc 100644 --- a/R/functions.R +++ b/R/functions.R @@ -2055,6 +2055,7 @@ map_add_dispersion_to_se = function(se_df, .col, abundance = NULL){ #' @param input_read_RNA_assay A SingleCellExperiment or Seurat object containing gene expression data #' @param empty_droplets_tbl Optional tibble identifying empty droplets to be filtered out #' @param alive_identification_tbl Optional tibble identifying dead cells to be filtered out +#' @param doublet_identification_tbl A tibble from doublet identification. #' @param cell_type_tbl Optional tibble containing cell type information #' @param assay Character string specifying which assay to use #' @param cell_type_column Character string specifying the column name containing cell type annotations @@ -2070,6 +2071,7 @@ map_add_dispersion_to_se = function(se_df, .col, abundance = NULL){ cell_communication <- function(input_read_RNA_assay, empty_droplets_tbl = NULL, alive_identification_tbl = NULL, + doublet_identification_tbl = NULL, cell_type_tbl = NULL, assay = NULL, cell_type_column = NULL, @@ -2079,7 +2081,9 @@ cell_communication <- function(input_read_RNA_assay, if (input_read_RNA_assay |> is.null()) return(NULL) # CellChat identifyOverExpressedGenes() would only support at least 2 groups - if (cell_type_tbl |> distinct(.data[[cell_type_column]]) |> pull() |> length() == 1) return(NULL) + if (is.null(cell_type_tbl) || + (cell_type_tbl |> filter(!is.na(.data[[cell_type_column]])) |> + distinct(.data[[cell_type_column]]) |> pull() |> length() == 1)) return(NULL) # Get assay if(is.null(assay)) my_assay = input_read_RNA_assay@assays |> names() |> magrittr::extract2(1) @@ -2100,10 +2104,17 @@ cell_communication <- function(input_read_RNA_assay, # Avoid dead cells if (!is.null(alive_identification_tbl)) { input_read_RNA_assay <- input_read_RNA_assay |> - left_join(alive_identification_tbl) |> + left_join(alive_identification_tbl |> select(.cell, alive), by = ".cell") |> dplyr::filter(alive) } + # Avoid doublet + if (is.null(doublet_identification_tbl)) { + input_read_RNA_assay <- input_read_RNA_assay |> + left_join(doublet_identification_tbl |> select(.cell, scDblFinder.class), by = ".cell") |> + filter(scDblFinder.class!="doublet") + } + # Append cell type if (!is.null(cell_type_tbl) && cell_type_column %in% colnames(cell_type_tbl)) { @@ -2143,7 +2154,7 @@ cell_communication <- function(input_read_RNA_assay, # Preprocessing # subset the expression data of signaling genes for saving computation cost. By default, feature=NULL means subsetting the expression data of signaling genes in CellChatDB.use cellchat <- subsetData(cellchat) # This step is necessary even if using the whole database - future::plan("multisession", workers = 4) # do parallel + #future::plan("multisession", workers = 4) # do parallel cellchat <- identifyOverExpressedGenes(cellchat) cellchat <- identifyOverExpressedInteractions(cellchat) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 5f4304d5..6af2a088 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -477,7 +477,8 @@ calculate_pseudobulk.HPCell = function(input_hpc, group_by = NULL, target_input ligand_receptor_cellchat <- function( input_hpc, target_input = "data_object", target_output = "ligand_receptor_tbl", target_empty_droplets = "empty_tbl", target_alive_tbl = "alive_tbl", - target_cell_type = "cell_type_concensus_tbl", group_by = "cell_type", ... + target_doublet_tbl = "doublet_tbl", target_cell_type = "cell_type_concensus_tbl", + group_by = "cell_type", ... ) { UseMethod("ligand_receptor_cellchat") } @@ -486,7 +487,7 @@ ligand_receptor_cellchat <- function( ligand_receptor_cellchat.HPCell = function( input_hpc, target_input = "data_object", target_output = "ligand_receptor_tbl", target_empty_droplets = "empty_tbl", target_alive_tbl = "alive_tbl", - target_cell_type = "cell_type_concensus_tbl", + target_doublet_tbl = "doublet_tbl", target_cell_type = "cell_type_concensus_tbl", group_by = "cell_type", ... ) { @@ -497,6 +498,7 @@ ligand_receptor_cellchat.HPCell = function( input_read_RNA_assay = target_input |> is_target(), empty_droplets_tbl = target_empty_droplets |> is_target() , alive_identification_tbl = target_alive_tbl |> is_target(), + doublet_identification_tbl = target_doublet_tbl |> is_target(), cell_type_tbl = target_cell_type |> is_target(), cell_type_column = group_by, feature_nomenclature = "gene_nomenclature" |> is_target(), diff --git a/man/cell_communication.Rd b/man/cell_communication.Rd index 465d2b45..af2c0f94 100644 --- a/man/cell_communication.Rd +++ b/man/cell_communication.Rd @@ -8,6 +8,7 @@ cell_communication( input_read_RNA_assay, empty_droplets_tbl = NULL, alive_identification_tbl = NULL, + doublet_identification_tbl = NULL, cell_type_tbl = NULL, assay = NULL, cell_type_column = NULL, @@ -22,6 +23,8 @@ cell_communication( \item{alive_identification_tbl}{Optional tibble identifying dead cells to be filtered out} +\item{doublet_identification_tbl}{A tibble from doublet identification.} + \item{cell_type_tbl}{Optional tibble containing cell type information} \item{assay}{Character string specifying which assay to use} From 3ecdfd6cbbd0b8dcdb49c0622a42cd439c4b2742 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Thu, 8 May 2025 16:06:33 +1000 Subject: [PATCH 129/145] delet old report rmd files --- inst/rmd/Doublet_identification_report.Rmd | 448 ----------------- inst/rmd/Empty_droplet_report.Rmd | 525 -------------------- inst/rmd/Technical_variation_report.Rmd | 171 ------- inst/rmd/Technical_variation_report_hpc.Rmd | 96 ---- inst/rmd/pseudobulk_analysis_report.Rmd | 345 ------------- inst/rmd/pseudobulk_analysis_report.html | 462 ----------------- 6 files changed, 2047 deletions(-) delete mode 100644 inst/rmd/Doublet_identification_report.Rmd delete mode 100644 inst/rmd/Empty_droplet_report.Rmd delete mode 100644 inst/rmd/Technical_variation_report.Rmd delete mode 100644 inst/rmd/Technical_variation_report_hpc.Rmd delete mode 100644 inst/rmd/pseudobulk_analysis_report.Rmd delete mode 100644 inst/rmd/pseudobulk_analysis_report.html diff --git a/inst/rmd/Doublet_identification_report.Rmd b/inst/rmd/Doublet_identification_report.Rmd deleted file mode 100644 index 1b2829a7..00000000 --- a/inst/rmd/Doublet_identification_report.Rmd +++ /dev/null @@ -1,448 +0,0 @@ ---- -title: "Doublet identification report" -author: "SS" -date: "2023-12-05" -output: html_document -params: - data_object: "NA" - doublet_tbl: "NA" - annotation_tbl: "NA" - sample_names: "NA" ---- -## Introduction -This report contains UMAP representation of cell clusters and visualization of the distribution of doublets across processed samples. - -```{r setup, include=FALSE} -library(purrr) -library(dplyr) -library(tidyr) -library(ggrepel) -library(Seurat) -library(glue) -library(scDblFinder) -library(tidyseurat) -library(tidySingleCellExperiment) -library(patchwork) -library(tibble) -library(scran) -library(magrittr) -library(dplyr) -library(tidyr) -library(purrr) -# library(sccomp) -library(ggrepel) -library(Seurat) -library(glue) -library(scDblFinder) -library(Seurat) -library(tidyseurat) -library(tidySingleCellExperiment) -library(patchwork) -library(tibble) -library(scran) -library(purrr) -#sample_column <- "orig.ident" -cell_ann_col <- "seurat_annotations" -``` - -```{r, include=FALSE} -calc_UMAP <- function(input_seurat) { - assay_name <- input_seurat@assays |> names() |> extract2(1) - - # Check if variable features are already present, if not calculate them - if (length(VariableFeatures(input_seurat)) == 0) { - input_seurat <- FindVariableFeatures(input_seurat) - } - - # Extract variable features using VariableFeatures() for Seurat v5 - var_genes <- VariableFeatures(input_seurat) - - # Ensure that there are variable features before proceeding - if (length(var_genes) > 0) { - # Scale data and run PCA on variable genes - x <- ScaleData(input_seurat) |> - RunPCA(features = var_genes) |> - FindNeighbors(dims = 1:30) |> - FindClusters(resolution = 0.5) |> - RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> - as_tibble() - } else { - stop("No variable features available for UMAP calculation.") - } - - return(x) -} - -calc_UMAP_dbl_report <- map(params$data_objec, calc_UMAP) - -``` - -```{r, include=FALSE} - -get_labels_clusters = function(.data, label_column, dim1, dim2){ - - tidy_dist = function(x1, x2, y1, y2){ - - tibble(x1, x2, y1, y2) %>% - rowwise() %>% - mutate(dist = matrix(c(x1, x2, y1, y2), nrow = 2, byrow = T) %>% dist()) %>% - pull(dist) - - } - - label_column = enquo(label_column) - dim1 = enquo(dim1) - dim2 = enquo(dim2) - - .data %>% - nest(data = -!!label_column) %>% - mutate( - !!dim1 := map_dbl(data, ~ .x %>% pull(!!dim1) %>% median()), - !!dim2 := map_dbl(data, ~ .x %>% pull(!!dim2) %>% median()) - ) %>% - dplyr::select(-data) -} -``` - -## Comprehensive UMAP Visualization of Cell Typing and Doublet Detection Across Tissue Samples -- This visualization highlights the clustering of cell types and identifies singlets and doublets in the population. -- This allows for an exploration of similarities and differences in gene expression profiles between cells from different tissues. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} -# Joining info and returning a list of tibbles -merged_combined_annotation_doublets <- list( - calc_UMAP_dbl_report, - params$doublet_tbl, - params$annotation_tbl, - params$sample_names -) |> - pmap( - ~ ..1 |> - mutate(sample_column = ..4) |> - left_join(..2 |> mutate(sample_column = ..4), by = ".cell") |> - left_join(..3 |> mutate(sample_column = ..4), by = ".cell") - ) |> - enframe(name = "sample_id", value = "annotated_metadata") |> - mutate( - sample_column = sample_names # Using the sample_names list you already have - ) |> - mutate(plot_by_doublet = map2( - annotated_metadata, - sample_column, - ~ { - # Sample to not overwhelm the plotting - merged_combined_annotation_doublets = .x |> - nest(doublet_class = -scDblFinder.class) |> - mutate(number_to_sample = if_else(scDblFinder.class == "singlet", 10000, Inf)) |> - replace_na(list(number_to_sample = Inf)) |> - unnest(doublet_class) - - # UMAP plot by doublet class - merged_combined_annotation_doublets |> - ggplot(aes(umap_1, umap_2, color = scDblFinder.class)) + - geom_point(shape = ".", size = 10) + - theme_bw() + - labs(title = .y, color = "Cell Type") + - ggrepel::geom_text_repel( - data = get_labels_clusters( - .x, - scDblFinder.class, - umap_1, - umap_2 - ), - aes(umap_1, umap_2, label = scDblFinder.class), size = 4 - ) + - guides(color = "none") + - labs(title = .y) - } - )) |> - mutate(plot_by_cell_type = map2( - annotated_metadata, - sample_names, - ~ { - # Sample to not overwhelm the plotting - merged_combined_annotation_doublets = .x |> - nest(doublet_class = -scDblFinder.class) |> - mutate(number_to_sample = if_else(scDblFinder.class == "singlet", 10000, Inf)) |> - replace_na(list(number_to_sample = Inf)) |> - unnest(doublet_class) - - # UMAP plot by cell annotation - merged_combined_annotation_doublets |> - ggplot(aes(umap_1, umap_2, color = !!sym(cell_ann_col))) + # Using the cell annotation column dynamically - geom_point(shape = ".") + - theme_minimal() + - labs(title = .y, color = "Cell Type") + - ggrepel::geom_text_repel( - data = get_labels_clusters( - .x, - !!sym(cell_ann_col), # Assuming cell_ann_col contains your cell annotations - umap_1, - umap_2 - ), - aes(umap_1, umap_2, label = !!sym(cell_ann_col)), size = 2 - ) + - guides(color = "none") + - labs(title = .y) - } - )) |> - mutate(overall_plot = map2(plot_by_doublet, plot_by_cell_type, - ~ .x + .y)) - -# Combine the plots -plot_merged_combined_annotation_doublets <- merged_combined_annotation_doublets |> - pull(overall_plot) |> - wrap_plots(ncol = 1) + - plot_layout(guides = 'collect') - -# Print plot -plot_merged_combined_annotation_doublets - - -``` - -## Singlet and Doublet Cell Distributions Across Tissues - -Each bar in the plot corresponds to a specific cell type within each tissue. - -From this plot, we can infer: - -1. The overall quality of the cell separation process in the sequencing data, indicated by the proportion of singlets to doublets. -2. Potential differences in the rate of doublet formation between cell types, which might be related to cell size and tissue type - -```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} -# 2a) Create the composition of the doublets -doublet_composition<- merged_combined_annotation_doublets |> - mutate(doublet_composition = map2( - annotated_metadata, - sample_column, - ~ { - #browser() - .x|> - dplyr::select(sample_column, scDblFinder.class)} - )) |> - # table()|> - dplyr::select(sample_column, doublet_composition) |> - deframe() - - # merged_combined_annotation_doublets <- - # merged_combined_annotation_doublets |> - # mutate(doublet_composition_plot = doublet_composition |> - # group_by(x5, all_of(x5)) |> - # mutate(proportion = count_class/sum(count_class)) |> - # ungroup() - # ) - -#calculate proportion and plot -merged_combined_annotation_doublets <- - merged_combined_annotation_doublets |> - mutate(doublet_composition_plot = map( - annotated_metadata, - ~ .x |> - # browser() |> - # create frequency column - dplyr::count(.data$sample_column, .data[[cell_ann_col]], scDblFinder.class, name= "count_class") |> - group_by(.data$sample_column, .data[[cell_ann_col]]) |> - mutate(proportion = count_class/sum(count_class)) |> - ungroup() |> - - # mutate(frequency = nCount_SCT/sum(nCount_SCT)*100) |> - # - # # create the proportion column - # group_by(sample, scDblFinder.class) |> - # mutate(tot_sample_proportion = sum(frequency)) |> - # mutate(proportion = (frequency * 1)/tot_sample_proportion) |> - - #plot proportion - ggplot(aes(x = .data[[cell_ann_col]] , y = proportion, fill = scDblFinder.class)) + - geom_bar(stat = "identity") + - theme_minimal() + - facet_wrap(~ sample_column) + - theme(axis.text.x=element_text(angle=70, hjust=1)) - )) - -plot_merged_combined_annotation_doublets<- merged_combined_annotation_doublets|> - pull(doublet_composition_plot)|> - wrap_plots(ncol = 1) + - plot_layout(guides = 'collect') - -# Print plot -plot_merged_combined_annotation_doublets - -``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -::: - -# Session Info - -```{r} -sessionInfo() -``` diff --git a/inst/rmd/Empty_droplet_report.Rmd b/inst/rmd/Empty_droplet_report.Rmd deleted file mode 100644 index 54b60c1d..00000000 --- a/inst/rmd/Empty_droplet_report.Rmd +++ /dev/null @@ -1,525 +0,0 @@ ---- -title: "Empty droplet report" -author: "SS" -date: "2023-12-07" -output: html_document -params: - empty_tbl: "NA" - data_object: "NA" - alive_tbl: "NA" - sample_name: "NA" ---- - -```{r, include = FALSE} -library(HPCell) -library(readr) -library(dplyr) -library(tidyr) -library(ggplot2) -library(purrr) -library(Seurat) -library(tidyseurat) -library(glue) -library(scater) -library(DropletUtils) -library(EnsDb.Hsapiens.v86) -library(here) -library(stringr) -library(rlang) -library(scuttle) -library(scDblFinder) -library(ggupset) -library(tidySummarizedExperiment) -library(broom) -library(tarchetypes) -library(SeuratObject) -library(SingleCellExperiment) -library(SingleR) -library(celldex) -library(tidySingleCellExperiment) -library(tibble) -library(magrittr) -library(qs) -library(S4Vectors) -library(gridExtra) - -# sample_column <- "orig.ident" - -# Calculate_UMAP -calc_UMAP <- function(input_seurat) { - assay_name <- input_seurat@assays |> names() |> extract2(1) - - # Check if variable features are already present, if not calculate them - if (length(VariableFeatures(input_seurat)) == 0) { - input_seurat <- FindVariableFeatures(input_seurat) - } - - # Extract variable features using VariableFeatures() for Seurat v5 - var_genes <- VariableFeatures(input_seurat) - - # Ensure that there are variable features before proceeding - if (length(var_genes) > 0) { - # Scale data and run PCA on variable genes - x <- ScaleData(input_seurat) |> - RunPCA(features = var_genes) |> - FindNeighbors(dims = 1:30) |> - FindClusters(resolution = 0.5) |> - RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> - as_tibble() - } else { - stop("No variable features available for UMAP calculation.") - } - - return(x) -} - -calc_UMAP_dbl_report <- map(params$data_object, calc_UMAP) - -extract_metadata <- function(seurat_obj, sample_name) { - seurat_obj@meta.data %>% - rownames_to_column(var = ".cell") %>% - mutate(sample = sample_name) -} - -meta_data_list <- map2(params$data_object, params$sample_name, ~ extract_metadata(.x, .y)) - -# Function to merge meta data with another processed tibble data -merge_meta <- function(meta_data, data_to_merge) { - left_join(meta_data, data_to_merge, by = ".cell") -} -``` - -## Barcode rank plot -```{r, echo=FALSE, message=FALSE, warning=FALSE, fig.width=12, fig.height=7} -# names(empty_droplets_tbl_list) <- unique_samples_list -# Process empty droplets data -empty_df <- function(input_metadata, empty_droplets_tbl, sample_name) { - # input <- input_metadata |> - # # input_seurat@meta.data |> - # tibble::rownames_to_column(var = '.cell') - #browser() - joined_data <- empty_droplets_tbl |> - left_join(input_metadata |> dplyr::select(.cell), by = '.cell') - - # Create a data frame with plotting information - plot_data <- data.frame( - x = joined_data$rank, - y = joined_data$Total, - rank = joined_data$rank, - inflection = joined_data$inflection, - knee = joined_data$knee, - fitted = joined_data$fitted, - empty = joined_data$empty_droplet, - FDR = joined_data$FDR, - Total = joined_data$Total, - PValue = joined_data$PValue, - sample_name = sample_name - ) - return(plot_data) -} - -process_empty_droplet_list <- purrr::pmap( - list(meta_data_list, params$empty_tbl, params$sample_name), - ~ empty_df(..1, ..2, ..3) -) - -# Combined tibble with an identifier for each tissue/sample -combined_df <- bind_rows(process_empty_droplet_list) - -# Generate plot -plot <- ggplot(combined_df, aes(x = x, y = y)) + - geom_point(color = 'lightblue', alpha = 0.5) + - scale_x_log10() + - scale_y_log10() + - geom_line(aes(x = rank, y = fitted), color='darkblue') + - geom_hline(aes(yintercept = knee), color='red') + - geom_hline(aes(yintercept = inflection), color='forestgreen') + - scale_linetype_manual(values = c("knee" = "dashed", "inflection" = "dashed"), - guide = guide_legend(override.aes = list(color = c("forestgreen", "red"))) - ) + - facet_wrap(~sample_name, scales = "free") + - theme_minimal() + - labs(x = "Barcodes", y = "Total UMI count", color = "Legend") + - theme(legend.position = "bottom") - -print(plot) -``` - -## Percentage of reads assigned to mitochondrial transcrips against library size - -- Scatter plot comparing mitochondrial content percentage to total count of RNA sequencing reads across different samples (in this case tissues) - -- The X-axis is on a logarithmic scale and represents the total count of RNA sequencing reads per cell, while the Y-axis shows the percentage of those reads that are mitochondrial. Each point on the plot represents a single cell. - -```{r, echo=FALSE, message=FALSE, warning=FALSE, fig.width=12, fig.height=7} - -merged_alive <- map2(meta_data_list, params$alive_tbl, merge_meta) -combined_merged_alive <- bind_rows(merged_alive) - -# Function to process and prepare data for mitochondrial plotting -plot_mito_data <- function(input_seurat, tissue_name, alive_identification) { - # Calculate per-cell mitochondrial QC metrics - mitochondrion <- alive_identification %>% - group_by(sample) %>% - mutate( - discard = as.logical(isOutlier(subsets_Mito_percent, type = "higher")), - threshold = as.numeric(attr(isOutlier(subsets_Mito_percent, type = "higher"), "threshold")["higher"]), - tissue_name = tissue_name - ) %>% - ungroup() - - # Prepare data frame for plotting - plot_mito <- mitochondrion %>% - dplyr::select( - tissue_name, - subsets_Mito_percent, - subsets_Mito_sum, - discard, - threshold, - high_mitochondrion = discard # Rename discard to high_mitochondrion for clarity - ) - - return(plot_mito) -} - -# Apply the function to a list of samples and combine all data -all_data <- lapply(seq_along(params$data_object), function(i) { - plot_mito_data(meta_data_list[[i]], params$sample_name[[i]], merged_alive[[i]]) -}) - -# Combine all data into a single tibble -combined_plot_mito_data <- bind_rows(all_data) - -# Function to plot mitochondrial content per tissue -plot_each_sample <- function(combined_plot_mito_data) { - num_tissues <- length(unique(combined_plot_mito_data$tissue_name)) - - ggplot(combined_plot_mito_data, aes(x = subsets_Mito_sum, y = subsets_Mito_percent)) + - facet_wrap(~ tissue_name) + - geom_point(aes(color = high_mitochondrion), alpha = 0.5) + - #scale_x_log10() + - geom_hline(aes(yintercept = threshold), color = "red", linetype = "dashed") + - labs( - x = "Total count", - y = "Mitochondrial %", - title = paste("Percentage library size vs. library size with", num_tissues, "tissue types"), - color = "High mitochondrial percentage" - ) + - theme_minimal() -} - -# Plot all tissues -plot_each_sample(combined_plot_mito_data) - -``` - -## Proportion of empty droplets -- Number and proportion of cells (non-empty droplets), everything above knee is retained. -```{r, warning=FALSE, message=FALSE, echo=FALSE} -empty_count <- function(df) { - # Count the TRUE and FALSE values in the empty_droplet column - tibble <- df %>% - group_by(sample_name) %>% - summarise( - Empty_count = sum(empty == TRUE), - Cell_count = sum(empty == FALSE) - ) - return(tibble) -} - -# Apply the function to the combined_df -empty_count_results <- empty_count(combined_df) -empty_count_results -``` - -```{r, warning=FALSE, message=FALSE, echo=FALSE} -# Number of non-empty droplets ------------------------------------------------- -empty_table <- function(df) { - # Count the TRUE and FALSE values in the empty_droplet column - tibble <- df %>% - group_by(sample_name) %>% - summarise( - "Number: True cells (FDR<0.001)" = sum(FDR < 0.001, na.rm = TRUE), # Count of FDR values less than 0.001 - "Proportion: True cells (FDR<0.001)" = mean(FDR < 0.001, na.rm = TRUE) # Proportion of FDR values less than 0.001 - ) - return(tibble) -} -empty_count_results <- empty_table(combined_df) -empty_count_results -``` - -## Count of cells vs empty droplets -```{r, warning=FALSE, message=FALSE, echo=FALSE} -count <- function(df) { - # is.cell <- df$FDR <= 0.001 - tibble<- df %>% - group_by(sample_name) %>% - summarise( - Cells = sum(FDR, na.rm = TRUE), # Count of TRUE values, NA values removed - Empty_droplets = sum(!FDR, na.rm = TRUE) # Count of FALSE values, NA values removed - ) - return(tibble) -} -count_results <- count(combined_df) -count_results -``` - - -## Histogram of p-values: (only if empty droplets have been identified) - -- Shows the distribution of p-values for droplets in the lower 10 percentile of total within each tissue -- A low p-value signifies significance therefore we would reject those droplets as empty -```{r, echo=FALSE, message=FALSE, warning=FALSE, fig.width=12, fig.height=7} -hist_p_val <- function(df) { - if(df |> dplyr::filter(empty) |> nrow() != 0){ - df_filtered <- df %>% - group_by(sample_name) %>% - dplyr::filter(empty) %>% - mutate(Total_quantile = quantile(Total[Total > 0], 0.1)) %>% - dplyr::filter(Total <= Total_quantile & Total > 0) %>% - ungroup() - -plot_hist <- ggplot(df_filtered, aes(x = PValue)) + - geom_histogram(binwidth = 0.2, fill = "cornflowerblue", color = "grey") + - facet_wrap(~ sample_name) + - labs(x = "P-value", y = "Frequency") + - ggtitle("Droplets with 0 < libsize <= 10th Percentile of Total per Tissue") + - theme_minimal() -}} - -plot_hist <- hist_p_val(combined_df) -plot_hist -``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## Mitochondrial gene expression and ribosomal protein expression across samples -- UMAP plots constructed from barcodes that were detected with EmptyDrops -- Each point represents a barcode and is colored based on its Mitochondrial/ Ribosomal percentage -```{r, warning=FALSE, message=FALSE, echo=FALSE, fig.width=20, fig.height=10} -merge_umap_with_metadata <- function(umap_data, metadata, sample) { - umap_data |> - dplyr::select(.cell, umap_1, umap_2) |> - left_join(metadata, by = ".cell") |> - mutate(sample = sample) # Merge with metadata -} - -# Merge UMAP data with combined_merged_alive and add sample names -umap_merged_data <- map2(calc_UMAP_dbl_report, params$sample_name, ~ merge_umap_with_metadata(.x, combined_merged_alive, .y)) - -combined_umap_merged <- bind_rows(umap_merged_data) - -# Plot for mitochondrial gene expression -plot_mito <- ggplot(combined_umap_merged, aes(x = umap_1, y = umap_2, color = subsets_Mito_percent)) + - geom_point(alpha = 0.6) + # Add transparency for better visualization - scale_color_gradient(low = "blue", high = "red") + - labs(title = "Mitochondrial Gene Expression", x = "UMAP1", y = "UMAP2") + - theme_minimal() + - facet_wrap(~ sample) - -# Plot for ribosomal gene expression -plot_ribo <- ggplot(combined_umap_merged, aes(x = umap_1, y = umap_2, color = subsets_Ribo_percent)) + - geom_point(alpha = 0.6) + # Add transparency for better visualization - scale_color_gradient(low = "blue", high = "red") + - labs(title = "Ribosomal Protein Expression", x = "UMAP1", y = "UMAP2") + - theme_minimal() + - facet_wrap(~ sample) - -# combined_plot <- grid.arrange(plot_mito, plot_ribo, ncol = 2) - -combined_plot <- plot_mito + plot_ribo - -# Show the combined plot -combined_plot -``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/inst/rmd/Technical_variation_report.Rmd b/inst/rmd/Technical_variation_report.Rmd deleted file mode 100644 index e4aab59c..00000000 --- a/inst/rmd/Technical_variation_report.Rmd +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: "Technical variation report" -author: "SS" -date: "2023-12-05" -output: html_document -params: - x1: "NA" - x2: "NA" - x3: "NA" - x4: "NA" - x5: "NA" ---- -```{r setup, include=FALSE} -# assay_of_choice = "originalexp" -metadata_list <- lapply(params$x1, function(seurat_obj) { - return(seurat_obj@meta.data) -}) -# variable_genes_per_sample = -# -# # input -# tibble( -# seurat_obj_list = params$x1, -# empty_droplets_obj_list = params$x2 -# ) |> -# -# # Reading input -# mutate(variable_genes = map2( -# seurat_obj_list, empty_droplets_obj_list, -# ~ { -# #browser() -# seu = .x -# if("HTO" %in% names(seu@assays)) seu[["HTO"]] = NULL -# if("ADT" %in% names(seu@assays)) seu[["ADT"]] = NULL -# -# -# # Filter -# seu |> -# left_join(.y) |> -# dplyr::filter(!empty_droplet) |> -# -# # Scale -# ScaleData(assay=assay_of_choice, return.only.var.genes=FALSE) |> -# -# # Variable features -# FindVariableFeatures(assay=assay_of_choice, nfeatures = 500) |> -# VariableFeatures(assay=assay_of_choice) -# } -# )) -# - -my_variable_genes = params$x3 |> - # pull(variable_genes) |> - unlist() -# unique() - -``` - -## UMAP colored by Tissue - -```{r echo=FALSE, message=FALSE, warning=FALSE} -# data_umap = -# -# # input -# dplyr::tibble( -# seurat_obj_list = params$x1, -# empty_droplets_obj_list = params$x2 -# ) |> -# -# # Reading input -# dplyr::mutate(variable_genes = purrr::map2( -# seurat_obj_list, empty_droplets_obj_list, -# ~ { -# #browser() -# seu = .x -# empty_droplets = .y -# # Remove HTO and ADT assays if they are present -# # if("HTO" %in% names(seu@assays)) seu[["HTO"]] = NULL -# # if("ADT" %in% names(seu@assays)) seu[["ADT"]] = NULL -# if("HTO" %in% names(seu@assays)) { -# seu <- RemoveAssays(seu, assays = "HTO") -# } -# if("ADT" %in% names(seu@assays)) { -# seu <- RemoveAssays(seu, assays = "ADT") -# } -# -# # Filter empty droplets -# # seu = -# # seu |> -# # left_join(.y) |> -# # dplyr::filter(!empty_droplet) -# cells_to_keep <- empty_droplets %>% -# dplyr::filter(!empty_droplet) %>% -# pull(.cell) -# -# seu <- subset(seu, cells = cells_to_keep) -# -# variable_genes_present <- intersect(my_variable_genes, rownames(seu)) -# sampled_genes <- sample(variable_genes_present, min(length(variable_genes_present), 1000)) -# seu <- seu[sampled_genes, ] -# -# return(seu) -# # seu = -# # seu[my_variable_genes,] |> -# # slice_sample( n=min(ncol(seu), 1000), replace = FALSE ) -# } -# )) - -# data_umap = map(params$x1, function(seu) { -# #browser() -# seu <- ScaleData(seu, assay = assay_of_choice, features = rownames(seu), return.only.var.genes = FALSE) -# VariableFeatures(seu) <- my_variable_genes -# seu<- RunPCA(seu, dims = 1:30, assay=assay_of_choice) |> -# RunUMAP(dims = 1:30, spread = 0.5,min.dist = 0.01, n.neighbors = 10L) -# # as_tibble() |> -# # left_join(input_metadata) -# -# # Extract UMAP coordinates and any other relevant data for plotting -# umap_data <- FetchData(seu, vars = c("umap_1", "umap_2", "Tissue")) -# -# return(umap_data) -# }) %>% bind_rows() - - # #unnest(variable_genes) %>% - # ScaleData(assay=assay_of_choice, return.only.var.genes=FALSE) %>% - # # Variable genes - # { - # .x = (.) - # VariableFeatures(.x) = my_variable_genes - # .x - # } |> - # - # # UMAP - # RunPCA(dims = 1:30, assay=assay_of_choice) |> - # RunUMAP(dims = 1:30, spread = 0.5,min.dist = 0.01, n.neighbors = 10L) |> - # as_tibble() |> - # - # left_join(input_metadata) -data_umap<- params$x4 %>% bind_rows() -# Plot -plot_tissue_color = - data_umap |> - dplyr::mutate(batch = 1) |> - ggplot(aes(umap_1, umap_2, color = data_umap[[params$x5]])) + - geom_point(size = 0.2) + - facet_wrap(~data_umap[[params$x5]]) + - theme_minimal() + - labs(title = "UMAP colored by Tissue", color = "data_umap[[params$x5]]") - -# plot_severity_color = -# data_umap |> -# mutate(batch = 1) |> -# # UMAP -# ggplot(aes(umap_1, umap_2, color = severity)) + -# geom_point(size=0.2) + -# facet_wrap(~batch) + -# guides(color="none") + -# theme_multipanel - -# plot_batch_color = -# data_umap |> -# -# mutate(batch = 1) |> -# -# # UMAP -# ggplot(aes(UMAP_1, UMAP_2, color = batch)) + -# geom_point(size=0.2) + -# theme_multipanel -print(plot_tissue_color) -``` - - diff --git a/inst/rmd/Technical_variation_report_hpc.Rmd b/inst/rmd/Technical_variation_report_hpc.Rmd deleted file mode 100644 index 291d8a4f..00000000 --- a/inst/rmd/Technical_variation_report_hpc.Rmd +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: "Technical_variation_report_hpc" -output: html_document -date: "2024-10-11" -params: - data_object: "NA" - empty_tbl: "NA" - sample_name: "NA" ---- - -```{r setup, include=FALSE} -library(purrr) -library(magrittr) -library(Seurat) -library(dplyr) -``` - -```{r, include=FALSE} -find_variable_genes <- function(input_seurat, empty_droplet){ - - # Set the assay of choice - assay_of_choice = input_seurat@assays |> names() |> extract2(1) - - # Ensure "HTO" and "ADT" assays are removed if present - if("HTO" %in% names(input_seurat@assays)) input_seurat[["HTO"]] = NULL - if("ADT" %in% names(input_seurat@assays)) input_seurat[["ADT"]] = NULL - - # Filter out empty droplets - seu<- dplyr::left_join(input_seurat, empty_droplet) |> - dplyr::filter(!empty_droplet) - - # Update Seurat object meta.data after filtering - # input_seurat@meta.data <- seu - - # Scale data - input_seurat <- ScaleData(seu, assay=assay_of_choice, return.only.var.genes=FALSE) - - # Find and retrieve variable features - input_seurat <- Seurat::FindVariableFeatures(input_seurat, assay=assay_of_choice, nfeatures = 500) - my_variable_genes <- Seurat::VariableFeatures(input_seurat, assay=assay_of_choice) - - return(my_variable_genes) -} - -variable_gene_list <- map2(params$data_object, params$empty_tbl, find_variable_genes) - -``` - - -```{r, include=FALSE} -calc_UMAP <- function(data_object, sample_name) { - assay_name <- data_object@assays |> names() |> extract2(1) - - # Check if variable features are already present, if not calculate them - if (length(VariableFeatures(data_object)) == 0) { - data_object <- FindVariableFeatures(data_object) - } - - # Extract variable features using VariableFeatures() for Seurat v5 - var_genes <- VariableFeatures(data_object) - - # Ensure that there are variable features before proceeding - if (length(var_genes) > 0) { - # Scale data and run PCA on variable genes - x <- ScaleData(data_object) |> - RunPCA(features = var_genes) |> - FindNeighbors(dims = 1:30) |> - FindClusters(resolution = 0.5) |> - RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> - as_tibble() |> - mutate(sample_column = sample_name) - } else { - stop("No variable features available for UMAP calculation.") - } - - return(x) -} - -calc_UMAP_dbl_report <- map2(params$data_object, params$sample_name, calc_UMAP) -``` - - -```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} -data_umap<- calc_UMAP_dbl_report %>% bind_rows() -# Plot -plot_tissue_color = - data_umap |> - dplyr::mutate(batch = 1) |> - ggplot(aes(umap_1, umap_2, color = data_umap$sample_column )) + - geom_point(size = 0.2) + - facet_wrap(~data_umap$sample_column) + - theme_minimal() + - labs(title = "UMAP visualisation of Samples", color = "orig.ident") - -print(plot_tissue_color) -``` \ No newline at end of file diff --git a/inst/rmd/pseudobulk_analysis_report.Rmd b/inst/rmd/pseudobulk_analysis_report.Rmd deleted file mode 100644 index f35c5e69..00000000 --- a/inst/rmd/pseudobulk_analysis_report.Rmd +++ /dev/null @@ -1,345 +0,0 @@ ---- -title: "pseudobulk analysis report" -author: "SS" -date: "2024-01-24" -output: html_document -params: - data_object: "NA" - empty_tbl: "NA" - alive_tbl: "NA" - cell_cycle_tbl: "NA" - annotation_tbl: "NA" - doublet_tbl: "NA" - sample_name: "NA" ---- - -```{r setup, include=FALSE} -library(ggplot2) -library(stringr) -library(tidybulk) -library(tidyseurat) -#library(tidysc) -library(tidyHeatmap) -library(purrr) -library(patchwork) -library(grid) -library(ComplexHeatmap) -library(ggrepel) -library(PCAtools) -library(tidySummarizedExperiment) -library(glue) -library(purrr) -library(plotly) -library(tidybulk) -#library(naniar) #NA -library(magrittr) -library(here) -``` - -Calculate pseudobulk for all samples -```{r, include=FALSE} -preprocessing_output <- function(input_read_RNA_assay, - empty_droplets_tbl, - alive_identification_tbl, - cell_cycle_score_tbl, - annotation_label_transfer_tbl, - doublet_identification_tbl){ - - if(!is.null(empty_droplets_tbl)) - input_read_RNA_assay = - input_read_RNA_assay |> - left_join(empty_droplets_tbl, by = ".cell") |> - filter(!empty_droplet) - - input_read_RNA_assay <- input_read_RNA_assay |> - - # Filter dead cells - left_join( - alive_identification_tbl |> - select(.cell, any_of(c("alive", "subsets_Mito_percent", "subsets_Mito_sum", "subsets_Ribo_percent", "high_mitochondrion", "high_ribosome"))), - by = ".cell" - ) |> - filter(alive) |> - - # Filter doublets - left_join(doublet_identification_tbl |> select(.cell, scDblFinder.class), by = ".cell") |> - filter(scDblFinder.class=="singlet") - - # Add cell cycle - if(!is.null(cell_cycle_score_tbl)) - input_read_RNA_assay <- input_read_RNA_assay |> - left_join( - cell_cycle_score_tbl, - by=".cell" - ) - - # Attach annotation - if (inherits(annotation_label_transfer_tbl, "tbl_df")){ - input_read_RNA_assay <- input_read_RNA_assay |> - left_join(annotation_label_transfer_tbl, by = ".cell") - } - - - input_read_RNA_assay - # # Filter Red blood cells and platelets - # if (tolower(tissue) == "pbmc" & "predicted.celltype.l2" %in% c(rownames(annotation_label_transfer_tbl), colnames(annotation_label_transfer_tbl))) { - # filtered_data <- filter(processed_data, !predicted.celltype.l2 %in% c("Eryth", "Platelet")) - # } else { - # filtered_data <- processed_data - # } -} - - - -preprocessing_output_S <- pmap( - list(params$data_object, params$empty_tbl, params$alive_tbl, params$cell_cycle_tbl, params$annotation_tbl, params$doublet_tbl), - ~ preprocessing_output(..1, ..2, ..3, ..4, ..5, ..6) -) -``` - - -Create pseudobulk -```{r, include=FALSE} -create_pseudobulk <- function(preprocessing_output_S, assays = NULL, sample_name){ - #browser() - if(assays |> is.null()){ - if(preprocessing_output_S |> is("Seurat")) - assays = Seurat::Assays(preprocessing_output_S) - else if(preprocessing_output_S |> is("SingleCellExperiment")) - assays = preprocessing_output_S@assays |> names() - - } - pseudobulk = - preprocessing_output_S |> - - # Add sample - mutate(sample_hpc = sample_name) |> - - # Aggregate - #aggregate_cells(c(sample_hpc, any_of(x)), slot = "data", assays = assays) - tidySingleCellExperiment::aggregate_cells(c(sample_hpc), slot = "data", assays = assays) - - if(pseudobulk |> is("data.frame")) - pseudobulk = pseudobulk |> - as_SummarizedExperiment(.sample, .feature, any_of(assays)) - - rowData(pseudobulk)$feature_name = rownames(pseudobulk) - - pseudobulk |> - pivot_longer(cols = assays, names_to = "data_source", values_to = "count") |> - filter(!count |> is.na()) |> - - # Some manipulation to get unique feature because RNA and ADT - # both can have same name genes - rename(symbol = .feature) |> - mutate(data_source = stringr::str_remove(data_source, "abundance_")) |> - unite(".feature", c(symbol, data_source), remove = FALSE) |> - - # Covert - as_SummarizedExperiment( - .sample = .sample, - .transcript = .feature, - .abundance = count - ) -} - -pseudobulk_list <- map2(preprocessing_output_S, params$sample_name, ~ create_pseudobulk(.x, sample_name = .y)) - -``` - -```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} -pseudobulk_merge <- function(pseudobulk_list) { - - - # Fix GCHECKS - . = NULL - - # Select only common columns - common_columns = - pseudobulk_list |> - purrr::map(~ .x |> as_tibble() |> colnames()) |> - unlist() |> - table() %>% - .[.==max(.)] |> - names() - - # All genes - all_genes = - pseudobulk_list |> - purrr::map(~ .x |> rownames()) |> - unlist() |> - unique() |> - as.character() - - - se <- pseudobulk_list |> - - # Add missing genes - purrr::map(~{ - - missing_genes = all_genes |> setdiff(rownames(.x)) - - if(missing_genes |> length() == 0) return(.x) - else - .x |> add_missingh_genes_to_se(all_genes, missing_genes) - - }) |> - - purrr::map(~ .x |> dplyr::select(any_of(common_columns))) %>% - - do.call(S4Vectors::cbind, .) - - - return(se) -} -merged_pseudobulk <- pseudobulk_merge(pseudobulk_list) - -``` - - -```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} -#pbmc_pseudobulk from sce: -pbmc_pseudobulk <- - merged_pseudobulk %>% - # filter(data_source == assay) |> - #separate( .sample, c("single_cell_rna_id", "batch1"), "__" , remove=FALSE) |> - #left_join(metadata_clinical_sample |> tidybulk::pivot_sample(sample)) |> - tidybulk::identify_abundant() %>% - tidybulk::scale_abundance(method = "TMMwsp") - -# Prepare data for PCA for each element of the list -data_for_pca <- - pbmc_pseudobulk %>% - keep_abundant() %>% - keep_variable(.abundance = "count_scaled", top = 500) %>% - dplyr::select(-TMM, -multiplier, -count_scaled) %>% - tidybulk::scale_abundance(method = "TMMwsp") - -``` - -## Checking that the input counts don't have global sequencing-depth effect - -```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} - -data_for_pca |> - ggplot(aes(count_scaled + 1, color=.sample)) + geom_density(alpha=0.3) + scale_x_log10() + guides(color="none") -``` - -## Calculate PCA of pseudobulk - -```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} -metadata = - data_for_pca |> - pivot_sample() |> - dplyr::select(.sample, alive, .aggregated_cells) - -metadata = as.data.frame(metadata) -rownames(metadata) = metadata$`.sample` -# metadata = metadata[,-1] - -my_pca = - data_for_pca@assays@data$count_scaled |> - log1p() |> - scale() |> - pca(metadata = metadata) -# -# Extract the proportion of variance explained by each principal component -var_explained <- my_pca$sdev^2 -var_explained <- var_explained / sum(var_explained) -cum_var_explained <- cumsum(var_explained) - -# Find the number of components that explain at least 90% of the variance -num_components <- which(cum_var_explained >= 0.9)[1] -# num_components <- 20 -## Without metadata -# my_pca = -# data_for_pca@assays@data$count_scaled |> -# log1p() |> -# scale() |> -# prcomp() - -``` - -```{r, echo=FALSE,results='hide', warning=FALSE, message=FALSE} -# Find the number of components that explain at least 90% of the variance -#num_components <- which(cum_var_explained >= 0.9)[1] -#num_components <- 20 -``` - -## Scree plot -Graphical representation to show the proportion of variance explained by each principal component. -This gives an idea of how many principal components we need to keep to represent the data faithfully. In this case we see a gradual decrease of variance explained, indicating that we might need up to principal component `num_components` for explaining 90% of the variance. - -```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} -library(ggplot2) - -# # Extract the proportion of variance explained by each principal component -# var_explained <- my_pca$sdev^2 -# var_explained <- var_explained / sum(var_explained) -# cum_var_explained <- cumsum(var_explained) - -# Create a data frame for plotting -scree_data <- data.frame(PC = seq_along(var_explained), Variance = var_explained) - -# Create the scree plot -ggplot(scree_data, aes(x = PC, y = Variance)) + - geom_line() + - geom_point() + - theme_minimal() + - labs(title = "Scree Plot", x = "Principal Component", y = "Proportion of Variance Explained") -``` - -## Principal Component Associations with Biological Variables -Here we see which variable is associated with which principal component. We hope the biological variable are associated with the top principal components. - -In our sample data set we're clustering by Tissue type: Samples from the same tissue type cluster together in the PCA space, which indicates that the gene expression profiles are similar within a tissue type - -The distance of the points from the origin (where PC1 and PC2 both equal zero) indicates how much variance each sample has relative to the principal components. Samples that are further out along PC1 or PC2 axes have higher variance for those components. - -```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} -# x<- plot(my_pca$rotated[, "PC1"], my_pca$rotated[, "PC2"], -# xlab = "PC1", ylab = "PC2", -# main = "PCA Plot", -# asp = 1) -# x - -x<- ggplot(my_pca$metadata, aes(x = my_pca$rotated[, "PC1"], y = my_pca$rotated[, "PC2"], color = my_pca$metadata |> rownames())) + - geom_point() + - theme_minimal() + - labs(title = "PCA Plot Colored by sample Type", - x = "Principal Component 1", - y = "Principal Component 2") + - scale_color_discrete(name = "Tissue Type") -x -``` - -## Cell type clustering -- The separation or clustering of points with the same color might suggest that similar cell types have similar gene expression profiles, while different colors that group together could indicate distinct profiles between cell types. -- The distance between the points on the plot reflects the similarity or dissimilarity in their gene expression data, as captured by the PCA. - -```{r, out.width='100%', warning=FALSE, message=FALSE, echo=FALSE} -data_for_pca |> -tidybulk::reduce_dimensions(method="PCA") |> -tidybulk::pivot_sample() |> -ggplot(aes(PC1, PC2, color=data_for_pca$.aggregated_cells)) + -geom_point() + - theme_minimal() + - theme( - legend.position = "right", # or choose "bottom" if you prefer - legend.key.size = unit(0.2, "cm"), # Adjust the size of the legend keys - legend.text = element_text(size = 3), # Adjust the text size in the legend - legend.spacing.y = unit(0.1, "cm") # Adjust the spacing between legend entries - ) -``` - - - - - - - - - - - - \ No newline at end of file diff --git a/inst/rmd/pseudobulk_analysis_report.html b/inst/rmd/pseudobulk_analysis_report.html deleted file mode 100644 index 6bfc76c5..00000000 --- a/inst/rmd/pseudobulk_analysis_report.html +++ /dev/null @@ -1,462 +0,0 @@ - - - - - - - - - - - - - - - -pseudobulk analysis report - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
-

Checking that the input counts don’t have global sequencing-depth -effect

-

-
-
-

Calculate PCA of pseudobulk

-
-
-

Scree plot

-

Graphical representation to show the proportion of variance explained -by each principal component. This gives an idea of how many principal -components we need to keep to represent the data faithfully. In this -case we see a gradual decrease of variance explained, indicating that we -might need up to principal component num_components for -explaining 90% of the variance.

-

-
-
-

Principal Component Associations with Biological Variables

-

Here we see which variable is associated with which principal -component. We hope the biological variable are associated with the top -principal components.

-

In our sample data set we’re clustering by Tissue type: Samples from -the same tissue type cluster together in the PCA space, which indicates -that the gene expression profiles are similar within a tissue type

-

The distance of the points from the origin (where PC1 and PC2 both -equal zero) indicates how much variance each sample has relative to the -principal components. Samples that are further out along PC1 or PC2 axes -have higher variance for those components.

-

-
-
-

Cell type clustering

-
    -
  • The separation or clustering of points with the same color might -suggest that similar cell types have similar gene expression profiles, -while different colors that group together could indicate distinct -profiles between cell types.
  • -
  • The distance between the points on the plot reflects the similarity -or dissimilarity in their gene expression data, as captured by the -PCA.
  • -
-

- - - - - - - - - - -
- - - - -
- - - - - - - - - - - - - - - From da633fa0a4b78089b912733daff12ec2ae9ec235 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Thu, 8 May 2025 16:06:56 +1000 Subject: [PATCH 130/145] Add empty droplet report qmd file --- Empty_droplet_report.qmd | 346 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 346 insertions(+) create mode 100644 Empty_droplet_report.qmd diff --git a/Empty_droplet_report.qmd b/Empty_droplet_report.qmd new file mode 100644 index 00000000..6803f5a5 --- /dev/null +++ b/Empty_droplet_report.qmd @@ -0,0 +1,346 @@ +--- +title: "Empty_droplet_report" +format: html +editor: visual +params: + empty_tbl: "NA" + data_object: "NA" + alive_tbl: "NA" + sample_name: "NA" +--- + +## Empty Droplet Report + +```{r, include = FALSE} +# empty_tbl <- params$empty_tbl +# data_object <- params$data_object +# alive_tbl<- params$alive_tbl +# sample_name<- params$sample_name + +library(HPCell) +library(readr) +library(dplyr) +library(tidyr) +library(ggplot2) +library(purrr) +library(Seurat) +library(tidyseurat) +library(glue) +library(scater) +library(DropletUtils) +library(EnsDb.Hsapiens.v86) +library(here) +library(stringr) +library(rlang) +library(scuttle) +library(scDblFinder) +library(ggupset) +library(tidySummarizedExperiment) +library(broom) +library(tarchetypes) +library(SeuratObject) +library(SingleCellExperiment) +library(SingleR) +library(celldex) +library(tidySingleCellExperiment) +library(tibble) +library(magrittr) +library(qs) +library(S4Vectors) +library(gridExtra) + +# sample_column <- "orig.ident" + +# Calculate_UMAP +calc_UMAP <- function(input_seurat) { + assay_name <- input_seurat@assays |> names() |> extract2(1) + + # Check if variable features are already present, if not calculate them + if (length(VariableFeatures(input_seurat)) == 0) { + input_seurat <- FindVariableFeatures(input_seurat) + } + + # Extract variable features using VariableFeatures() for Seurat v5 + var_genes <- VariableFeatures(input_seurat) + + # Ensure that there are variable features before proceeding + if (length(var_genes) > 0) { + # Scale data and run PCA on variable genes + x <- ScaleData(input_seurat) |> + RunPCA(features = var_genes) |> + FindNeighbors(dims = 1:30) |> + FindClusters(resolution = 0.5) |> + RunUMAP(dims = 1:30, spread = 0.5, min.dist = 0.01, n.neighbors = 10L) |> + as_tibble() + } else { + stop("No variable features available for UMAP calculation.") + } + + return(x) +} + +calc_UMAP_dbl_report <- map(data_object, calc_UMAP) + +extract_metadata <- function(seurat_obj, sample_name) { + seurat_obj@meta.data %>% + rownames_to_column(var = ".cell") %>% + mutate(sample = sample_name) +} + +meta_data_list <- map2(data_object, sample_name, ~ extract_metadata(.x, .y)) + +# Function to merge meta data with another processed tibble data +merge_meta <- function(meta_data, data_to_merge) { + left_join(meta_data, data_to_merge, by = ".cell") +} +``` + +Barcode rank plot + +```{r, echo=FALSE, message=FALSE, warning=FALSE, fig.width=12, fig.height=7} +# names(empty_droplets_tbl_list) <- unique_samples_list +# Process empty droplets data +empty_df <- function(input_metadata, empty_droplets_tbl, sample_name) { + # input <- input_metadata |> + # # input_seurat@meta.data |> + # tibble::rownames_to_column(var = '.cell') + #browser() + joined_data <- empty_droplets_tbl |> + left_join(input_metadata |> dplyr::select(.cell), by = '.cell') + + # Create a data frame with plotting information + plot_data <- data.frame( + x = joined_data$rank, + y = joined_data$Total, + rank = joined_data$rank, + inflection = joined_data$inflection, + knee = joined_data$knee, + fitted = joined_data$fitted, + empty = joined_data$empty_droplet, + FDR = joined_data$FDR, + Total = joined_data$Total, + PValue = joined_data$PValue, + sample_name = sample_name + ) + return(plot_data) +} + +process_empty_droplet_list <- purrr::pmap( + list(meta_data_list, empty_tbl, sample_name), + ~ empty_df(..1, ..2, ..3) +) + +# Combined tibble with an identifier for each tissue/sample +combined_df <- bind_rows(process_empty_droplet_list) + +# Generate plot +plot <- ggplot(combined_df, aes(x = x, y = y)) + + geom_point(color = 'lightblue', alpha = 0.5) + + scale_x_log10() + + scale_y_log10() + + geom_line(aes(x = rank, y = fitted), color='darkblue') + + geom_hline(aes(yintercept = knee), color='red') + + geom_hline(aes(yintercept = inflection), color='forestgreen') + + scale_linetype_manual(values = c("knee" = "dashed", "inflection" = "dashed"), + guide = guide_legend(override.aes = list(color = c("forestgreen", "red"))) + ) + + facet_wrap(~sample_name, scales = "free") + + theme_minimal() + + labs(x = "Barcodes", y = "Total UMI count", color = "Legend") + + theme(legend.position = "bottom") + +print(plot) +``` + +Percentage of reads assigned to mitochondrial transcrips against library size + +- Scatter plot comparing mitochondrial content percentage to total count of RNA sequencing reads across different samples (in this case tissues) + +- The X-axis is on a logarithmic scale and represents the total count of RNA sequencing reads per cell, while the Y-axis shows the percentage of those reads that are mitochondrial. Each point on the plot represents a single cell. + +```{r, echo=FALSE, message=FALSE, warning=FALSE, fig.width=12, fig.height=7} + +merged_alive <- map2(meta_data_list, alive_tbl, merge_meta) +combined_merged_alive <- bind_rows(merged_alive) + +# Function to process and prepare data for mitochondrial plotting +plot_mito_data <- function(input_seurat, tissue_name, alive_identification) { + # Calculate per-cell mitochondrial QC metrics + mitochondrion <- alive_identification %>% + group_by(sample) %>% + mutate( + discard = as.logical(isOutlier(subsets_Mito_percent, type = "higher")), + threshold = as.numeric(attr(isOutlier(subsets_Mito_percent, type = "higher"), "threshold")["higher"]), + tissue_name = tissue_name + ) %>% + ungroup() + + # Prepare data frame for plotting + plot_mito <- mitochondrion %>% + dplyr::select( + tissue_name, + subsets_Mito_percent, + subsets_Mito_sum, + discard, + threshold, + high_mitochondrion = discard # Rename discard to high_mitochondrion for clarity + ) + + return(plot_mito) +} + +# Apply the function to a list of samples and combine all data +all_data <- lapply(seq_along(data_object), function(i) { + plot_mito_data(meta_data_list[[i]], sample_name[[i]], merged_alive[[i]]) +}) + +# Combine all data into a single tibble +combined_plot_mito_data <- bind_rows(all_data) + +# Function to plot mitochondrial content per tissue +plot_each_sample <- function(combined_plot_mito_data) { + num_tissues <- length(unique(combined_plot_mito_data$tissue_name)) + + ggplot(combined_plot_mito_data, aes(x = subsets_Mito_sum, y = subsets_Mito_percent)) + + facet_wrap(~ tissue_name) + + geom_point(aes(color = high_mitochondrion), alpha = 0.5) + + #scale_x_log10() + + geom_hline(aes(yintercept = threshold), color = "red", linetype = "dashed") + + labs( + x = "Total count", + y = "Mitochondrial %", + title = paste("Percentage library size vs. library size with", num_tissues, "tissue types"), + color = "High mitochondrial percentage" + ) + + theme_minimal() +} + +# Plot all tissues +plot_each_sample(combined_plot_mito_data) + +``` + +Proportion of empty droplets + +- Number and proportion of cells (non-empty droplets), everything above knee is retained. + +```{r, warning=FALSE, message=FALSE, echo=FALSE} +empty_count <- function(df) { + # Count the TRUE and FALSE values in the empty_droplet column + tibble <- df %>% + group_by(sample_name) %>% + summarise( + Empty_count = sum(empty == TRUE), + Cell_count = sum(empty == FALSE) + ) + return(tibble) +} + +# Apply the function to the combined_df +empty_count_results <- empty_count(combined_df) +empty_count_results +``` + +Number of non-empty droplets + +```{r, warning=FALSE, message=FALSE, echo=FALSE} +# Number of non-empty droplets ------------------------------------------------- +empty_table <- function(df) { + # Count the TRUE and FALSE values in the empty_droplet column + tibble <- df %>% + group_by(sample_name) %>% + summarise( + "Number: True cells (FDR<0.001)" = sum(FDR < 0.001, na.rm = TRUE), # Count of FDR values less than 0.001 + "Proportion: True cells (FDR<0.001)" = mean(FDR < 0.001, na.rm = TRUE) # Proportion of FDR values less than 0.001 + ) + return(tibble) +} +empty_count_results <- empty_table(combined_df) +empty_count_results +``` + +Count of cells vs empty droplets + +```{r, warning=FALSE, message=FALSE, echo=FALSE} +count <- function(df) { + # is.cell <- df$FDR <= 0.001 + tibble<- df %>% + group_by(sample_name) %>% + summarise( + Cells = sum(FDR, na.rm = TRUE), # Count of TRUE values, NA values removed + Empty_droplets = sum(!FDR, na.rm = TRUE) # Count of FALSE values, NA values removed + ) + return(tibble) +} +count_results <- count(combined_df) +count_results +``` + +Histogram of p-values + +- Shows the distribution of p-values for droplets in the lower 10 percentile of total within each tissue +- A low p-value signifies significance therefore we would reject those droplets as empty + +```{r, echo=FALSE, message=FALSE, warning=FALSE, fig.width=12, fig.height=7} +hist_p_val <- function(df) { + if(df |> dplyr::filter(empty) |> nrow() != 0){ + df_filtered <- df %>% + group_by(sample_name) %>% + dplyr::filter(empty) %>% + mutate(Total_quantile = quantile(Total[Total > 0], 0.1)) %>% + dplyr::filter(Total <= Total_quantile & Total > 0) %>% + ungroup() + +plot_hist <- ggplot(df_filtered, aes(x = PValue)) + + geom_histogram(binwidth = 0.2, fill = "cornflowerblue", color = "grey") + + facet_wrap(~ sample_name) + + labs(x = "P-value", y = "Frequency") + + ggtitle("Droplets with 0 < libsize <= 10th Percentile of Total per Tissue") + + theme_minimal() +}} + +plot_hist <- hist_p_val(combined_df) +plot_hist +``` + +Mitochondrial gene expression and ribosomal protein expression across samples + +- UMAP plots constructed from barcodes that were detected with EmptyDrops +- Each point represents a barcode and is colored based on its Mitochondrial/ Ribosomal percentage + +```{r, warning=FALSE, message=FALSE, echo=FALSE, fig.width=20, fig.height=10} +merge_umap_with_metadata <- function(umap_data, metadata, sample) { + umap_data |> + dplyr::select(.cell, umap_1, umap_2) |> + left_join(metadata, by = ".cell") |> + mutate(sample = sample) # Merge with metadata +} + +# Merge UMAP data with combined_merged_alive and add sample names +umap_merged_data <- map2(calc_UMAP_dbl_report, sample_name, ~ merge_umap_with_metadata(.x, combined_merged_alive, .y)) + +combined_umap_merged <- bind_rows(umap_merged_data) + +# Plot for mitochondrial gene expression +plot_mito <- ggplot(combined_umap_merged, aes(x = umap_1, y = umap_2, color = subsets_Mito_percent)) + + geom_point(alpha = 0.6) + # Add transparency for better visualization + scale_color_gradient(low = "blue", high = "red") + + labs(title = "Mitochondrial Gene Expression", x = "UMAP1", y = "UMAP2") + + theme_minimal() + + facet_wrap(~ sample) + +# Plot for ribosomal gene expression +plot_ribo <- ggplot(combined_umap_merged, aes(x = umap_1, y = umap_2, color = subsets_Ribo_percent)) + + geom_point(alpha = 0.6) + # Add transparency for better visualization + scale_color_gradient(low = "blue", high = "red") + + labs(title = "Ribosomal Protein Expression", x = "UMAP1", y = "UMAP2") + + theme_minimal() + + facet_wrap(~ sample) + +# combined_plot <- grid.arrange(plot_mito, plot_ribo, ncol = 2) + +combined_plot <- plot_mito + plot_ribo + +# Show the combined plot +combined_plot +``` From 746247b9d12bdbca6950cfb495a6f93e0fcf68d6 Mon Sep 17 00:00:00 2001 From: myushen Date: Fri, 9 May 2025 14:24:32 +1000 Subject: [PATCH 131/145] solve incorrect imported function --- NAMESPACE | 2 +- R/CellChat.R | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 4cc6d542..94fb737a 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -94,7 +94,7 @@ importFrom(CellChat,createCellChat) importFrom(CellChat,filterCommunication) importFrom(CellChat,identifyOverExpressedGenes) importFrom(CellChat,identifyOverExpressedInteractions) -importFrom(CellChat,projectData) +importFrom(CellChat,smoothData) importFrom(CellChat,scPalette) importFrom(CellChat,searchPair) importFrom(CellChat,setIdent) diff --git a/R/CellChat.R b/R/CellChat.R index e230ba60..e66d3da7 100644 --- a/R/CellChat.R +++ b/R/CellChat.R @@ -952,7 +952,7 @@ grab_grob <- function(){ #' @importFrom CellChat subsetData #' @importFrom CellChat identifyOverExpressedGenes #' @importFrom CellChat identifyOverExpressedInteractions -#' @importFrom CellChat projectData +#' @importFrom CellChat smoothData #' @importFrom CellChat filterCommunication #' @importFrom CellChat aggregateNet #' @importFrom rlang quo_name @@ -1009,7 +1009,7 @@ seurat_to_ligand_receptor_count = function(counts, .cell_group, assay, sample_fo subsetData() |> identifyOverExpressedGenes() |> identifyOverExpressedInteractions() |> - projectData(CellChat::PPI.human) + smoothData(CellChat::PPI.human) if(nrow(x@LR$LRsig)==0) return(NA) From 6d6132a39602c3eae5bba1013aa80138fa8c3d74 Mon Sep 17 00:00:00 2001 From: susansjy22 Date: Thu, 15 May 2025 13:43:57 +1000 Subject: [PATCH 132/145] change to use tar_quarto_raw(), and execute_param --- R/factories.R | 6 +++--- tests/testthat/test_single_functions.R | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/R/factories.R b/R/factories.R index bc78ebfb..45c40a28 100644 --- a/R/factories.R +++ b/R/factories.R @@ -166,11 +166,11 @@ hpc_internal_report = function( if(tiers |> is.null() || tiers |> length() < 2){ - tar_render_raw( + tar_quarto_raw( name = target_output |> as.character(), path = rmd_path, output_file = output_file, - render_arguments = render_arguments, + execute_params = render_arguments, # This is in case I am not tiering (e.g. DE analyses) but I need to map # pattern = build_pattern(other_arguments_to_map = other_arguments_to_map), @@ -192,7 +192,7 @@ hpc_internal_report = function( map2(tiers, names(tiers), ~ { - tar_render_raw( + tar_quarto_raw( name = glue("{target_output}_{.y}") |> diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 299364c0..be7ebaa1 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -704,6 +704,7 @@ input_hpc |> "subsets_Ribo_percent", "G2M.Score" )) |> + hpc_report( "empty_report", rmd_path = system.file("rmd", "Empty_droptlet_report.qmd", package = "HPCell"), @@ -711,7 +712,8 @@ input_hpc |> data_object = "data_object" |> is_target(), alive_tbl = "alive_tbl" |> is_target(), sample_name = "sample_names" |> is_target() - ) |> + ) +# |> hpc_report( "doublet_report", rmd_path = system.file("rmd", "Doublet_identification_report.qmd", package = "HPCell"), From 0b88e97cf920eb7521e1100a5437adb006f09f6d Mon Sep 17 00:00:00 2001 From: myushen Date: Tue, 10 Jun 2025 09:56:28 +1000 Subject: [PATCH 133/145] universal cell type unified function, empty droplet percentage for rhasopdy tech --- R/cell_type_curated_constructor.R | 110 ++++++++++++++++++++-------- R/functions.R | 45 +++++++----- R/modules_grammar_hpc.R | 8 +- R/utilities.R | 4 +- man/cell_type_ensembl_harmonised.Rd | 9 ++- man/empty_droplet_threshold.Rd | 16 ++-- 6 files changed, 126 insertions(+), 66 deletions(-) diff --git a/R/cell_type_curated_constructor.R b/R/cell_type_curated_constructor.R index 63a88df6..16a1afaa 100644 --- a/R/cell_type_curated_constructor.R +++ b/R/cell_type_curated_constructor.R @@ -1,9 +1,10 @@ # Define the generic function #' @export celltype_consensus_constructor <- function(input_hpc, - target_input = "sce_transformed", + target_input = "data_object", target_output = "cell_type_concensus_tbl", target_annotation = "annotation_tbl", + annotation_unified_names = c("azimuth", "blueprint", "monaco", "cellxgene"), celltype_unification_list = NULL, nonimmune_cellxgene = NULL, ...) { @@ -14,9 +15,10 @@ celltype_consensus_constructor <- function(input_hpc, #' #' @export celltype_consensus_constructor.HPCell <- function(input_hpc, - target_input = "sce_transformed", + target_input = "data_object", target_output = "cell_type_concensus_tbl", target_annotation = "annotation_tbl", + annotation_unified_names = c("azimuth", "blueprint", "monaco", "cellxgene"), ...) { input_hpc |> @@ -26,6 +28,7 @@ celltype_consensus_constructor.HPCell <- function(input_hpc, user_function = cell_type_ensembl_harmonised |> quote(), input_read_RNA_assay = target_input |> is_target(), annotation_label_transfer_tbl = target_annotation |> is_target(), + available_maps = annotation_unified_names, ... ) } @@ -37,14 +40,16 @@ celltype_consensus_constructor.HPCell <- function(input_hpc, #' It uses a combination of transferred annotations and predefined maps to #' produce a consensus on cell type identities. #' -#' @param input_read_RNA_assay A `SummarizedExperiment` object. +#' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. #' @param annotation_label_transfer_tbl A tibble with annotation label transfer data. #' @param celltype_unification_maps A list containing mapping data frames for different sources #' (e.g., Azimuth, Blueprint, Monaco, and cellxgene). Default is `NULL`. #' If `NULL`, it retrieves default maps stored in HPCell. #' @param nonimmune A character vector specifying non-immune cell types. #' Default is `NULL`. If `NULL`, it retrieves default non-immune types from HPCell. -#' +#' @param available_maps A character vector of cell type annotation sources to include in the ensemble annotation process. +#' Supported values include `"azimuth"`, `"blueprint"`, `"monaco"`, and `"cellxgene"`. +#' By default, it uses all of the annotations. #' @return A tibble of the input SummarizedExperiment metadata enriched with unified cell type annotations #' and additional classification details. #' @@ -56,7 +61,9 @@ celltype_consensus_constructor.HPCell <- function(input_hpc, cell_type_ensembl_harmonised <- function(input_read_RNA_assay, annotation_label_transfer_tbl = NULL, celltype_unification_maps = NULL, - nonimmune = NULL) { + nonimmune = NULL, + available_maps = c("azimuth", "blueprint", "monaco", "cellxgene") + ) { # Handle missing input if (input_read_RNA_assay |> is.null()) return(NULL) @@ -79,13 +86,27 @@ cell_type_ensembl_harmonised <- function(input_read_RNA_assay, } }, silent = TRUE) - # Rename and unnest annotation_tbl - input_read_RNA_assay <- input_read_RNA_assay |> SummarizedExperiment::colData() |> as.data.frame() |> - rownames_to_column(var = ".cell") |> - dplyr::rename( - blueprint_first_labels_fine = blueprint_first.labels.fine, - monaco_first_labels_fine = monaco_first.labels.fine - ) + # Get metadata + if (inherits(input_read_RNA_assay, "Seurat")) { + input_read_RNA_assay <- input_read_RNA_assay[[]] |> as.data.frame() |> + rownames_to_column(var = ".cell") |> + dplyr::rename( + blueprint_first_labels_fine = blueprint_first.labels.fine, + blueprint_first_labels_coarse = blueprint_first.labels.coarse, + monaco_first_labels_fine = monaco_first.labels.fine, + monaco_first_labels_coarse = monaco_first.labels.coarse + ) + } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { + # Rename and unnest annotation_tbl + input_read_RNA_assay <- input_read_RNA_assay |> SummarizedExperiment::colData() |> as.data.frame() |> + rownames_to_column(var = ".cell") |> + dplyr::rename( + blueprint_first_labels_fine = blueprint_first.labels.fine, + blueprint_first_labels_coarse = blueprint_first.labels.coarse, + monaco_first_labels_fine = monaco_first.labels.fine, + monaco_first_labels_coarse = monaco_first.labels.coarse + ) + } # Sometimes, sce does not have azimuth annotation input_read_RNA_assay <- input_read_RNA_assay |> @@ -93,41 +114,66 @@ cell_type_ensembl_harmonised <- function(input_read_RNA_assay, NA, azimuth_predicted.celltype.l2)) |> unnest(blueprint_scores_fine) |> - select(.cell, observation_joinid, - observation_originalid, - donor_id, dataset_id, sample_id, cell_type, - blueprint_first_labels_fine, monaco_first_labels_fine, any_of("azimuth_predicted_celltype_l2"), monaco_scores_fine, contains("macro"), contains("CD4") ) |> + select(.cell, any_of(c("observation_joinid", "observation_originalid", + "donor_id", "dataset_id", "sample_id", "cell_type")), + blueprint_first_labels_fine, monaco_first_labels_fine, + blueprint_first_labels_coarse, monaco_first_labels_coarse, + any_of("azimuth_predicted_celltype_l2"), monaco_scores_fine, contains("macro"), contains("CD4") ) |> unnest(monaco_scores_fine) |> - select(.cell, observation_joinid, - observation_originalid, - donor_id, dataset_id, sample_id, cell_type, - blueprint_first_labels_fine, monaco_first_labels_fine, any_of("azimuth_predicted_celltype_l2"), contains("macro") , contains("CD4"), contains("helper"), contains("Th")) + select(.cell, any_of(c("observation_joinid", "observation_originalid", + "donor_id", "dataset_id", "sample_id", "cell_type")), + blueprint_first_labels_fine, monaco_first_labels_fine, + blueprint_first_labels_coarse, monaco_first_labels_coarse, + any_of("azimuth_predicted_celltype_l2"), contains("macro") , contains("CD4"), contains("helper"), contains("Th")) + + + # If cellxgene is available, calculate ensemble annotations accordingly + has_cellxgene <- "cellxgene" %in% available_maps + + # Set method weights depending on availability of cellxgene + if (has_cellxgene) { + method_weights <- c(1, 1, 1, 2) + } else { + method_weights <- c(1, 1, 1, 0) # 0 weight for missing cellxgene + } # Unify cell types input_read_RNA_assay <- input_read_RNA_assay |> left_join(celltype_unification_maps$azimuth, copy = TRUE) |> left_join(celltype_unification_maps$blueprint, copy = TRUE) |> left_join(celltype_unification_maps$monaco, copy = TRUE) |> - left_join(celltype_unification_maps$cellxgene, copy = TRUE) |> - mutate(ensemble_joinid = paste(azimuth, blueprint, monaco, cell_type_unified, sep = "_")) + mutate(ensemble_joinid = paste(azimuth, blueprint, monaco, sep = "_")) + + # Conditionally join cellxgene only if it exists + if ("cellxgene" %in% available_maps) input_read_RNA_assay <- input_read_RNA_assay |> + left_join(celltype_unification_maps$cellxgene, copy = TRUE) |> + mutate(ensemble_joinid = paste(ensemble_joinid, cell_type_unified, sep = "_")) # Produce the ensemble map df_map <- input_read_RNA_assay |> - dplyr::count(ensemble_joinid, azimuth, blueprint, monaco, cell_type_unified, name = "NCells") |> + dplyr::count(across(all_of(c("azimuth", "blueprint", "monaco", "cell_type_unified", "ensemble_joinid"))), name = "NCells") |> as_tibble() |> - mutate( - cellxgene = if_else(cell_type_unified %in% nonimmune_cellxgene, "non immune", - cell_type_unified), + mutate(cellxgene = if (has_cellxgene) { + if_else(cell_type_unified %in% nonimmune_cellxgene, "non immune", + cell_type_unified) + } else {NA_character_}, data_driven_ensemble = ensemble_annotation(cbind(azimuth, blueprint, monaco), override_celltype = c("non immune", "nkt", "mast")), cell_type_unified_ensemble = ensemble_annotation(cbind(azimuth, blueprint, monaco, cellxgene), - method_weights = c(1, 1, 1, 2), + method_weights = method_weights, override_celltype = c("non immune", "nkt", "mast")), - cell_type_unified_ensemble = case_when( - cell_type_unified_ensemble == "non immune" & cellxgene == "non immune" ~ cell_type_unified, - cell_type_unified_ensemble == "non immune" & cellxgene != "non immune" ~ "other", - TRUE ~ cell_type_unified_ensemble - ), + cell_type_unified_ensemble = if (has_cellxgene) { + case_when( + cell_type_unified_ensemble == "non immune" & cellxgene == "non immune" ~ cell_type_unified, + cell_type_unified_ensemble == "non immune" & cellxgene != "non immune" ~ "other", + TRUE ~ cell_type_unified_ensemble + ) + } else { + case_when( + cell_type_unified_ensemble == "non immune" ~ "other", + TRUE ~ cell_type_unified_ensemble + ) + }, is_immune = !cell_type_unified_ensemble %in% nonimmune ) |> select( diff --git a/R/functions.R b/R/functions.R index 822e2af1..c56afefe 100644 --- a/R/functions.R +++ b/R/functions.R @@ -185,16 +185,18 @@ empty_droplet_id <- function(input_read_RNA_assay, #' Identify Empty Droplets in Single-Cell RNA-seq Data #' #' @description -#' `empty_droplet_threshold` distinguishes between empty and non-empty droplets by threshold. -#' It excludes mitochondrial and ribosomal genes, and filters input data -#' based on defined values of `nCount_RNA` and `nFeature_RNA` -#' The function returns a tibble containing RNA count, RNA feature count indicating whether cells are empty droplets. +#' `empty_droplet_threshold` identifies empty droplets by applying a gene expression threshold per sample. +#' It excludes mitochondrial and ribosomal genes, and classifies droplets as empty if +#' the number of expressed genes falls below the specified threshold. +#' +#' The function returns a tibble containing the number of expressed genes, +#' total RNA count for each cell, and a logical annotation indicating whether the droplet was classified as empty. #' #' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. #' @param filter_empty_droplets Logical value indicating whether to filter the input data. -#' @param RNA_feature_threshold An optional integer for the number of feature count. Default is 200 +#' @param RNA_feature_threshold An optional integer for the number of feature expressed in a sample. #' -#' @return A tibble with columns: Cell, nFeature_RNA, empty_droplet (classification of droplets). +#' @return A tibble with columns: Cell, nFeature_expressed_in_sample, nCount_RNA, empty_droplet (classification of droplets). #' #' @importFrom AnnotationDbi mapIds #' @importFrom stringr str_subset @@ -210,7 +212,7 @@ empty_droplet_threshold<- function(input_read_RNA_assay, total_RNA_count_check = -Inf, assay = NULL, feature_nomenclature, - RNA_feature_threshold = 200){ + RNA_feature_threshold = NULL){ if(input_read_RNA_assay |> is.null()) return(NULL) if(ncol(input_read_RNA_assay) == 0) return(NULL) @@ -221,12 +223,12 @@ empty_droplet_threshold<- function(input_read_RNA_assay, # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - # Check if empty droplets have been identified - nFeature_name <- paste0("nFeature_", assay) + significance_threshold = 0.001 - filter_empty_droplets <- "TRUE" + # Rule of thumb threshold + expressed_genes_threshold = 0.025 + if (is.null(RNA_feature_threshold)) RNA_feature_threshold = min(floor(dim(input_read_RNA_assay)[1]*expressed_genes_threshold), 500) - significance_threshold = 0.001 # Genes to exclude if (feature_nomenclature == "symbol") { location <- mapIds( @@ -258,10 +260,13 @@ empty_droplet_threshold<- function(input_read_RNA_assay, } filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] - # filter based on nCount_RNA and nFeature_RNA - result <- colSums(filtered_counts > 0 ) |> enframe(name = ".cell", value = "nFeature_RNA") |> - #left_join(colSums(filtered_counts) |> enframe(name = ".cell", value = "nCount_RNA"), by = ".cell") |> - mutate(empty_droplet = nFeature_RNA < RNA_feature_threshold) + # Generate library size for each cell + library_size <- colSums(filtered_counts) |> enframe(name = ".cell", value = "nCount_RNA") + + # filter based on number of expressed genes + result <- colSums(filtered_counts > 0 ) |> enframe(name = ".cell", value = "nFeature_expressed_in_sample") |> + left_join(library_size, by = ".cell") |> + mutate(empty_droplet = nFeature_expressed_in_sample < RNA_feature_threshold) # # Discard samples with nFeature_RNA density mode < threshold, avoid potential downstream error # density_est = result |> pull(nFeature_RNA) |> density() @@ -349,13 +354,12 @@ annotation_label_transfer <- function(input_read_RNA_assay, # SingleR if (inherits(input_read_RNA_assay, "Seurat")) { - sce = + input_read_RNA_assay = input_read_RNA_assay |> as.SingleCellExperiment() |> - logNormCounts(assay.type = assay) + logNormCounts() } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")){ - sce = - # Filter empty + input_read_RNA_assay = input_read_RNA_assay|> logNormCounts(assay.type = assay) } @@ -466,6 +470,8 @@ annotation_label_transfer <- function(input_read_RNA_assay, # Convert SCE to SE to calculate SCT if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { + assay = input_read_RNA_assay@assays |> names() |> extract2(1) + assay(input_read_RNA_assay, assay) <- assay(input_read_RNA_assay, assay) |> as("dgCMatrix") @@ -2049,7 +2055,6 @@ map_add_dispersion_to_se = function(se_df, .col, abundance = NULL){ } - #' Test Differential Abundance in SummarizedExperiment Object #' #' @description diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index ea22de73..558dd47a 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -340,12 +340,14 @@ remove_doublets_scDblFinder.HPCell = function( # Define the generic function #' @export -annotate_cell_type <- function(input_hpc, azimuth_reference = NULL, target_input = "data_object", target_output = "annotation_tbl",...) { +annotate_cell_type <- function(input_hpc, azimuth_reference = NULL, target_input = "data_object", + target_output = "annotation_tbl", target_empty_droplets = "empty_tbl", ...) { UseMethod("annotate_cell_type") } #' @export -annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL, target_input = "data_object", target_output = "annotation_tbl", ...) { +annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL, target_input = "data_object", + target_output = "annotation_tbl", target_empty_droplets = "empty_tbl", ...) { input_hpc |> @@ -354,7 +356,7 @@ annotate_cell_type.HPCell = function(input_hpc, azimuth_reference = NULL, target target_output = target_output, user_function = annotation_label_transfer |> quote() , input_read_RNA_assay = target_input |> is_target(), - empty_droplets_tbl = "empty_tbl" |> is_target() , + empty_droplets_tbl = target_empty_droplets |> safe_as_name() , reference_azimuth = azimuth_reference, feature_nomenclature = "gene_nomenclature" |> is_target() ) diff --git a/R/utilities.R b/R/utilities.R index 680e2753..6194e1ae 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -2945,14 +2945,14 @@ check_if_assay_minimum_count_is_zero_and_correct_TEMPORARY <- function(input_rea } else if (inherits(input_read_RNA_assay, "Seurat")) { # For Seurat - assay_data <- GetAssayData(input_read_RNA_assay, assay = assay_name, slot = "data") + assay_data <- GetAssayData(input_read_RNA_assay, assay = assay_name) my_min = min(assay_data) # Check if all values are > 0 if (my_min > 0) { # Subtract 1 from each value - input_read_RNA_assay <- SetAssayData(input_read_RNA_assay, assay = assay_name, slot = "data", + input_read_RNA_assay <- SetAssayData(input_read_RNA_assay, assay = assay_name, new.data = assay_data - my_min) } else { message("Not all values are greater than 0. No subtraction performed.") diff --git a/man/cell_type_ensembl_harmonised.Rd b/man/cell_type_ensembl_harmonised.Rd index e5d54541..0cc93d61 100644 --- a/man/cell_type_ensembl_harmonised.Rd +++ b/man/cell_type_ensembl_harmonised.Rd @@ -8,11 +8,12 @@ cell_type_ensembl_harmonised( input_read_RNA_assay, annotation_label_transfer_tbl = NULL, celltype_unification_maps = NULL, - nonimmune = NULL + nonimmune = NULL, + available_maps = c("azimuth", "blueprint", "monaco", "cellxgene") ) } \arguments{ -\item{input_read_RNA_assay}{A \code{SummarizedExperiment} object.} +\item{input_read_RNA_assay}{SingleCellExperiment or Seurat object containing RNA assay data.} \item{annotation_label_transfer_tbl}{A tibble with annotation label transfer data.} @@ -22,6 +23,10 @@ If \code{NULL}, it retrieves default maps stored in HPCell.} \item{nonimmune}{A character vector specifying non-immune cell types. Default is \code{NULL}. If \code{NULL}, it retrieves default non-immune types from HPCell.} + +\item{available_maps}{A character vector of cell type annotation sources to include in the ensemble annotation process. +Supported values include \code{"azimuth"}, \code{"blueprint"}, \code{"monaco"}, and \code{"cellxgene"}. +By default, it uses all of the annotations.} } \value{ A tibble of the input SummarizedExperiment metadata enriched with unified cell type annotations diff --git a/man/empty_droplet_threshold.Rd b/man/empty_droplet_threshold.Rd index bbd45098..a059d709 100644 --- a/man/empty_droplet_threshold.Rd +++ b/man/empty_droplet_threshold.Rd @@ -9,22 +9,24 @@ empty_droplet_threshold( total_RNA_count_check = -Inf, assay = NULL, feature_nomenclature, - RNA_feature_threshold = 200 + RNA_feature_threshold = NULL ) } \arguments{ \item{input_read_RNA_assay}{SingleCellExperiment or Seurat object containing RNA assay data.} -\item{RNA_feature_threshold}{An optional integer for the number of feature count. Default is 200} +\item{RNA_feature_threshold}{An optional integer for the number of feature expressed in a sample.} \item{filter_empty_droplets}{Logical value indicating whether to filter the input data.} } \value{ -A tibble with columns: Cell, nFeature_RNA, empty_droplet (classification of droplets). +A tibble with columns: Cell, nFeature_expressed_in_sample, nCount_RNA, empty_droplet (classification of droplets). } \description{ -\code{empty_droplet_threshold} distinguishes between empty and non-empty droplets by threshold. -It excludes mitochondrial and ribosomal genes, and filters input data -based on defined values of \code{nCount_RNA} and \code{nFeature_RNA} -The function returns a tibble containing RNA count, RNA feature count indicating whether cells are empty droplets. +\code{empty_droplet_threshold} identifies empty droplets by applying a gene expression threshold per sample. +It excludes mitochondrial and ribosomal genes, and classifies droplets as empty if +the number of expressed genes falls below the specified threshold. + +The function returns a tibble containing the number of expressed genes, +total RNA count for each cell, and a logical annotation indicating whether the droplet was classified as empty. } From 969b460eb27db8afeb787cabf85f2d523e67719f Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 12 Jun 2025 16:40:42 +1000 Subject: [PATCH 134/145] adjust knn, npc for small number of cells in a sample --- R/functions.R | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/R/functions.R b/R/functions.R index 808a95bc..82e63a8e 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1121,6 +1121,12 @@ preprocess_SCimplify <- function(input_read_RNA_assay, # Your code for non_batch_variation_removal function here class_input = input_read_RNA_assay |> class() + # For small number of cells + if (ncol(input_read_RNA_assay) < 10) { + k.knn = ncol(input_read_RNA_assay) - 1 + n.pc = ncol(input_read_RNA_assay) - 1 + } + # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> magrittr::extract2(1) @@ -1238,7 +1244,7 @@ preprocess_SCimplify <- function(input_read_RNA_assay, stats::prcomp(normalized_rna.for.pca, rank. = max(n.pc), scale. = FALSE, center = FALSE) }, error = function(e) { # Print error message - cat("Error in PCA computation: ", e$message, "\nUpdating data and retrying...\n") + cat("Error in PCA computation: ", e$message, "\nExcluding zero variance and retrying...\n") # Update normalized_rna.for.pca to exclude columns with zero variance normalized_rna.for.pca <- normalized_rna.for.pca[, apply(normalized_rna.for.pca, 2, var) != 0] From ab0e6d792463ba6060452e5e36db53f516f96547 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 16 Jun 2025 13:29:15 +1000 Subject: [PATCH 135/145] redesign metacell for little sample cells. marks less than 3 single cells in a sample to metacell_2 = 1 --- R/functions.R | 31 +++++++++++++------ man/calculate_gamma.Rd | 2 +- ...ate_metacell_for_a_sample_per_cell_type.Rd | 2 +- ...cell_type_calculate_metacell_membership.Rd | 2 +- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/R/functions.R b/R/functions.R index c56afefe..1b39d2a9 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1127,6 +1127,12 @@ preprocess_SCimplify <- function(input_read_RNA_assay, # Your code for non_batch_variation_removal function here class_input = input_read_RNA_assay |> class() + # For small number of cells + if (ncol(input_read_RNA_assay) < 10) { + k.knn = ncol(input_read_RNA_assay) - 1 + n.pc = ncol(input_read_RNA_assay) - 1 + } + # Get assay if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> magrittr::extract2(1) @@ -1244,7 +1250,7 @@ preprocess_SCimplify <- function(input_read_RNA_assay, stats::prcomp(normalized_rna.for.pca, rank. = max(n.pc), scale. = FALSE, center = FALSE) }, error = function(e) { # Print error message - cat("Error in PCA computation: ", e$message, "\nUpdating data and retrying...\n") + cat("Error in PCA computation: ", e$message, "\nExcluding zero variance and retrying...\n") # Update normalized_rna.for.pca to exclude columns with zero variance normalized_rna.for.pca <- normalized_rna.for.pca[, apply(normalized_rna.for.pca, 2, var) != 0] @@ -1515,7 +1521,7 @@ postprocess_SCimplify <- function(preprocessed, #' @param cell_count Integer, the total number of cells. #' @param min_cells_per_metacell Integer, the minimum number of cells allowed per metacell. Defaults to 30. #' @return An Integer vector of viable gamma values. If no viable gamma values are found, returns 0. -calculate_gamma <- function(cell_count, min_cells_per_metacell = 30) { +calculate_gamma <- function(cell_count, min_cells_per_metacell = 1) { gamma = 2 gamma_values <- integer() while (cell_count / gamma >= min_cells_per_metacell) { @@ -1544,7 +1550,7 @@ calculate_gamma <- function(cell_count, min_cells_per_metacell = 30) { #' # Assume 'sce' is a SingleCellExperiment object with a cell type #' calculate_metacell(sce) calculate_metacell_for_a_sample_per_cell_type <- function(sample_sce, - min_cells_per_metacell) { + min_cells_per_metacell = 1) { # Preprocess the single-cell data preprocessed_sce = sample_sce |> preprocess_SCimplify() @@ -1583,7 +1589,7 @@ split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, alive_identification_tbl = NULL, doublet_identification_tbl = NULL, x="cell_type", - min_cells_per_metacell = 30) { + min_cells_per_metacell = NULL) { if (sample_sce |> is.null()) return(NULL) @@ -1619,15 +1625,20 @@ split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, # In rare cases, all cells in a sample are from empty droplets or dead or doublets if (ncol(sample_sce) == 0) return(NULL) - # In rare cases, only one cell in a sample is left - if (ncol(sample_sce) == 1) sample_sce = sample_sce |> duplicate_single_column_assay() + # # In rare cases, only one cell in a sample is left + # if (ncol(sample_sce) == 1) sample_sce = sample_sce |> duplicate_single_column_assay() metacell_gamma_membership_tibble <- sample_sce |> left_join(cell_type_tbl) |> dplyr::group_split(!!sym(x)) |> - # By deault, calculate metacell only if sample cell_count >=60 as starting from gamma2. In this case, - # for sample cell_count less than 30 after splitting, it's not meaningful to construct metacell. - purrr::map( ~ if (ncol(.x) >= min_cells_per_metacell*2) { - calculate_metacell_for_a_sample_per_cell_type(.x, min_cells_per_metacell)} else return(NULL)) |> + # We need to include all good quality single cells in metacell. + # For those cells that cant be halved further, mark metacell_2 to 1 + purrr::map( ~ if (ncol(.x) <= 2) { + .x |> + SummarizedExperiment::colData() |> as.data.frame() |> tibble::rownames_to_column("cell") |> + select(cell) |> mutate(gamma2 = 1) |> as_tibble() + } else if (ncol(.x) >2) {~calculate_metacell_for_a_sample_per_cell_type(.x)}) |> + + # calculate_metacell_for_a_sample_per_cell_type(.x, min_cells_per_metacell)} else return(NULL)) |> bind_rows() metacell_gamma_membership_tibble diff --git a/man/calculate_gamma.Rd b/man/calculate_gamma.Rd index 51ccc54c..4c6dadb5 100644 --- a/man/calculate_gamma.Rd +++ b/man/calculate_gamma.Rd @@ -4,7 +4,7 @@ \alias{calculate_gamma} \title{Calculate Appropriate Gamma Values for Metacell Analysis} \usage{ -calculate_gamma(cell_count, min_cells_per_metacell = 30) +calculate_gamma(cell_count, min_cells_per_metacell = 1) } \arguments{ \item{cell_count}{Integer, the total number of cells.} diff --git a/man/calculate_metacell_for_a_sample_per_cell_type.Rd b/man/calculate_metacell_for_a_sample_per_cell_type.Rd index 4db494cb..363317bd 100644 --- a/man/calculate_metacell_for_a_sample_per_cell_type.Rd +++ b/man/calculate_metacell_for_a_sample_per_cell_type.Rd @@ -6,7 +6,7 @@ \usage{ calculate_metacell_for_a_sample_per_cell_type( sample_sce, - min_cells_per_metacell + min_cells_per_metacell = 1 ) } \arguments{ diff --git a/man/split_sample_cell_type_calculate_metacell_membership.Rd b/man/split_sample_cell_type_calculate_metacell_membership.Rd index 47836831..61eacf93 100644 --- a/man/split_sample_cell_type_calculate_metacell_membership.Rd +++ b/man/split_sample_cell_type_calculate_metacell_membership.Rd @@ -11,7 +11,7 @@ split_sample_cell_type_calculate_metacell_membership( alive_identification_tbl = NULL, doublet_identification_tbl = NULL, x = "cell_type", - min_cells_per_metacell = 30 + min_cells_per_metacell = NULL ) } \arguments{ From 1f3d4498ba0c8248db2ef9ded2bc2a92becdd0a3 Mon Sep 17 00:00:00 2001 From: myushen Date: Mon, 23 Jun 2025 15:54:17 +1000 Subject: [PATCH 136/145] add communication weights/strength --- NAMESPACE | 5 ++ R/functions.R | 95 +++++++++++++++----------- R/utilities.R | 43 ++++++++++++ man/cell_communication.Rd | 4 +- tests/testthat/test_single_functions.R | 9 ++- 5 files changed, 112 insertions(+), 44 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index ef157932..064d8c87 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -27,6 +27,7 @@ export(cell_type_ensembl_harmonised) export(celltype_consensus_constructor) export(clean_cellxgene_cell_types) export(cluster_metacell) +export(computeCommunProbPathway) export(compute_mode_delayedarray) export(convert_gene_names) export(create_pseudobulk) @@ -105,11 +106,15 @@ import(tidySummarizedExperiment) import(tidyseurat) importFrom(AnnotationDbi,mapIds) importFrom(Azimuth,RunAzimuth) +importFrom(CellChat,aggregateNet) importFrom(CellChat,computeCommunProb) importFrom(CellChat,createCellChat) importFrom(CellChat,filterCommunication) importFrom(CellChat,identifyOverExpressedGenes) importFrom(CellChat,identifyOverExpressedInteractions) +importFrom(CellChat,normalizeData) +importFrom(CellChat,setIdent) +importFrom(CellChat,smoothData) importFrom(CellChat,subsetCommunication) importFrom(CellChat,subsetDB) importFrom(CellChat,subsetData) diff --git a/R/functions.R b/R/functions.R index 82e63a8e..6b51c43a 100644 --- a/R/functions.R +++ b/R/functions.R @@ -2061,8 +2061,8 @@ map_add_dispersion_to_se = function(se_df, .col, abundance = NULL){ #' @param input_read_RNA_assay A SingleCellExperiment or Seurat object containing gene expression data #' @param empty_droplets_tbl Optional tibble identifying empty droplets to be filtered out #' @param alive_identification_tbl Optional tibble identifying dead cells to be filtered out -#' @param doublet_identification_tbl A tibble from doublet identification. -#' @param cell_type_tbl Optional tibble containing cell type information +#' @param doublet_identification_tbl Optional A tibble from doublet identification. +#' @param cell_type_tbl Optional A tibble containing cell, cell type, and sample_id information #' @param assay Character string specifying which assay to use #' @param cell_type_column Character string specifying the column name containing cell type annotations #' @param feature_nomenclature Character vector specifying gene in Symbol or Ensemble format @@ -2071,6 +2071,7 @@ map_add_dispersion_to_se = function(se_df, .col, abundance = NULL){ #' ligands/receptors #' @importFrom CellChat createCellChat subsetDB subsetData identifyOverExpressedGenes #' identifyOverExpressedInteractions computeCommunProb filterCommunication subsetCommunication +#' normalizeData smoothData aggregateNet setIdent #' @importFrom tibble as_tibble #' @importFrom dplyr filter mutate #' @export @@ -2084,12 +2085,8 @@ cell_communication <- function(input_read_RNA_assay, feature_nomenclature, ...){ - if (input_read_RNA_assay |> is.null()) return(NULL) - - # CellChat identifyOverExpressedGenes() would only support at least 2 groups - if (is.null(cell_type_tbl) || - (cell_type_tbl |> filter(!is.na(.data[[cell_type_column]])) |> - distinct(.data[[cell_type_column]]) |> pull() |> length() == 1)) return(NULL) + # Input should not be NULL + if (is.null(input_read_RNA_assay)) return(NULL) # Get assay if(is.null(assay)) my_assay = input_read_RNA_assay@assays |> names() |> magrittr::extract2(1) @@ -2115,7 +2112,7 @@ cell_communication <- function(input_read_RNA_assay, } # Avoid doublet - if (is.null(doublet_identification_tbl)) { + if (!is.null(doublet_identification_tbl)) { input_read_RNA_assay <- input_read_RNA_assay |> left_join(doublet_identification_tbl |> select(.cell, scDblFinder.class), by = ".cell") |> filter(scDblFinder.class!="doublet") @@ -2126,10 +2123,10 @@ cell_communication <- function(input_read_RNA_assay, cell_type_column %in% colnames(cell_type_tbl)) { input_read_RNA_assay <- input_read_RNA_assay |> left_join(cell_type_tbl) |> - select(everything(), !!cell_type_column) - } else if (!is.null(cell_type_tbl) && - !cell_type_column %in% colnames(cell_type_tbl)) - stop ("HPCell says: Your `cell_type_column` does not present in `cell_type_tbl` data") + select(everything(), !!cell_type_column) |> + filter(!is.na(.data[[cell_type_column]])) + } else if (!is.null(cell_type_tbl) && !cell_type_column %in% colnames(cell_type_tbl)) + stop ("HPCell says: Your `cell_type_column` does not present in `cell_type_tbl` data") # Note: CellChat only takes gene symbols as input, thus conversion step is required for ensemble IDs if (feature_nomenclature == "ensembl") { @@ -2141,34 +2138,51 @@ cell_communication <- function(input_read_RNA_assay, rownames(input_read_RNA_assay) = gene_map$gene_name } - # Remove NA cell_type - input_read_RNA_assay = input_read_RNA_assay |> filter(!is.na(.data[[cell_type_column]])) - # Construct cellchat object if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - cellchat = createCellChat(object = input_read_RNA_assay, group.by = cell_type_column, assay = my_assay) - } - else if (inherits(input_read_RNA_assay, "Seurat")){ - cellchat = createCellChat(object = input_read_RNA_assay, group.by = cell_type_column, assay = my_assay) + counts = input_read_RNA_assay |> assay(my_assay) + meta = input_read_RNA_assay |> colData() |> as.data.frame() |> mutate(samples = sample_id) + } else if (inherits(input_read_RNA_assay, "Seurat")){ + counts = GetAssayData(input_read_RNA_assay, assay = my_assay) + meta = input_read_RNA_assay[[]] |> mutate(samples = sample_id) } + if (meta |> nrow() == 0) return(NULL) + + # CellChat identifyOverExpressedGenes() would only support at least 2 groups + if (meta |> distinct(.data[[cell_type_column]]) |> pull() |> length() <= 1) return(NULL) + + CellChatDB <- CellChatDB.human - # Giving users option to choose the communication annotation - CellChatDB.use <- subsetDB(CellChatDB, key = "annotation", ...) + CellChatDB.use <- subsetDB(CellChatDB, search =c("Secreted Signaling","ECM-Receptor","Cell-Cell Contact"), key = c("annotation")) + + # CellChat Only Takes log-Normalized data + cellchat = counts |> + as("dgCMatrix") |> + normalizeData(do.log = TRUE) |> + createCellChat(group.by = cell_type_column, meta = meta, assay = my_assay) + cellchat@DB <- CellChatDB.use # Preprocessing - # subset the expression data of signaling genes for saving computation cost. By default, feature=NULL means subsetting the expression data of signaling genes in CellChatDB.use - cellchat <- subsetData(cellchat) # This step is necessary even if using the whole database - #future::plan("multisession", workers = 4) # do parallel - cellchat <- identifyOverExpressedGenes(cellchat) - cellchat <- identifyOverExpressedInteractions(cellchat) - - # Compute the communication probability and infer cellular communication network - cellchat <- computeCommunProb(cellchat, type = "triMean") + cellchat = cellchat |> + subsetData() |> + identifyOverExpressedGenes() |> + identifyOverExpressedInteractions() |> + smoothData(adj = CellChat::PPI.human) - # Filter the number of cells in each group are less than 10 - cellchat <- filterCommunication(cellchat, min.cells = 10) + # Return NULL when none of LR pairs are found + if (nrow(cellchat@LR$LRsig) == 0) return(NULL) + + cellchat = cellchat |> + + # Use projected data + computeCommunProb(raw.use = FALSE) |> + + # Filter the number of cells in each group are less than 10 + filterCommunication(min.cells = 10) |> + computeCommunProbPathway() |> + aggregateNet() gc() @@ -2176,7 +2190,7 @@ cell_communication <- function(input_read_RNA_assay, # By default, slot.name = "net" extracts the inferred communication at the level of ligands/receptors # Set slot.name = "netP" to access the the inferred communications at the level of signaling pathways # If all arguments are NULL, it returns a data frame consisting of all the inferred cell-cell communications - cell_communication_tbl <- tryCatch( + ligand_receptor_tbl <- tryCatch( subsetCommunication(cellchat), error = function(e) { message("Error in subsetCommunication(): ", e$message) @@ -2184,14 +2198,15 @@ cell_communication <- function(input_read_RNA_assay, } ) - if (!is.null(cell_communication_tbl)) { - cell_communication_tbl |> - mutate(sample_id = as.character(unique(cell_type_tbl$sample_id))) |> - # # In this case, we want to see the communication between the matched source and target cell types - # filter(source == target) |> - as_tibble() - } else {NULL} + cell_interaction_count = cellchat@net$count |> as_tibble(rownames = "source") |> + pivot_longer(-source, names_to = "target", values_to = "interaction_count") + + cell_interaction_weight = cellchat@net$weight |> as_tibble(rownames = "source") |> + pivot_longer(-source, names_to = "target", values_to = "interaction_weight") + ligand_receptor_tbl |> + mutate(sample_id = unique(cellchat@meta$sample_id)) |> + as_tibble() |> left_join(cell_interaction_count) |> left_join(cell_interaction_weight) } diff --git a/R/utilities.R b/R/utilities.R index 680e2753..ea23d91f 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -2978,3 +2978,46 @@ clean_sce_metadata <- function(sce) { sce <- sce |> select(where(~ any(!is.na(.)))) sce } + +#' @export +computeCommunProbPathway <- function(object = NULL, net = NULL, pairLR.use = NULL, thresh = 0.05) { + if (is.null(net)) { + net <- object@net + } + if (is.null(pairLR.use)) { + pairLR.use <- object@LR$LRsig + } + prob <- net$prob + prob[net$pval > thresh] <- 0 + + LR <- dimnames(prob)[[3]] + LR.sig <- LR[apply(prob, 3, sum) != 0] + + pathways <- unique(pairLR.use$pathway_name) + group <- factor(pairLR.use$pathway_name, levels = pathways) + + # STEFANO FIX + if(length(levels(group))==1){ + xx = apply(prob, c(1, 2), by, group, sum) + prob.pathways = xx |> array(dim = c(nrow(xx), ncol(xx), 1), dimnames = list(rownames(xx), colnames(xx), levels(group))) + } + else + prob.pathways <- aperm(apply(prob, c(1, 2), by, group, sum), + c(2, 3, 1)) + + pathways.sig <- pathways[apply(prob.pathways, 3, sum) != 0] + prob.pathways.sig <- prob.pathways[,,pathways.sig, drop = FALSE] + idx <- sort(apply(prob.pathways.sig, 3, sum), decreasing=TRUE, index.return = TRUE)$ix + pathways.sig <- pathways.sig[idx] + prob.pathways.sig <- prob.pathways.sig[, , idx] + + if (is.null(object)) { + netP = list(pathways = pathways.sig, prob = prob.pathways.sig) + return(netP) + } else { + object@net$LRs <- LR.sig + object@netP$pathways <- pathways.sig + object@netP$prob <- prob.pathways.sig + return(object) + } +} diff --git a/man/cell_communication.Rd b/man/cell_communication.Rd index af2c0f94..09a1208f 100644 --- a/man/cell_communication.Rd +++ b/man/cell_communication.Rd @@ -23,9 +23,9 @@ cell_communication( \item{alive_identification_tbl}{Optional tibble identifying dead cells to be filtered out} -\item{doublet_identification_tbl}{A tibble from doublet identification.} +\item{doublet_identification_tbl}{Optional A tibble from doublet identification.} -\item{cell_type_tbl}{Optional tibble containing cell type information} +\item{cell_type_tbl}{Optional A tibble containing cell, cell type, and sample_id information} \item{assay}{Character string specifying which assay to use} diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 2e3f5e67..ffc431de 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -81,9 +81,14 @@ metacell_tbl <- split_sample_cell_type_calculate_metacell_membership(input_seura # Define output from cell_communication cell_communication_tbl = HPCell:::cell_communication(input_seurat_abc, empty_droplets_tbl = NULL, - cell_type_tbl = NULL, + alive_identification_tbl = NULL, + doublet_identification_tbl = NULL, + cell_type_tbl = input_seurat_abc[[]] |> + rownames_to_column(var = ".cell") |> + as_tibble() |> mutate(sample_id = "sample1"), assay = NULL, - cell_type_column = "Cell_type_in_each_tissue") + cell_type_column = "Cell_type_in_each_tissue", + feature_nomenclature = "symbol") # empty_droplets_tbl = HPCell:::empty_droplet_id(input_seurat_list[[1]], filter_empty_droplets = TRUE) # From 959337db4bc27f0310de49a8a19309e0b1ba7a78 Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 25 Jun 2025 17:07:09 +1000 Subject: [PATCH 137/145] add pathway strength. remove thresh 0.05, return all communication, both insignificant and significant --- R/functions.R | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/R/functions.R b/R/functions.R index 6b51c43a..45aee870 100644 --- a/R/functions.R +++ b/R/functions.R @@ -2190,23 +2190,37 @@ cell_communication <- function(input_read_RNA_assay, # By default, slot.name = "net" extracts the inferred communication at the level of ligands/receptors # Set slot.name = "netP" to access the the inferred communications at the level of signaling pathways # If all arguments are NULL, it returns a data frame consisting of all the inferred cell-cell communications - ligand_receptor_tbl <- tryCatch( - subsetCommunication(cellchat), + lr_tbl <- tryCatch( + subsetCommunication(cellchat, slot.name = "net", thresh = NULL) |> + dplyr::rename(lr_prob = prob, + lr_pval = pval), error = function(e) { message("Error in subsetCommunication(): ", e$message) return(NULL) } ) + pathway_tbl <- tryCatch( + subsetCommunication(cellchat, slot.name = "netP", thresh = NULL) |> + dplyr::rename(pathway_prob = prob, + pathway_pval = pval), + error = function(e) { + message("Error in subsetCommunication(): ", e$message) + return(NULL) + } + ) + + cell_interaction_count = cellchat@net$count |> as_tibble(rownames = "source") |> pivot_longer(-source, names_to = "target", values_to = "interaction_count") cell_interaction_weight = cellchat@net$weight |> as_tibble(rownames = "source") |> pivot_longer(-source, names_to = "target", values_to = "interaction_weight") - ligand_receptor_tbl |> + result = lr_tbl |> left_join(pathway_tbl, by = c("source", "target", "pathway_name")) |> mutate(sample_id = unique(cellchat@meta$sample_id)) |> - as_tibble() |> left_join(cell_interaction_count) |> left_join(cell_interaction_weight) + left_join(cell_interaction_count) |> left_join(cell_interaction_weight) |> + as_tibble() } From e738b1aefaff00bf044ef467402d51b354e23f64 Mon Sep 17 00:00:00 2001 From: myushen Date: Thu, 26 Jun 2025 14:25:01 +1000 Subject: [PATCH 138/145] make feature_thresh as an input target in remove_empty_threshold module --- R/functions.R | 10 +++++----- R/modules_grammar_hpc.R | 18 +++++++++++++++--- man/empty_droplet_threshold.Rd | 2 +- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/R/functions.R b/R/functions.R index 1b39d2a9..c2827909 100644 --- a/R/functions.R +++ b/R/functions.R @@ -212,7 +212,7 @@ empty_droplet_threshold<- function(input_read_RNA_assay, total_RNA_count_check = -Inf, assay = NULL, feature_nomenclature, - RNA_feature_threshold = NULL){ + RNA_feature_threshold){ if(input_read_RNA_assay |> is.null()) return(NULL) if(ncol(input_read_RNA_assay) == 0) return(NULL) @@ -225,10 +225,10 @@ empty_droplet_threshold<- function(input_read_RNA_assay, significance_threshold = 0.001 - # Rule of thumb threshold - expressed_genes_threshold = 0.025 - if (is.null(RNA_feature_threshold)) RNA_feature_threshold = min(floor(dim(input_read_RNA_assay)[1]*expressed_genes_threshold), 500) - + # # Rule of thumb threshold + # expressed_genes_threshold = 0.025 + # if (is.null(RNA_feature_threshold)) RNA_feature_threshold = min(floor(dim(input_read_RNA_assay)[1]*expressed_genes_threshold), 500) + # # Genes to exclude if (feature_nomenclature == "symbol") { location <- mapIds( diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index 558dd47a..fc29d90a 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -209,7 +209,7 @@ remove_empty_DropletUtils.HPCell = function(input_hpc, total_RNA_count_check = N } #' @export -remove_empty_threshold <- function(input_hpc, RNA_feature_threshold = NULL, target_input = "data_object", target_output = "empty_tbl", ...) { +remove_empty_threshold <- function(input_hpc, RNA_feature_threshold = input_hpc$initialisation$input_hpc |> map(~200), target_input = "data_object", target_output = "empty_tbl", ...) { UseMethod("remove_empty_threshold") } @@ -228,14 +228,26 @@ remove_empty_threshold.Seurat = function(input_hpc, RNA_feature_threshold = NULL } #' @export -remove_empty_threshold.HPCell = function(input_hpc, RNA_feature_threshold = NULL, target_input = "data_object", target_output = "empty_tbl",...) { +remove_empty_threshold.HPCell = function(input_hpc, RNA_feature_threshold = input_hpc$initialisation$input_hpc |> map(~200), + target_input = "data_object", target_output = "empty_tbl",...) { + + RNA_feature_threshold |> saveRDS("RNA_feature_thresh.rds") input_hpc |> + + # Track the file + hpc_single("RNA_feature_thresh_file", "RNA_feature_thresh.rds", format = "file") |> + hpc_iterate( + target_output = "RNA_feature_thresh", + user_function = readRDS |> quote() , + file = "RNA_feature_thresh_file" |> is_target() + ) |> + hpc_iterate( target_output = target_output, user_function = empty_droplet_threshold |> quote() , input_read_RNA_assay = target_input |> is_target(), - RNA_feature_threshold = RNA_feature_threshold, + RNA_feature_threshold = "RNA_feature_thresh" |> is_target(), feature_nomenclature = "gene_nomenclature" |> is_target() ) diff --git a/man/empty_droplet_threshold.Rd b/man/empty_droplet_threshold.Rd index a059d709..2e2035e8 100644 --- a/man/empty_droplet_threshold.Rd +++ b/man/empty_droplet_threshold.Rd @@ -9,7 +9,7 @@ empty_droplet_threshold( total_RNA_count_check = -Inf, assay = NULL, feature_nomenclature, - RNA_feature_threshold = NULL + RNA_feature_threshold ) } \arguments{ From 540a2d952d9c0f847db8b87d7c01d31e15832ee0 Mon Sep 17 00:00:00 2001 From: myushen Date: Wed, 2 Jul 2025 16:11:04 +1000 Subject: [PATCH 139/145] fix and cellchat mouse option --- R/functions.R | 29 +++++++++++++++++------------ R/modules_grammar_hpc.R | 7 +++---- man/cell_communication.Rd | 3 +++ 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/R/functions.R b/R/functions.R index 38c0b345..0df12e8c 100644 --- a/R/functions.R +++ b/R/functions.R @@ -726,13 +726,13 @@ alive_identification <- function(input_read_RNA_assay, mitochondrion <- qc_metrics %>% - left_join(input_read_RNA_assay |> select(.cell, all_of(cell_type_column)), by = ".cell") + left_join(input_read_RNA_assay |> as_tibble() |> select(.cell, all_of(cell_type_column)), by = ".cell") ribosome = ribosome |> # Only retrieve metadata so nesting in the next step won't break - left_join(input_read_RNA_assay |> select(.cell, all_of(cell_type_column)), by = ".cell") |> as_tibble() + left_join(input_read_RNA_assay |> as_tibble() |> select(.cell, all_of(cell_type_column)), by = ".cell") |> as_tibble() } @@ -774,12 +774,11 @@ alive_identification <- function(input_read_RNA_assay, # Merge mitochondrion |> - left_join(ribosome, by=".cell") |> + left_join(ribosome) |> mutate(alive = !high_mitochondrion) |> # & !high_ribosome ) |> # Select informative columns - select(cell_type_unified_ensemble = cell_type_unified_ensemble.x, - .cell, contains("subsets"), contains("observation"), - donor_id, dataset_id, sample_id, contains("high"), alive) + select(.cell, {{cell_type_column}}, contains("subsets"), contains("observation"), + contains("high"), alive) } @@ -1636,7 +1635,7 @@ split_sample_cell_type_calculate_metacell_membership <- function(sample_sce, .x |> SummarizedExperiment::colData() |> as.data.frame() |> tibble::rownames_to_column("cell") |> select(cell) |> mutate(gamma2 = 1) |> as_tibble() - } else if (ncol(.x) >2) {~calculate_metacell_for_a_sample_per_cell_type(.x)}) |> + } else if (ncol(.x) >2) {calculate_metacell_for_a_sample_per_cell_type(.x)}) |> # calculate_metacell_for_a_sample_per_cell_type(.x, min_cells_per_metacell)} else return(NULL)) |> bind_rows() @@ -2077,6 +2076,7 @@ map_add_dispersion_to_se = function(se_df, .col, abundance = NULL){ #' @param assay Character string specifying which assay to use #' @param cell_type_column Character string specifying the column name containing cell type annotations #' @param feature_nomenclature Character vector specifying gene in Symbol or Ensemble format +#' @param reference_db The ligand-receptor interaction database curated in CellChat tool. Choose between human or mouse. #' @param ... Additional arguments passed to \code{CellChat::subsetDB} #' @return A CellChat tibble containing the inferred communication at the level of #' ligands/receptors @@ -2094,6 +2094,7 @@ cell_communication <- function(input_read_RNA_assay, assay = NULL, cell_type_column = NULL, feature_nomenclature, + reference_db = "human", ...){ # Input should not be NULL @@ -2151,10 +2152,10 @@ cell_communication <- function(input_read_RNA_assay, if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { counts = input_read_RNA_assay |> assay(my_assay) - meta = input_read_RNA_assay |> colData() |> as.data.frame() |> mutate(samples = sample_id) + meta = input_read_RNA_assay |> colData() |> as.data.frame() } else if (inherits(input_read_RNA_assay, "Seurat")){ counts = GetAssayData(input_read_RNA_assay, assay = my_assay) - meta = input_read_RNA_assay[[]] |> mutate(samples = sample_id) + meta = input_read_RNA_assay[[]] } if (meta |> nrow() == 0) return(NULL) @@ -2162,8 +2163,11 @@ cell_communication <- function(input_read_RNA_assay, # CellChat identifyOverExpressedGenes() would only support at least 2 groups if (meta |> distinct(.data[[cell_type_column]]) |> pull() |> length() <= 1) return(NULL) - - CellChatDB <- CellChatDB.human + # Choose cellchat reference + DB <- switch(reference_db, human = CellChat::CellChatDB.human, mouse = CellChat::CellChatDB.mouse) + projectionDB <- switch(reference_db, human = CellChat::PPI.human, mouse = CellChat::PPI.mouse) + + CellChatDB <- DB CellChatDB.use <- subsetDB(CellChatDB, search =c("Secreted Signaling","ECM-Receptor","Cell-Cell Contact"), key = c("annotation")) @@ -2180,7 +2184,7 @@ cell_communication <- function(input_read_RNA_assay, subsetData() |> identifyOverExpressedGenes() |> identifyOverExpressedInteractions() |> - smoothData(adj = CellChat::PPI.human) + smoothData(adj = projectionDB) # Return NULL when none of LR pairs are found if (nrow(cellchat@LR$LRsig) == 0) return(NULL) @@ -2221,6 +2225,7 @@ cell_communication <- function(input_read_RNA_assay, } ) + if (nrow(lr_tbl) == 0 || is.null(lr_tbl)) return(NULL) cell_interaction_count = cellchat@net$count |> as_tibble(rownames = "source") |> pivot_longer(-source, names_to = "target", values_to = "interaction_count") diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index fe222016..9add85d9 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -492,8 +492,7 @@ ligand_receptor_cellchat <- function( input_hpc, target_input = "data_object", target_output = "ligand_receptor_tbl", target_empty_droplets = "empty_tbl", target_alive_tbl = "alive_tbl", target_doublet_tbl = "doublet_tbl", target_cell_type = "cell_type_concensus_tbl", - group_by = "cell_type", ... -) { + species_db = "human", group_by = "cell_type", ...) { UseMethod("ligand_receptor_cellchat") } @@ -502,8 +501,7 @@ ligand_receptor_cellchat.HPCell = function( input_hpc, target_input = "data_object", target_output = "ligand_receptor_tbl", target_empty_droplets = "empty_tbl", target_alive_tbl = "alive_tbl", target_doublet_tbl = "doublet_tbl", target_cell_type = "cell_type_concensus_tbl", - group_by = "cell_type", ... -) { + species_db = "human", group_by = "cell_type", ...) { input_hpc |> hpc_iterate( @@ -516,6 +514,7 @@ ligand_receptor_cellchat.HPCell = function( cell_type_tbl = target_cell_type |> is_target(), cell_type_column = group_by, feature_nomenclature = "gene_nomenclature" |> is_target(), + reference_db = species_db, ... ) diff --git a/man/cell_communication.Rd b/man/cell_communication.Rd index 09a1208f..307c2262 100644 --- a/man/cell_communication.Rd +++ b/man/cell_communication.Rd @@ -13,6 +13,7 @@ cell_communication( assay = NULL, cell_type_column = NULL, feature_nomenclature, + reference_db = "human", ... ) } @@ -33,6 +34,8 @@ cell_communication( \item{feature_nomenclature}{Character vector specifying gene in Symbol or Ensemble format} +\item{reference_db}{The ligand-receptor interaction database curated in CellChat tool. Choose between human or mouse.} + \item{...}{Additional arguments passed to \code{CellChat::subsetDB}} } \value{ From c13d850c71177656ee0bac13cae9b91e21676e7e Mon Sep 17 00:00:00 2001 From: susansjy22 <138763933+susansjy22@users.noreply.github.com> Date: Wed, 13 Aug 2025 22:16:24 +1000 Subject: [PATCH 140/145] dummy --- inst/rmd/pseudobulk_analysis_report.qmd | 8 +- tests/testthat/test_single_functions.R | 97 ++++++++++++++++++++++--- 2 files changed, 92 insertions(+), 13 deletions(-) diff --git a/inst/rmd/pseudobulk_analysis_report.qmd b/inst/rmd/pseudobulk_analysis_report.qmd index 0c0cdcd3..55207001 100644 --- a/inst/rmd/pseudobulk_analysis_report.qmd +++ b/inst/rmd/pseudobulk_analysis_report.qmd @@ -59,7 +59,6 @@ library(magrittr) library(here) ``` - ```{r, include=FALSE} preprocessing_output <- function(input_read_RNA_assay, empty_droplets_tbl, @@ -120,7 +119,6 @@ preprocessing_output_S <- pmap( ) ``` - ```{r, include=FALSE} create_pseudobulk <- function(preprocessing_output_S, assays = NULL, sample_name){ #browser() @@ -239,8 +237,8 @@ data_for_pca <- ``` ## Global Sequencing Depth Density Plot -This density plot compares the distribution of library sizes across samples after TMM normalization. -This helps assess global sequencing-depth differences between samples before PCA is applied. + +This density plot compares the distribution of library sizes across samples after TMM normalization. This helps assess global sequencing-depth differences between samples before PCA is applied. ```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} @@ -282,6 +280,7 @@ num_components <- which(cum_var_explained >= 0.9)[1] ``` ## Scree Plot + This scree plot shows the proportion of variance explained by each principal component. Components contributing significantly to total variance are prioritized in interpretation of downstream analysis steps. ```{r, out.width='100%', fig.width=15, fig.height=10, warning=FALSE, message=FALSE, echo=FALSE} @@ -325,6 +324,7 @@ x ``` ## Cell Type Clustering via PCA + Samples are grouped based on PCA of their pseudobulk profiles. Color represents number of aggregated cells contributing to each pseudobulk profile. ```{r, out.width='100%', warning=FALSE, message=FALSE, echo=FALSE} diff --git a/tests/testthat/test_single_functions.R b/tests/testthat/test_single_functions.R index 299364c0..6b3ef707 100644 --- a/tests/testthat/test_single_functions.R +++ b/tests/testthat/test_single_functions.R @@ -739,14 +739,93 @@ input_hpc |> sample_name = "sample_names" |> is_target() ) -quarto::quarto_render( - input = "~/HPCell/Testing.qmd", - execute_params = list( - data_object = data_object, - empty_tbl = empty_tbl, - sample_name = sample_name - ), - output_file = "output.html" -) + + + + +library(HPCell) +library(targets) +library(Seurat) +library(SeuratData) +library(crew) +library(crew.cluster) + +file_paths <- file.path(getwd(), c("CTRL_seurat_tibble.rds", "STIM_seurat_tibble.rds")) +names(file_paths) <- c("CTRL", "STIM") + +# Install and prepare IFNB demo dataset +SeuratData::InstallData("ifnb") +ifnb <- ifnb |> UpdateSeuratObject() +ifnb.list <- SplitObject(ifnb, split.by = "stim") + +# Sample 300 cells per condition +set.seed(42) +ctrl_subset <- subset(ifnb.list$CTRL, cells = sample(Cells(ifnb.list$CTRL), size = 300)) +stim_subset <- subset(ifnb.list$STIM, cells = sample(Cells(ifnb.list$STIM), size = 300)) + +saveRDS(ctrl_subset, file_paths["CTRL"]) +saveRDS(stim_subset, file_paths["STIM"]) + +input_hpc <- file_paths + +input_hpc = + file_paths |> + magrittr::set_names(c("CTRL", "STIM")) + +input_hpc |> + initialise_hpc( + gene_nomenclature = "symbol", + data_container_type = "seurat_rds", + computing_resources = crew_controller_local(workers = 8), + ) |> + remove_empty_DropletUtils() |> # Remove empty outliers + remove_dead_scuttle() |> # Remove dead cells + score_cell_cycle_seurat() |> # Score cell cycle + remove_doublets_scDblFinder() |> # Remove doublets + annotate_cell_type() |> # Annotation across SingleR and Seurat Azimuth + normalise_abundance_seurat_SCT(factors_to_regress = c( + "subsets_Mito_percent", + "subsets_Ribo_percent", + "G2M.Score" + )) |> + hpc_report( + "empty_report", + rmd_path = system.file("rmd", "Empty_droptlet_report.qmd", package = "HPCell"), + empty_tbl = "empty_tbl" |> is_target(), + data_object = "data_object" |> is_target(), + alive_tbl = "alive_tbl" |> is_target(), + sample_name = "sample_names" |> is_target() + ) |> + hpc_report( + "doublet_report", + rmd_path = system.file("rmd", "Doublet_identification_report.qmd", package = "HPCell"), + data_object = "data_object" |> is_target(), + doublet_tbl = "doublet_tbl" |> is_target(), + annotation_tbl = "annotation_tbl" |> is_target(), + sample_names = "sample_names" |> is_target() + ) |> + hpc_report( + "Technical_variation_report", + rmd_path = system.file("rmd", "technical_variation_report.qmd", package = "HPCell"), + data_object = "data_object" |> is_target(), + empty_tbl = "empty_tbl" |> is_target(), + sample_name = "sample_names" |> is_target() + ) |> + hpc_report( + "pseudo_bulk_report", + rmd_path = system.file("rmd", "pseudobulk_analysis_report.qmd", package = "HPCell"), + data_object = "data_object" |> is_target(), + empty_tbl = "empty_tbl" |> is_target(), + alive_tbl = "alive_tbl" |> is_target(), + cell_cycle_tbl = "cell_cycle_tbl" |> is_target(), + annotation_tbl = "annotation_tbl" |> is_target(), + doublet_tbl = "doublet_tbl" |> is_target(), + sample_name = "sample_names" |> is_target() + ) + + + + + \ No newline at end of file From e552cc85e5fe0f0fbb461bb5bda3e72eff09b70f Mon Sep 17 00:00:00 2001 From: susansjy22 <138763933+susansjy22@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:14:57 +1000 Subject: [PATCH 141/145] Update Utilities --- R/utilities.R | 166 -------------------------------------------------- 1 file changed, 166 deletions(-) diff --git a/R/utilities.R b/R/utilities.R index 5abac6ab..c16998c7 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -172,171 +172,6 @@ convert_gene_names <- function(id, edb_df } -<<<<<<< HEAD -#' Identify Empty Droplets in Single-Cell RNA-seq Data -#' -#' @description -#' `empty_droplet_id` distinguishes between empty and non-empty droplets using the DropletUtils package. -#' It excludes mitochondrial and ribosomal genes, calculates barcode ranks, and optionally filters input data -#' based on these criteria. The function returns a tibble containing log probabilities, FDR, and a classification -#' indicating whether cells are empty droplets. -#' -#' @param input_read_RNA_assay SingleCellExperiment or Seurat object containing RNA assay data. -#' @param filter_empty_droplets Logical value indicating whether to filter the input data. -#' -#' @return A tibble with columns: logProb, FDR, empty_droplet (classification of droplets). -#' -#' @importFrom AnnotationDbi mapIds -#' @importFrom stringr str_subset -#' @importFrom dplyr left_join mutate -#' @importFrom tidyr replace_na -#' @importFrom DropletUtils emptyDrops barcodeRanks -#' @importFrom S4Vectors metadata -#' @importFrom EnsDb.Hsapiens.v86 EnsDb.Hsapiens.v86 -#' @importFrom biomaRt useMart getBM -#' -#' @export -empty_droplet_id <- function(input_read_RNA_assay, - total_RNA_count_check = -Inf, - assay = NULL, - gene_nomenclature = "symbol"){ - #Fix GChecks - FDR = NULL - .cell = NULL - - # Get assay - if(is.null(assay)) assay = input_read_RNA_assay@assays |> names() |> extract2(1) - - # Check if empty droplets have been identified - nFeature_name <- paste0("nFeature_", assay) - - #if (any(input_read_RNA_assay[[nFeature_name]] < total_RNA_count_check)) { - filter_empty_droplets <- "TRUE" - # } - # else { - # filter_empty_droplets <- "FALSE" - # } - - significance_threshold = 0.001 - RNA_feature_count_threshold = 200 - RNA_count_threshold = 100 - # Genes to exclude - if (gene_nomenclature == "symbol") { - location <- mapIds( - EnsDb.Hsapiens.v86, - keys=rownames(input_read_RNA_assay), - column="SEQNAME", - keytype="SYMBOL" - ) - mitochondrial_genes = which(location=="MT") |> names() - ribosome_genes = rownames(input_read_RNA_assay) |> str_subset("^RPS|^RPL") - - } else if (gene_nomenclature == "ensembl") { - # all_genes are saved in data/all_genes.rda to avoid recursively accessing biomaRt backend for potential timeout error - data(ensembl_genes_biomart) - all_mitochondrial_genes <- ensembl_genes_biomart[grep("MT", ensembl_genes_biomart$chromosome_name), ] - all_ribosome_genes <- ensembl_genes_biomart[grep("^(RPL|RPS)", ensembl_genes_biomart$external_gene_name), ] - - mitochondrial_genes <- all_mitochondrial_genes |> - filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) - ribosome_genes <- all_ribosome_genes |> - filter(ensembl_gene_id %in% rownames(input_read_RNA_assay)) |> pull(ensembl_gene_id) - } - - - # if ("originalexp" %in% names(input_file@assays)) { - # barcode_ranks <- barcodeRanks(input_file@assays$originalexp@counts[!rownames(input_file@assays$originalexp@counts) %in% c(mitochondrial_genes, ribosome_genes),, drop=FALSE]) - # } else if ("RNA" %in% names(input_file@assays)) { - # barcode_ranks <- barcodeRanks(input_file@assays$RNA@counts[!rownames(input_file@assays$RNA@counts) %in% c(mitochondrial_genes, ribosome_genes),, drop=FALSE]) - # } - - # Get counts - if (inherits(input_read_RNA_assay, "Seurat")) { - counts <- GetAssayData(input_read_RNA_assay, assay, slot = "counts") - } else if (inherits(input_read_RNA_assay, "SingleCellExperiment")) { - counts <- assay(input_read_RNA_assay, assay) - } - filtered_counts <- counts[!(rownames(counts) %in% c(mitochondrial_genes, ribosome_genes)),, drop=FALSE ] - - # filter based on RNA_count_threshold - filtered_counts <- filtered_counts[rowSums(filtered_counts) > RNA_count_threshold, ] - - # Calculate bar-codes ranks - barcode_ranks <- barcodeRanks(filtered_counts) - - # Set the minimum total RNA per cell for ambient RNA - if(min(barcode_ranks$total) < 100) { lower = 100 } else { - lower = quantile(barcode_ranks$total, 0.05) - - # write_lines( - # glue("{input_path} has supposely empty droplets with a lot of RNAm maybe a lot of ambient RNA? Please investigate"), - # file = glue("{dirname(output_path_result)}/warnings_emptyDrops.txt"), - # append = T - # ) - } - - # Remove genes from input - if ( - # If filter_empty_droplets - filter_empty_droplets == "TRUE") { - barcode_table <- filtered_counts |> - emptyDrops( test.ambient = TRUE, lower=lower) |> - as_tibble(rownames = ".cell") |> - mutate(empty_droplet = FDR >= significance_threshold) |> - replace_na(list(empty_droplet = TRUE)) - } - else { - barcode_table <- - input_read_RNA_assay |> - as_tibble() |> - select(.cell) |> - mutate( empty_droplet = FALSE) - } - - # barcode ranks - barcode_table <- barcode_table |> - left_join( - barcode_ranks |> - as_tibble(rownames = ".cell") |> - mutate( - knee = metadata(barcode_ranks)$knee, - inflection = metadata(barcode_ranks)$inflection - ) - ) - - - - # barcode_table |> saveRDS(output_path_result) - - # # Plot bar-codes ranks - # plot_barcode_ranks = - # barcode_table %>% - # ggplot2::ggplot(aes(rank, total)) + - # geom_point(aes(color = empty_droplet, size = empty_droplet )) + - # geom_line(aes(rank, fitted), color="purple") + - # geom_hline(aes(yintercept = knee), color="dodgerblue") + - # geom_hline(aes(yintercept = inflection), color="forestgreen") + - # scale_x_log10() + - # scale_y_log10() + - # scale_color_manual(values = c("black", "#e11f28")) + - # scale_size_discrete(range = c(0, 2)) + - # theme_bw() - - # plot_barcode_ranks |> saveRDS(output_path_plot_rds) - - # ggsave( - # output_path_plot_pdf, - # plot = plot_barcode_ranks, - # useDingbats=FALSE, - # units = c("mm"), - # width = 183/2 , - # height = 183/2, - # limitsize = FALSE - # ) - - barcode_table - # return(list(barcode_table, plot_barcode_ranks)) -======= #' Transform counts to continous data #' @param counts A SummarizedExperiment object #' @importFrom tidyr pivot_longer @@ -350,7 +185,6 @@ get_count_per_gene_df <- function(counts) { as_tibble() |> pivot_longer(!features, names_to = "cells", values_to = "counts") counts_tidy ->>>>>>> myushen/master } From 564e515a7b369f1e7f42dbef2d4a7a7d08e2f134 Mon Sep 17 00:00:00 2001 From: susansjy22 <138763933+susansjy22@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:44:46 +1000 Subject: [PATCH 142/145] Fix pseudobulk to save the output --- R/functions.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/functions.R b/R/functions.R index 596824f9..3cb72b01 100644 --- a/R/functions.R +++ b/R/functions.R @@ -1873,7 +1873,7 @@ create_pseudobulk <- function(input_read_RNA_assay, rowData(pseudobulk)$feature_name = rownames(pseudobulk) colData(pseudobulk)$pseudobulk_sample = colnames(pseudobulk) - pseudobulk |> + pseudobulk = pseudobulk |> pivot_longer(cols = assays, names_to = "data_source", values_to = "count") |> filter(!count |> is.na()) |> From efe6b618a9fa525585487cb13ea5889e2379e77f Mon Sep 17 00:00:00 2001 From: susansjy22 <138763933+susansjy22@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:45:30 +1000 Subject: [PATCH 143/145] Remove commented function --- R/modules_grammar_hpc.R | 43 ----------------------------------------- 1 file changed, 43 deletions(-) diff --git a/R/modules_grammar_hpc.R b/R/modules_grammar_hpc.R index e480338a..80fbe73e 100644 --- a/R/modules_grammar_hpc.R +++ b/R/modules_grammar_hpc.R @@ -546,49 +546,6 @@ get_single_cell.HPCell = function(input_hpc, target_input = "data_object", targe } -# Define the generic function - -# calc_UMAP_reports <- function(input_hpc, target_input = "data_object", target_output = "calc_UMAP_dbl_report", ...) { -# UseMethod("calc_UMAP_reports") -# } - - -# calc_UMAP_reports.HPCell = function(input_hpc, target_input = "data_object", target_output = "calc_UMAP_dbl_report", ...) { -# -# input_hpc |> -# hpc_iterate( -# target_output = target_output, -# user_function = calc_UMAP |> quote(), -# input_seurat = target_input |> is_target() -# ) -# -# } - -# calc_UMAP_reports.Seurat = function(input_hpc, target_input = "data_object", target_output = "calc_UMAP_dbl_report", ...){ -# -# # Capture all arguments including defaults -# args_list <- as.list(environment()) -# -# # Optionally, you can evaluate the arguments if they are expressions -# args_list <- lapply(args_list, eval, envir = parent.frame()) -# -# list(initialisation = list(input_hpc = input_hpc)) |> -# add_class("HPCell") |> -# calc_UMAP_reports() -# } - - -# target_chunk_undefined_calc_UMAP_reports = function(input_hpc){ -# -# input_hpc |> -# hpc_iterate( -# target_output = "calc_UMAP_dbl_report", -# packages = c("Seurat") -# ) - -# } - - #' Test Differential Abundance for HPCell #' From fba80b3f5f1d1023077874e685453de5bde9a22b Mon Sep 17 00:00:00 2001 From: susansjy22 <138763933+susansjy22@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:45:43 +1000 Subject: [PATCH 144/145] Remove commented function --- R/utilities.R | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/R/utilities.R b/R/utilities.R index c16998c7..5a92e5cd 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -793,21 +793,6 @@ calc_UMAP <- function(input_seurat) { return(x) } - -# calc_UMAP <- function(input_seurat){ -# assay_name = input_seurat@assays |> names() |> extract2(1) -# find_var_genes <- FindVariableFeatures(input_seurat) -# var_genes<- find_var_genes@assays[[assay_name]]@var.features -# -# x<- ScaleData(input_seurat) |> -# # Calculate UMAP of clusters -# RunPCA(features = var_genes) |> -# FindNeighbors(dims = 1:30) |> -# FindClusters(resolution = 0.5) |> -# RunUMAP(dims = 1:30, spread = 0.5,min.dist = 0.01, n.neighbors = 10L) |> -# as_tibble() -# return(x) -# } #' Subsetting input dataset into a list of SingleCellExperiment or Seurat objects by pre-specified sample column tissue #' #' @importFrom dplyr quo_name pull From daf6000be0ee12dc3c1702e44909f7ddcf5f0c89 Mon Sep 17 00:00:00 2001 From: susansjy22 <138763933+susansjy22@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:46:05 +1000 Subject: [PATCH 145/145] Add ensembl_genes_biomart.rda --- data/ensembl_genes_biomart.rda | Bin 0 -> 423500 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/ensembl_genes_biomart.rda diff --git a/data/ensembl_genes_biomart.rda b/data/ensembl_genes_biomart.rda new file mode 100644 index 0000000000000000000000000000000000000000..ff693893ccbde3efb8ff5ac8d0f218f41ed0918f GIT binary patch literal 423500 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
uxFK2NA(&LyMYGLBayODj_qcfh5rWygQ)?o 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