## ----style, echo = FALSE, results = 'asis'------------------------------------
BiocStyle::markdown()

## ----'install_dev', eval = FALSE----------------------------------------------
# if (!require("devtools")) install.packages("devtools")
# remotes::install_github("MicTott/SpotSweeper")

## ----'install', eval = FALSE--------------------------------------------------
# if (!requireNamespace("BiocManager", quietly = TRUE)) {
#     install.packages("BiocManager")
# }
# 
# BiocManager::install("SpotSweeper")

## ----example_spe--------------------------------------------------------------
library(SpotSweeper)

# load  Maynard et al DLPFC daatset
spe <- STexampleData::Visium_humanDLPFC()

# show column data before SpotSweeper
colnames(colData(spe))

# drop out-of-tissue spots
spe <- spe[, spe$in_tissue == 1]

## ----example_scuttle----------------------------------------------------------
# change from gene id to gene names
rownames(spe) <- rowData(spe)$gene_name

# identifying the mitochondrial transcripts
is.mito <- rownames(spe)[grepl("^MT-", rownames(spe))]

# calculating QC metrics for each spot using scuttle
spe <- scuttle::addPerCellQCMetrics(spe, subsets = list(Mito = is.mito))
colnames(colData(spe))

## ----example_local_outliers---------------------------------------------------
# library size
spe <- localOutliers(spe,
    metric = "sum",
    direction = "lower",
    log = TRUE
)

# unique genes
spe <- localOutliers(spe,
    metric = "detected",
    direction = "lower",
    log = TRUE
)

# mitochondrial percent
spe <- localOutliers(spe,
    metric = "subsets_Mito_percent",
    direction = "higher",
    log = FALSE
)

## ----example_combine_local_outliers-------------------------------------------
# combine all outliers into "local_outliers" column
spe$local_outliers <- as.logical(spe$sum_outliers) |
    as.logical(spe$detected_outliers) |
    as.logical(spe$subsets_Mito_percent_outliers)

## ----local_outlier_plot-------------------------------------------------------
library(escheR)
library(ggpubr)

# library size
p1 <- plotQC(spe,
    metric = "sum_log",
    outliers = "sum_outliers", point_size = 1.1
) +
    ggtitle("Library Size")

# unique genes
p2 <- plotQC(spe,
    metric = "detected_log",
    outliers = "detected_outliers", point_size = 1.1
) +
    ggtitle("Unique Genes")

# mitochondrial percent
p3 <- plotQC(spe,
    metric = "subsets_Mito_percent",
    outliers = "subsets_Mito_percent_outliers", point_size = 1.1
) +
    ggtitle("Mitochondrial Percent")

# all local outliers
p4 <- plotQC(spe,
    metric = "sum_log",
    outliers = "local_outliers", point_size = 1.1, stroke = 0.75
) +
    ggtitle("All Local Outliers")

# plot
plot_list <- list(p1, p2, p3, p4)
ggarrange(
    plotlist = plot_list,
    ncol = 2, nrow = 2,
    common.legend = FALSE
)

## ----example_artifactRemoval--------------------------------------------------
# load in DLPFC sample with hangnail artifact
data(DLPFC_artifact)
spe <- DLPFC_artifact

# inspect colData before artifact detection
colnames(colData(spe))

## ----artifact_QC_plots--------------------------------------------------------
# library size
p1 <- plotQC(spe,
    metric = "sum_umi",
    outliers = NULL, point_size = 1.1
) +
    ggtitle("Library Size")

# unique genes
p2 <- plotQC(spe,
    metric = "sum_gene",
    outliers = NULL, point_size = 1.1
) +
    ggtitle("Unique Genes")

# mitochondrial percent
p3 <- plotQC(spe,
    metric = "expr_chrM_ratio",
    outliers = NULL, point_size = 1.1
) +
    ggtitle("Mitochondrial Percent")

# plot
plot_list <- list(p1, p2, p3)
ggarrange(
    plotlist = plot_list,
    ncol = 3, nrow = 1,
    common.legend = FALSE
)

## ----artifact_plot------------------------------------------------------------
# find artifacts using SpotSweeper
spe <- findArtifacts(spe,
    mito_percent = "expr_chrM_ratio",
    mito_sum = "expr_chrM",
    n_rings = 5,
    name = "artifact"
)

# check that "artifact" is now in colData
colnames(colData(spe))

## ----artifact_visualization---------------------------------------------------
plotQC(spe,
    metric = "expr_chrM_ratio",
    outliers = "artifact", point_size = 1.1
) +
    ggtitle("Hangnail artifact")

## -----------------------------------------------------------------------------
utils::sessionInfo()