library(scran)
library(org.Hs.eg.db)

## Load pretrained model from scran
hg.pairs <- readRDS(system.file("exdata", "human_cycle_markers.rds", package="scran"))

## Translate all ensembl IDs to gene symbols for pretrained model
g1_symbols <- data.frame()
s_symbols <- data.frame()
g2m_symbols <- data.frame()

## G1 first
g1_first_ids <- hg.pairs$G1$first
g1_first_symbols <- bitr(g1_first_ids, fromType="ENSEMBL", toType="SYMBOL", OrgDb="org.Hs.eg.db")
colnames(g1_first_symbols) <- c("first","first_symbol")
g1_symbols <- full_join(hg.pairs$G1,g1_first_symbols,by="first")

## G1 second
g1_second_ids <- hg.pairs$G1$second
g1_second_symbols <- bitr(g1_second_ids, fromType="ENSEMBL", toType="SYMBOL", OrgDb="org.Hs.eg.db")
colnames(g1_second_symbols) <- c("second","second_symbol")
g1_symbols <- full_join(g1_symbols,g1_second_symbols,by="second")

g1_symbols <- g1_symbols %>%
  dplyr::select(first_symbol,second_symbol)
  
colnames(g1_symbols) <- c("first","second")

## S first
s_first_ids <- hg.pairs$S$first
s_first_symbols <- bitr(s_first_ids, fromType="ENSEMBL", toType="SYMBOL", OrgDb="org.Hs.eg.db")
colnames(s_first_symbols) <- c("first","first_symbol")
s_symbols <- full_join(hg.pairs$S,s_first_symbols,by="first")

## S second
s_second_ids <- hg.pairs$S$second
s_second_symbols <- bitr(s_second_ids, fromType="ENSEMBL", toType="SYMBOL", OrgDb="org.Hs.eg.db")
colnames(s_second_symbols) <- c("second","second_symbol")
s_symbols <- full_join(s_symbols,s_second_symbols,by="second")

s_symbols <- s_symbols %>%
  dplyr::select(first_symbol,second_symbol)
  
colnames(s_symbols) <- c("first","second")

## G2M first
g2m_first_ids <- hg.pairs$G2M$first
g2m_first_symbols <- bitr(g2m_first_ids, fromType="ENSEMBL", toType="SYMBOL", OrgDb="org.Hs.eg.db")
colnames(g2m_first_symbols) <- c("first","first_symbol")
g2m_symbols <- full_join(hg.pairs$G2M,g2m_first_symbols,by="first")

## G2M second
g2m_second_ids <- hg.pairs$G2M$second
g2m_second_symbols <- bitr(g2m_second_ids, fromType="ENSEMBL", toType="SYMBOL", OrgDb="org.Hs.eg.db")
colnames(g2m_second_symbols) <- c("second","second_symbol")
g2m_symbols <- full_join(g2m_symbols,g2m_second_symbols,by="second")

g2m_symbols <- g2m_symbols %>%
  dplyr::select(first_symbol,second_symbol)
  
colnames(g2m_symbols) <- c("first","second")

## Make a new list of pairs with symbols instead of ensembl IDs
hg.pairs_symbols <- list(g1_symbols,s_symbols,g2m_symbols)
names(hg.pairs_symbols) <- c("G1","S","G2M")

## Assign cell cycle phase using scrans cyclone function
assigned <- scran::cyclone(seurat_scater_sce, pairs=hg.pairs_symbols,
                           assay="exprs")

## Add cell cycle phases to Seurat object
## Add Litter ID and replicate number as metadata
cells <- rownames(expression_seurat@data.info)
meta_data <- data.frame("Cell_cycle"=assigned$phases)

rownames(meta_data) <- cells

expression_seurat <- AddMetaData(expression_seurat,
                                 metadata=meta_data)