## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = FALSE
)

## ----message=FALSE, warning=FALSE---------------------------------------------
# Installation
# install.packages("devtools")
# devtools::install_github("SydneyBioX/wSIR")

library(wSIR) # package itself
library(magrittr) # for %>% 
library(ggplot2) # for ggplot
library(doBy) # for which.maxn
library(vctrs) # for vec_rep_each
library(umap) # for umap
library(class) # for example wSIR application
library(SpatialExperiment) # for creating SpatialExperiment object

## ----eval = FALSE-------------------------------------------------------------
# # Packages needed to download data
# #library(scran) # for logNormCounts
# #library(MouseGastrulationData) # to download the data for this vignette
# 
# set.seed(2024)
# 
# seqfish_data_sample1 <- LohoffSeqFISHData(samples = c(1,2))
# seqfish_data_sample1 <- logNormCounts(seqfish_data_sample1) # log transform variance stabilising
# rownames(seqfish_data_sample1) <- rowData(seqfish_data_sample1)[,"SYMBOL"] # change rownames to gene symbols that are consistent
# sample1_exprs <- t(assay(seqfish_data_sample1, "logcounts")) # extract matrix of gene expressions
# sample1_coords <- spatialCoords(seqfish_data_sample1)[,1:2] %>% as.data.frame()
# colnames(sample1_coords) <- c("x", "y")
# 
# seqfish_data_sample2 <- LohoffSeqFISHData(samples = c(3,4))
# seqfish_data_sample2 <- logNormCounts(seqfish_data_sample2)
# rownames(seqfish_data_sample2) <- rowData(seqfish_data_sample2)[,"SYMBOL"]
# sample2_exprs <- t(assay(seqfish_data_sample2, "logcounts"))
# sample2_coords <- spatialCoords(seqfish_data_sample2)[,1:2] %>% as.data.frame()
# colnames(sample2_coords) <- c("x", "y")
# 
# seqfish_data_sample3 <- LohoffSeqFISHData(samples = c(5,6))
# seqfish_data_sample3 <- logNormCounts(seqfish_data_sample3)
# rownames(seqfish_data_sample3) <- rowData(seqfish_data_sample3)[,"SYMBOL"]
# sample3_exprs <- t(assay(seqfish_data_sample3, "logcounts"))
# sample3_coords <- spatialCoords(seqfish_data_sample3)[,1:2] %>% as.data.frame()
# colnames(sample3_coords) <- c("x", "y")
# 
# keep1 <- sample(c(TRUE, FALSE), nrow(sample1_exprs), replace = TRUE, prob = c(0.2, 0.8))
# keep2 <- sample(c(TRUE, FALSE), nrow(sample2_exprs), replace = TRUE, prob = c(0.2, 0.8))
# keep3 <- sample(c(TRUE, FALSE), nrow(sample3_exprs), replace = TRUE, prob = c(0.2, 0.8))
# 
# sample1_exprs <- sample1_exprs[keep1,]
# sample1_coords <- sample1_coords[keep1,]
# sample2_exprs <- sample2_exprs[keep2,]
# sample2_coords <- sample2_coords[keep2,]
# sample3_exprs <- sample3_exprs[keep3,]
# sample3_coords <- sample3_coords[keep3,]
# 
# sample1_cell_types <- seqfish_data_sample1$celltype[keep1]
# sample2_cell_types <- seqfish_data_sample2$celltype[keep2]
# sample3_cell_types <- seqfish_data_sample3$celltype[keep3]
# 
# save(sample1_exprs, sample1_coords, sample1_cell_types,
#     sample2_exprs, sample2_coords, sample2_cell_types,
#     sample3_exprs, sample3_coords, sample3_cell_types,
#     file = "../data/MouseData.rda", compress = "xz")

## -----------------------------------------------------------------------------
data(MouseData)

## -----------------------------------------------------------------------------
a <- Sys.time()
optim_obj <- exploreWSIRParams(X = as.matrix(sample1_exprs),
                               coords = sample1_coords,
                               # optim_alpha = c(0,.5, 1,2,4,8),
                               # optim_slices = c(5,10,15),
                               optim_alpha = c(0, 4),
                               optim_slices = c(10, 15),
                               n_rep = 5,
                               metric = "DC")
Sys.time()-a
optim_obj$plot

## -----------------------------------------------------------------------------
wsir_obj <- wSIR(X = sample1_exprs, 
    coords = sample1_coords, 
    slices = 10,#optim_obj$best_slices, 
    alpha = 4,#optim_obj$best_alpha,
    optim_params = FALSE)

names(wsir_obj)

## -----------------------------------------------------------------------------
spe_object <- SpatialExperiment(
  assays = list(logcounts = t(sample1_exprs)),
  spatialCoords = as.matrix(sample1_coords)
)

spe_object <- runwSIR(spe_object)

## -----------------------------------------------------------------------------
top_genes_obj <- findTopGenes(wsir = wsir_obj, highest = 8) # create object
top_genes_plot <- top_genes_obj$plot # select plot
top_genes_plot # print plot

top_genes_obj <- findTopGenes(wsir = wsir_obj, highest = 8, dirs = c(2:4))
top_genes_plot <- top_genes_obj$plot
top_genes_plot

## -----------------------------------------------------------------------------
vis_obj <- visualiseWSIRDirections(coords = sample1_coords, 
    wsir = wsir_obj, 
    dirs = 8) # create visualisations
vis_obj

## -----------------------------------------------------------------------------
umap_coords <- generateUmapFromWSIR(wsir = wsir_obj)
umap_plots <- plotUmapFromWSIR(X = sample1_exprs,
    umap_coords = umap_coords,
    highest_genes = top_genes_obj,
    n_genes = 6)
umap_plots

## -----------------------------------------------------------------------------
sample2_low_dim_exprs <- projectWSIR(wsir = wsir_obj, new_data = sample2_exprs)

## -----------------------------------------------------------------------------
dim(sample2_low_dim_exprs)

## -----------------------------------------------------------------------------
head(sample2_low_dim_exprs)

## -----------------------------------------------------------------------------
wsir_obj_samples12 <- wSIR(X = rbind(sample1_exprs, sample2_exprs),
    coords = rbind(sample1_coords, sample2_coords),
    samples = c(rep(1, nrow(sample1_coords)), rep(2, nrow(sample2_coords))),
    slices = 10,#optim_obj$best_slices, 
    alpha = 4,#optim_obj$best_alpha,
    optim_params = FALSE)

sample3_low_dim_exprs <- projectWSIR(wsir = wsir_obj_samples12, 
    new_data = sample3_exprs)
dim(sample3_low_dim_exprs)

## -----------------------------------------------------------------------------
samples12_cell_types <- append(sample1_cell_types, sample2_cell_types)

knn_classification_object <- knn(train = wsir_obj_samples12$scores, 
    test = sample3_low_dim_exprs,
    cl = samples12_cell_types,
    k = 10)

tail(knn_classification_object)

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

