# Clear working space and load libraries
rm(list = ls())
library(dplyr)
library(MAAS)
set.seed(1234)
# Load data
# CNV
cnv <- read.csv("../3.tumorcell/cancer.cnv.csv", row.names = 1, check.names = F)
rownames(cnv) <- gsub("cell.", "", rownames(cnv))
rownames(cnv) <- gsub("\\.", "-", rownames(cnv))
# Peak
peak <- readRDS("../5.peakcorrection/peak.mat.rds")
# peak <- peak[apply(peak, 1, sd) > 0.25,]
nrow(peak)
# SNV
snv <- readRDS("../6.snvcorrection/denoised.mat.rds")
rownames(snv) <- paste0(rownames(snv), "-1")

share.barcode <- Reduce(intersect, list(colnames(peak), rownames(snv), rownames(cnv)))
# saveRDS(share.barcode, "share.barcode.rds")

# Randomly sample 200 cells to speed up running
share.barcode <- withr::with_seed(1, sample(share.barcode, size = 200))
saveRDS(share.barcode, "share.barcode.rds")

#
peak <- t(peak)
peak.raw <- peak[share.barcode,] %>% as.matrix()
cnv.raw <- cnv[share.barcode,] %>% as.matrix()
snv.raw <- snv[share.barcode,] %>% as.matrix()

###############################################################################

# Calculate cell similarity
peak.similarity <- 1- as.matrix(parallelDist::parDist(as.matrix(peak.raw), method = "cosine", threads = 40))
cnv.similarity <- 1- as.matrix(parallelDist::parDist(as.matrix(cnv.raw), method = "hamming", threads = 40))
snv.similarity <- 1- as.matrix(parallelDist::parDist(as.matrix(snv.raw), method = "hamming", threads = 40))

maas.test <- MAAS(peak.similarity, cnv.similarity, snv.similarity, dims = 2:5) # The three cell=cell similarity matrix is stored in the data folder of MAAS package.
saveRDS(maas.test, "maas.res.all.rds")