## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(collapse=TRUE, comment="#>", fig.align="center")

suppressPackageStartupMessages({
    library(BiocStyle)
    library(knitr)
    library(RNAshapeQC)
    library(SummarizedExperiment)
    library(ConsensusClusterPlus)
})

## Test R functions
# devtools::document()
# devtools::load_all() # load development version

## ----LoadPkg, eval=FALSE------------------------------------------------------
# ## Installation and loading
# if (!requireNamespace("BiocManager", quietly=TRUE)) {
#     install.packages("BiocManager")
# }
# BiocManager::install("RNAshapeQC")
# 
# library(RNAshapeQC)

## ----construct_pileup, eval=FALSE---------------------------------------------
# construct_pileup(
#     Gene          = "Gene001",
#     studylist     = "TOY",
#     regionsFile   = "/path/to/hg38.gene.regions.txt",
#     regionsFormat = "gencode.regions",
#     regionsCol    = 2,
#     bamFilesList  = list(TOY=toy_bam_paths),
#     caseIDList    = list(TOY=toy_case_ids),
#     outFile       = "pergene/TOY_Gene001_pileup.RData"
# )

## ----LoadData-----------------------------------------------------------------
data("TOY_mrna_se")
data("TOY_total_se")

## ----Str----------------------------------------------------------------------
TOY_mrna_se
TOY_total_se

## ----get_DIIwt----------------------------------------------------------------
## Using SE input directly
res_dii_se <- get_DIIwt(TOY_mrna_se)

names(res_dii_se)
head(res_dii_se$ds.vec)

## (Optional) Using matrix/vector input
data(TOY_mrna_mat)

res_dii_mat <- get_DIIwt(
    DR         = TOY_mrna_mat$DR, 
    TPM        = TOY_mrna_mat$TPM, 
    genelength = TOY_mrna_mat$gene_length
)

## Compare SE and matrix inputs
all.equal(res_dii_se$DR2, res_dii_mat$DR2)
all.equal(res_dii_se$ds.vec, res_dii_mat$ds.vec)
all.equal(res_dii_se$gene.df, res_dii_mat$gene.df)
all.equal(res_dii_se$s, res_dii_mat$s)

## ----plot_DIIwt, message=FALSE, echo=TRUE-------------------------------------
## Path to a temporary file
outfile <- file.path(tempdir(), "Fig_DIIwt.png")

plot_DIIwt(
    DR        = res_dii_se$DR2,
    DIIresult = res_dii_se,
    outFile   = outfile
)

## Saving DIIwt plot to: /.../Fig_DIIwt.png

## ----Fig_DIIwt, out.width="100%",out.height="100%", fig.align="center", echo=FALSE----
knitr::include_graphics(outfile)

## ----get_SOI------------------------------------------------------------------
## Using SE input directly
## The cutoff value can be chosen by inspecting the PD distribution.
res_soi_se <- get_SOI(TOY_total_se, cutoff=1)

names(res_soi_se)
head(res_soi_se$auc.vec)

## (Optional) Using matrix input
data(TOY_total_mat)

res_soi_mat <- get_SOI(
    MCD    = TOY_total_mat$MCD,
    wCV    = TOY_total_mat$wCV,
    cutoff = 1
)

## Compare SE and matrix inputs
all.equal(res_soi_se$auc.vec, res_soi_mat$auc.vec)
all.equal(res_soi_se$auc.coord, res_soi_mat$auc.coord)
all.equal(res_soi_se$rangeMCD, res_soi_mat$rangeMCD)

## ----plot_SOI, message=FALSE, echo=TRUE---------------------------------------
outfile <- file.path(tempdir(), "Fig_SOI.png")

## The cutoff value can be chosen by inspecting the PD distribution.
plot_SOI(
    SOIresult = res_soi_se,
    cutoff    = 1,
    outFile   = outfile 
)

## Saving SOI plot to: /.../Fig_SOI.png

## ----Fig_SOI, out.width="100%",out.height="100%", fig.align="center", echo=FALSE----
knitr::include_graphics(outfile)

## ----se_mrna, message=FALSE, echo=TRUE----------------------------------------
library(SummarizedExperiment)

## Store QC results in mRNA-seq
se_mrna <- SummarizedExperiment(
    assays   = list(DR=assay(TOY_mrna_se, "DR"), TPM=assay(TOY_mrna_se, "TPM")),
    colData  = DataFrame(res_dii_se$ds.vec),
    metadata = list(s=res_dii_se$s)
)
se_mrna

## Subsetting to keep high-quality samples in mRNA-seq
se_mrna_hq <- se_mrna[, se_mrna$DII == "Intact"]
head(assay(se_mrna_hq, "TPM"))

## ----CC, message=FALSE, echo=TRUE---------------------------------------------
library(ConsensusClusterPlus)

## TPM log transform
tpm_hq  <- log2(assay(se_mrna_hq, "TPM") + 1)

## Set a random seed for reproducibility
set.seed(1)

cc <- ConsensusClusterPlus(
    tpm_hq,
    maxK       = 6,
    reps       = 100,
    pItem      = 0.8,
    pFeature   = 0.8,
    clusterAlg = "hc",
    distance   = "pearson",
    plot       = "png",
    title      = tempdir()
)
cc[[3]]$consensusClass

## ----se_total, message=FALSE, echo=TRUE---------------------------------------
## Store QC results in total RNA-seq
se_total <- SummarizedExperiment(
    assays   = list(MCD=assay(TOY_total_se, "MCD"), wCV=assay(TOY_total_se, "wCV")),
    rowData  = DataFrame(Gene=rownames(assay(TOY_total_se, "MCD"))),
    colData  = DataFrame(res_soi_se$auc.vec),
    metadata = list(auc.coord=res_soi_se$auc.coord, rangeMCD=res_soi_se$rangeMCD)
)
se_total

## Subsetting to keep high-quality samples in total RNA-seq
se_total_hq <- se_total[, se_total$SOI == "Optimal"]
head(assay(se_total_hq, "wCV"))

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

