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

## ----eval=FALSE---------------------------------------------------------------
# githubURL <- "https://github.com/feiyoung/PRECAST/blob/main/vignettes_data/data_simu.rda?raw=true"
# download.file(githubURL,"data_simu.rda",mode='wb')
# 

## ----eval = FALSE-------------------------------------------------------------
# load("data_simu.rda")

## ----eval = FALSE-------------------------------------------------------------
# library(PRECAST)
# library(Seurat)

## ----eval = FALSE-------------------------------------------------------------
# data_simu ## a list including three Seurat object with default assay: RNA

## ----eval= FALSE--------------------------------------------------------------
# head(data_simu[[1]])

## ----eval= FALSE--------------------------------------------------------------
# row.names(data_simu[[1]])[1:10]

## ----eval = FALSE-------------------------------------------------------------
# ## Get the gene-by-spot read count matrices
# countList <- lapply(data_simu, function(x){
#   assay <- DefaultAssay(x)
#   GetAssayData(x, assay = assay, slot='counts')
# 
# } )
# 
# ## Check the spatial coordinates: Yes, they are named as "row" and "col"!
# head(data_simu[[1]]@meta.data)
# 
# ## Get the meta data of each spot for each data batch
# metadataList <- lapply(data_simu, function(x) x@meta.data)
# 
# 
# ## ensure the row.names of metadata in metaList are the same as that of colnames count matrix in countList
# M <- length(countList)
# for(r in 1:M){
#   row.names(metadataList[[r]]) <- colnames(countList[[r]])
# }
# 
# 
# ## Create the Seurat list  object
# 
# seuList <- list()
# for(r in 1:M){
#   seuList[[r]] <- CreateSeuratObject(counts = countList[[r]], meta.data=metadataList[[r]], project = "PRECASTsimu")
# }
# 

## ----eval = FALSE-------------------------------------------------------------
# 
# ## Create PRECASTObject
# set.seed(2022)
# PRECASTObj <-  CreatePRECASTObject(seuList, customGenelist=row.names(seuList[[1]]))
# 
# ## User can retain the raw seuList by the following commond.
# ##  PRECASTObj <-  CreatePRECASTObject(seuList, customGenelist=row.names(seuList[[1]]), rawData.preserve = TRUE)
# 

## ----eval = FALSE-------------------------------------------------------------
# ## check the number of genes/features after filtering step
# PRECASTObj@seulist
# 
# ## seuList is null since the default value `rawData.preserve` is FALSE.
# PRECASTObj@seuList
# 
# ## Add adjacency matrix list for a PRECASTObj object to prepare for PRECAST model fitting.
# PRECASTObj <-  AddAdjList(PRECASTObj, platform = "Visium")
# 
# ## Add a model setting in advance for a PRECASTObj object: verbose =TRUE helps outputing the information in the algorithm; coreNum set the how many cores are used in PRECAST. If you run PRECAST for multiple number of clusters, you can set multiple cores; otherwise, set it to 1.
# PRECASTObj <- AddParSetting(PRECASTObj, Sigma_equal=FALSE, maxIter=30, verbose=TRUE, int.model='kmeans',
#                              coreNum =1)

## ----eval = FALSE-------------------------------------------------------------
# ### Given K
# set.seed(2022)
# PRECASTObj <- PRECAST(PRECASTObj, K=7)

## ----eval =FALSE--------------------------------------------------------------
# ## Reset  parameters by increasing cores.
# PRECASTObj2 <- AddParSetting(PRECASTObj, Sigma_equal=FALSE, maxIter=30, verbose=TRUE,
#                              coreNum =2)
# set.seed(2023)
# PRECASTObj2 <- PRECAST(PRECASTObj2, K=6:7)
# 
# resList2 <- PRECASTObj2@resList
# PRECASTObj2 <- SelectModel(PRECASTObj2)
# 

## ----eval = FALSE-------------------------------------------------------------
# ## check the fitted results: there are four list for the fitted results of each K (6:9).
# str(PRECASTObj@resList)
# ## backup the fitted results in resList
# resList <- PRECASTObj@resList
# # PRECASTObj@resList <- resList
# PRECASTObj <- SelectModel(PRECASTObj)
# ## check the best and re-organized results
# str(PRECASTObj@resList) ## The selected best K is 7

## ----eval = FALSE-------------------------------------------------------------
# true_cluster <- lapply(PRECASTObj@seulist, function(x) x$true_cluster)
# str(true_cluster)
# mclust::adjustedRandIndex(unlist(PRECASTObj@resList$cluster), unlist(true_cluster))

## ----eval = FALSE-------------------------------------------------------------
# 
# seuInt <- IntegrateSpaData(PRECASTObj, species='unknown')
# seuInt
# ## The low-dimensional embeddings obtained by PRECAST are saved in PRECAST reduction slot.

## ----eval = FALSE-------------------------------------------------------------
# cols_cluster <- chooseColors(palettes_name = 'Nature 10', n_colors = 7, plot_colors = TRUE)

## ----eval = FALSE, fig.height=5, fig.width=7----------------------------------
# p12 <- SpaPlot(seuInt, batch=NULL, cols=cols_cluster, point_size=2, combine=TRUE)
# p12
# # users can plot each sample by setting combine=FALSE

## ----eval = FALSE, fig.height=2.6, fig.width=7--------------------------------
# pList <- SpaPlot(seuInt, batch=NULL, cols=cols_cluster, point_size=2, combine=FALSE, title_name=NULL)
# drawFigs(pList[1:2], layout.dim = c(1,2), common.legend = TRUE, legend.position = 'right', align='hv')
# 

## ----eval = FALSE, fig.height=5, fig.width=6----------------------------------
# seuInt <- AddUMAP(seuInt)
# SpaPlot(seuInt, batch=NULL,item='RGB_UMAP',point_size=1, combine=TRUE, text_size=15)
# 
# ## Plot tSNE RGB plot
# #seuInt <- AddTSNE(seuInt)
# #SpaPlot(seuInt, batch=NULL,item='RGB_TSNE',point_size=2, combine=T, text_size=15)

## ----eval = FALSE, fig.height=8, fig.width=6----------------------------------
# seuInt <- AddTSNE(seuInt, n_comp = 2)
# 
# p1 <- dimPlot(seuInt, item='cluster', font_family='serif', cols=cols_cluster) # Times New Roman
# p2 <- dimPlot(seuInt, item='batch', point_size = 1,  font_family='serif')
# drawFigs(list(p1, p2), common.legend=FALSE, align='hv')
# # It is noted that only sample batch 1 has cluster 4, and only sample batch 2 has cluster 7.

## ----eval = FALSE, fig.height=4, fig.width=6----------------------------------
# dimPlot(seuInt, reduction = 'UMAP3', item='cluster', cols=cols_cluster, font_family='serif')

## ----eval = FALSE, fig.height=3, fig.width=8----------------------------------
# library(Seurat)
# p1 <- DimPlot(seuInt[,1: 4226], reduction = 'position', cols=cols_cluster, pt.size =1) # plot the first data batch: first 4226 spots.
# p2 <- DimPlot(seuInt, reduction = 'tSNE',cols=cols_cluster, pt.size=1)
# drawFigs(list(p1, p2), layout.dim = c(1,2), common.legend = TRUE)

## ----eval = FALSE-------------------------------------------------------------
# dat_deg <- FindAllMarkers(seuInt)
# library(dplyr)
# n <- 2
# dat_deg %>%
#   group_by(cluster) %>%
#   top_n(n = n, wt = avg_log2FC) -> top10
# 
# head(top10)
# 

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

