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

## ----setup--------------------------------------------------------------------
# install.packages("devtools")
# devtools::install_github("https://github.com/saeyslab/PeacoQC")

library(PeacoQC)


## ----warning=FALSE, fig.show='hide'-------------------------------------------
# Specify flowframe path and read your flowframe
fileName <- system.file("extdata", "111.fcs", package="PeacoQC")
ff <- flowCore::read.FCS(fileName)


# Determine channels on which quality control should be done
channels <- c(1, 3, 5:14, 18, 21)


# Remove margins
# Make sure you do this before any compensation since the internal parameters
# change and they are neccessary for the RemoveMargins function.
# If this is not possible, you can specify the internal parameters in the 
# channel_specifications parameter.

ff <- RemoveMargins(ff=ff, channels=channels, output="frame")


# Compensate and transform the data
ff <- flowCore::compensate(ff, flowCore::keyword(ff)$SPILL)
ff <- flowCore::transform(ff, 
    flowCore::estimateLogicle(ff, colnames(flowCore::keyword(ff)$SPILL)))


# Run PeacoQC and save the cleaned flowframe as an fcs file and plot the results
# of this quality control step.
peacoqc_res <- PeacoQC(
    ff=ff, 
    channels=channels, 
    determine_good_cells="all", 
    save_fcs=TRUE, 
    plot=TRUE,
    output_directory = "PeacoQC_Example1")


# Filtered flowframe is stored in peacoqc_res$FinalFF and can be used for 
# further analysis.
ff <- peacoqc_res$FinalFF



## ----eval = FALSE-------------------------------------------------------------
# # # Example of how the code could look for mass cytometry data
# 
# ff <- flowCore::read.FCS(file)
# 
# # You don't have to remove margin events or compensate the data but you
# # should transform it
# channels <- c(3, 5, 6:53)
# 
# ff <- transform(ff,transformList(colnames(ff)[channels],
#                                     arcsinhTransform(a = 0, b = 1/5, c = 0)))
# 
# # Make sure the parameters are set correctly and that the remove_zeros variable
# # is set to TRUE.
# peacoqc_results <- PeacoQC(ff,
#     channels=channels,
#     IT_limit=0.6,
#     remove_zeros=TRUE,
#     time_units=50000)
# 

## ----warning=FALSE------------------------------------------------------------

# Change IT_limit for one compensated and transformed file. 
# (Higher=more strict, lower=less strict)
# The fcs file should not be saved since we are still optimising the parameters
fileName <- system.file("extdata", "111.fcs", package="PeacoQC")
ff <- flowCore::read.FCS(fileName)

# Determine channels on which quality control should be done
channels <- c(1, 3, 5:14, 18, 21)

# Remove margins
ff <- RemoveMargins(ff=ff, channels=channels, output="frame")

# Compensate and transform the data
ff <- flowCore::compensate(ff, flowCore::keyword(ff)$SPILL)
ff <- flowCore::transform(ff, 
    flowCore::estimateLogicle(ff, colnames(flowCore::keyword(ff)$SPILL)))


# Run PeacoQC and save the cleaned flowframe as an fcs file and plot the results
# of this quality control step.
peacoqc_res <- PeacoQC(
    ff=ff, 
    channels=channels, 
    determine_good_cells="all", 
    save_fcs=FALSE, 
    plot=TRUE,
    output_directory = "PeacoQC_Example2",
    IT_limit = 0.65)



## ----eval = FALSE-------------------------------------------------------------
# 
# # You can also change the MAD parameter to a lower value
# # (to make it more strict) or to a higher value (to make it less strict).
# # Since the MAD analysis does not remove something, this is not neccesary now.
# 
# peacoqc_res <- PeacoQC(
#     ff,
#     channels,
#     determine_good_cells="all",
#     save_fcs=FALSE,
#     plot=TRUE,
#     MAD=8
# )
# 
# 
# # When the correct parameters are chosen you can run the different files in
# # a for loop
# 
# for (file in files){
#     ff <- flowCore::read.FCS(file)
# 
#     # Remove margins
#     ff <- RemoveMargins(ff=ff, channels=channels, output="frame")
# 
#     # Compensate and transform the data
#     ff <- flowCore::compensate(ff, flowCore::keyword(ff)$SPILL)
#     ff <- flowCore::transform(ff,
#                                 flowCore::estimateLogicle(ff,
#                                 colnames(flowCore::keyword(ff)$SPILL)))
#     peacoqc_res <- PeacoQC(
#                             ff,
#                             channels,
#                             determine_good_cells="all",
#                             IT_limit=0.6,
#                             save_fcs=T,
#                             plot=T)
#     }
# 

## ----warning = FALSE----------------------------------------------------------
# Find the path to the report that was created by using the PeacoQC function
location <- system.file("extdata", "PeacoQC_report.txt", package="PeacoQC")

# Make heatmap overview of the quality control run
PeacoQCHeatmap(report_location=location, show_values = FALSE,
               show_row_names = FALSE)

# Make heatmap with only the runs of the last test
PeacoQCHeatmap(report_location=location, show_values = FALSE, 
               latest_tests=TRUE, show_row_names = FALSE)

# Make heatmap with row annotation
PeacoQCHeatmap(report_location=location, show_values = FALSE,
               show_row_names = FALSE,
    row_split=c(rep("r1",7), rep("r2", 55)))


## ----warning=FALSE, fig.show= 'hide'------------------------------------------
# Load in compensated and transformed flowframe

fileName <- system.file("extdata", "111_Comp_Trans.fcs", package="PeacoQC")
ff <- flowCore::read.FCS(fileName)

# Plot only the peaks (No quality control)
PlotPeacoQC(ff, channels, display_peaks=TRUE, prefix = "PeacoQC_peaks_")

# Plot only the dots of the file
PlotPeacoQC(ff, channels, display_peaks=FALSE, prefix = "PeacoQC_nopeaks_")