## ----biocstyle, echo = FALSE, results = "asis"--------------------------------
BiocStyle::markdown()

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

## ----init, message = FALSE, echo = FALSE, results = "hide"--------------------
## Silently loading all packages
library(BiocStyle)
library(peakPantheR)
library(faahKO)
library(pander)
library(doParallel)
library(foreach)

## ----out.width = "700px", echo = FALSE----------------------------------------
knitr::include_graphics("figures/parallelAnnotation.png")

## ----out.width = "700px", echo = FALSE----------------------------------------
knitr::include_graphics("figures/parallelAnnotation_procedure.png")

## -----------------------------------------------------------------------------
library(faahKO)
## file paths
input_spectraPaths  <- c(system.file('cdf/KO/ko15.CDF', package = "faahKO"),
                        system.file('cdf/KO/ko16.CDF', package = "faahKO"),
                        system.file('cdf/KO/ko18.CDF', package = "faahKO"))
input_spectraPaths

## ----eval = FALSE-------------------------------------------------------------
# # targetFeatTable
# input_targetFeatTable <- data.frame(matrix(vector(), 2, 8, dimnames=list(c(),
#                         c("cpdID", "cpdName", "rtMin", "rt", "rtMax", "mzMin",
#                             "mz", "mzMax"))), stringsAsFactors=FALSE)
# input_targetFeatTable[1,] <- c("ID-1", "Cpd 1", 3310., 3344.888, 3390.,
#                                 522.194778, 522.2, 522.205222)
# input_targetFeatTable[2,] <- c("ID-2", "Cpd 2", 3280., 3385.577, 3440.,
#                                 496.195038, 496.2, 496.204962)
# input_targetFeatTable[,c(3:8)] <- sapply(input_targetFeatTable[,c(3:8)],
#                                         as.numeric)

## ----results = "asis", echo = FALSE-------------------------------------------
# use pandoc for improved readability
input_targetFeatTable <- data.frame(matrix(vector(), 2, 8, dimnames=list(c(), 
                        c("cpdID", "cpdName", "rtMin", "rt", "rtMax", "mzMin", 
                        "mz", "mzMax"))), stringsAsFactors=FALSE)
input_targetFeatTable[1,] <- c("ID-1", "Cpd 1", 3310., 3344.888, 3390., 
                                522.194778, 522.2, 522.205222)
input_targetFeatTable[2,] <- c("ID-2", "Cpd 2", 3280., 3385.577, 3440., 
                                496.195038, 496.2, 496.204962)
input_targetFeatTable[,c(3:8)] <- sapply(input_targetFeatTable[,c(3:8)], 
                                        as.numeric)
rownames(input_targetFeatTable) <- NULL
pander::pandoc.table(input_targetFeatTable, digits = 9)

## ----eval=FALSE---------------------------------------------------------------
# # spectra Metadata
# input_spectraMetadata  <- data.frame(matrix(c("sample type 1", "sample type 2",
#                             "sample type 1"), 3, 1,
#                             dimnames=list(c(),c("sampleType"))),
#                             stringsAsFactors=FALSE)

## ----results = "asis", echo = FALSE-------------------------------------------
# use pandoc for improved readability
input_spectraMetadata  <- data.frame(matrix(c("sample type 1", "sample type 2", 
                                            "sample type 1"), 3, 1, 
                                            dimnames=list(c(),c("sampleType"))),
                                    stringsAsFactors=FALSE)
pander::pandoc.table(input_spectraMetadata)

## -----------------------------------------------------------------------------
library(peakPantheR)
init_annotation <- peakPantheRAnnotation(spectraPaths = input_spectraPaths,
                        targetFeatTable = input_targetFeatTable,
                        spectraMetadata = input_spectraMetadata)

## -----------------------------------------------------------------------------
init_annotation

## -----------------------------------------------------------------------------
# annotate files serially
annotation_result <- peakPantheR_parallelAnnotation(init_annotation, ncores=0,
                                                    curveModel='skewedGaussian',
                                                    verbose=TRUE)

# successful fit
nbSamples(annotation_result$annotation)
data_annotation   <- annotation_result$annotation
data_annotation

# list failed fit
annotation_result$failures

## -----------------------------------------------------------------------------
updated_annotation  <- annotationParamsDiagnostic(data_annotation, verbose=TRUE)

# uROI now exist
updated_annotation

## ----eval=FALSE---------------------------------------------------------------
# # create a colourScale based on the sampleType
# uniq_sType <- sort(unique(spectraMetadata(updated_annotation)$sampleType),
#                     na.last=TRUE)
# col_sType  <- unname( setNames(c('blue', 'red'),
#                 c(uniq_sType))[spectraMetadata(updated_annotation)$sampleType] )
# 
# # create a temporary location to save the diagnotic (otherwise provide the path
# # to the selected location)
# output_folder <- tempdir()
# 
# # output fit diagnostic to disk
# outputAnnotationDiagnostic(updated_annotation, saveFolder=output_folder,
#                             savePlots=TRUE, sampleColour=col_sType,
#                             verbose=TRUE, ncores=2)

## ----results = "asis", echo = FALSE-------------------------------------------
# use pandoc for improved readability, display the diagnostic results
tmp_csv <- data.frame(matrix(nrow=2,ncol=21,dimnames=list(c(), c('cpdID', 
        'cpdName', 'X', 'ROI_rt', 'ROI_mz','ROI_rtMin', 'ROI_rtMax', 
        'ROI_mzMin', 'ROI_mzMax', 'X', 'uROI_rtMin', 'uROI_rtMax', 'uROI_mzMin',
        'uROI_mzMax', 'uROI_rt', 'uROI_mz', 'X', 'FIR_rtMin', 'FIR_rtMax', 
        'FIR_mzMin', 'FIR_mzMax'))), stringsAsFactors=FALSE)
tmp_csv[1,] <- c('ID-1','Cpd 1', '|', 3344.888, 522.2, 3310., 3390., 522.194778,
                522.205222,'|', 3305.75893, 3411.436284, 522.194778, 522.205222,
                3344.888, 522.2, '|', 3326.10635, 3407.272648, 522.194778, 
                522.205222)
tmp_csv[2,] <- c('ID-2','Cpd 2', '|', 3385.577, 496.2, 3280., 3440., 496.195038,
                496.204962,'|',3337.376665, 3462.449033, 496.195038, 496.204962,
                3385.577, 496.2, '|', 3365.023857, 3453.404957, 496.195038, 
                496.204962)
tmp_csv[,-c(1,2,3,10,17)]  <- sapply(tmp_csv[,-c(1,2,3,10,17)], as.numeric)
colnames(tmp_csv) <- c('cpdID', 'cpdName', 'X', 'ROI_rt', 'ROI_mz','ROI_rtMin', 
                    'ROI_rtMax', 'ROI_mzMin', 'ROI_mzMax', 'X', 'uROI_rtMin', 
                    'uROI_rtMax', 'uROI_mzMin', 'uROI_mzMax', 'uROI_rt', 
                    'uROI_mz', 'X', 'FIR_rtMin', 'FIR_rtMax', 'FIR_mzMin', 
                    'FIR_mzMax')
pander::pandoc.table(tmp_csv, digits=9)

## ----out.width = "700px", echo = FALSE----------------------------------------
knitr::include_graphics(
    "figures/parallel_annotation_diagnostic_cpd1.png")

## ----results="asis", echo=FALSE-----------------------------------------------
# Example with constant correction.
rtCorrectionOutput <- retentionTimeCorrection(updated_annotation,
                            rtCorrectionReferences=c('ID-1'),
                            method='constant',
                            robust=FALSE,
                            rtWindowWidth=15,
                            diagnostic=TRUE)
updated_annotation <- rtCorrectionOutput$annotation
# The ggplot2 plot object
rtCorrectionOutput$plot

# Example with second degree polynomial, without using RANSAC
# # to obtain a robust fit
rtCorrectionOutput <- retentionTimeCorrection(updated_annotation,
                            rtCorrectionReferences=NULL,
                            method='polynomial',
                            params=list(polynomialOrder=2),
                            robust=FALSE, rtWindowWidth=15,
                            diagnostic=TRUE)

## ----eval=FALSE---------------------------------------------------------------
# update_csv_path <- '/path_to_new_csv/'
# 
# # load csv
# new_annotation <- peakPantheR_loadAnnotationParamsCSV(update_csv_path)
# #> uROIExist set to TRUE
# #> New peakPantheRAnnotation object initialised for 2 compounds
# 
# new_annotation
# #> An object of class peakPantheRAnnotation
# #>  2 compounds in 0 samples.
# #>   updated ROI exist (uROI)
# #>   does not use updated ROI (uROI)
# #>   does not use fallback integration regions (FIR)
# #>   is not annotated
# 
# new_annotation <- resetFIR(new_annotation)
# #> FIR will be reset with uROI values

## -----------------------------------------------------------------------------
## new files
new_spectraPaths   <- c(system.file('cdf/KO/ko15.CDF', package = "faahKO"),
                        system.file('cdf/WT/wt15.CDF', package = "faahKO"),
                        system.file('cdf/KO/ko16.CDF', package = "faahKO"),
                        system.file('cdf/WT/wt16.CDF', package = "faahKO"),
                        system.file('cdf/KO/ko18.CDF', package = "faahKO"),
                        system.file('cdf/WT/wt18.CDF', package = "faahKO"))

new_spectraPaths

## -----------------------------------------------------------------------------
## new spectra metadata
new_spectraMetadata  <- data.frame(matrix(c("KO", "WT", "KO", "WT", "KO", "WT"),
                                        6, 1, dimnames=list(c(), c("Group"))), 
                                    stringsAsFactors=FALSE)

## ----results = "asis", echo = FALSE-------------------------------------------
# use pandoc for improved readability
new_spectraMetadata  <- data.frame(matrix(c("KO", "WT", "KO", "WT", "KO", "WT"),
                                        6, 1, dimnames=list(c(), c("Group"))), 
                                    stringsAsFactors=FALSE)
pander::pandoc.table(new_spectraMetadata)

## ----echo=FALSE---------------------------------------------------------------
new_annotation <- resetAnnotation(updated_annotation, 
                                spectraPaths=new_spectraPaths, 
                                spectraMetadata=new_spectraMetadata, 
                                useUROI=TRUE, useFIR=TRUE, verbose=FALSE) 

## ----eval=FALSE---------------------------------------------------------------
# ## add new samples to the annotation loaded from csv, useUROI, useFIR
# 
# new_annotation <- resetAnnotation(new_annotation, spectraPaths=new_spectraPaths,
#                                 spectraMetadata=new_spectraMetadata,
#                                 useUROI=TRUE, useFIR=TRUE)
# #> peakPantheRAnnotation object being reset:
# #>   Previous "ROI", "cpdID" and "cpdName" value kept
# #>   Previous "uROI" value kept
# #>   Previous "FIR" value kept
# #>   Previous "cpdMetadata" value kept
# #>   New "spectraPaths" value set
# #>   New "spectraMetadata" value set
# #>   Previous "uROIExist" value kept
# #>   New "useUROI" value set
# #>   New "useFIR" value set

## -----------------------------------------------------------------------------
new_annotation

## -----------------------------------------------------------------------------
# annotate files serially
new_annotation_result <- peakPantheR_parallelAnnotation(new_annotation, 
                                                        ncores=0, verbose=FALSE)

# successful fit
nbSamples(new_annotation_result$annotation)

final_annotation      <- new_annotation_result$annotation
final_annotation

# list failed fit
new_annotation_result$failures

## ----eval=FALSE---------------------------------------------------------------
# # create a colourScale based on the sampleType
# uniq_group <- sort(unique(spectraMetadata(final_annotation)$Group),na.last=TRUE)
# col_group  <- unname( setNames(c('blue', 'red'),
#                     c(uniq_sType))[spectraMetadata(final_annotation)$Group] )
# 
# # create a temporary location to save the diagnotic (otherwise provide the path
# # to the selected location)
# final_output_folder <- tempdir()
# 
# # output fit diagnostic to disk
# outputAnnotationDiagnostic(final_annotation, saveFolder=final_output_folder,
#                         savePlots=TRUE, sampleColour=col_group, verbose=TRUE)

## ----eval=FALSE---------------------------------------------------------------
# # peakTables for the first sample
# peakTables(final_annotation)[[1]]

## ----results = "asis", echo = FALSE-------------------------------------------
# use pandoc for improved readability
pander::pandoc.table(peakTables(final_annotation)[[1]])

## ----eval=FALSE---------------------------------------------------------------
# # Extract the found peak area for all compounds and all samples
# annotationTable(final_annotation, column='peakArea')

## ----results = "asis", echo = FALSE-------------------------------------------
# use pandoc for improved readability
pander::pandoc.table(annotationTable(final_annotation, column='peakArea'))

## ----eval=FALSE---------------------------------------------------------------
# # create a temporary location to save the diagnotic (otherwise provide the path
# # to the selected location)
# final_output_folder <- tempdir()
# 
# # save
# outputAnnotationResult(final_annotation, saveFolder=final_output_folder,
#                         annotationName='ProjectName', verbose=TRUE)
# #> Compound metadata saved at /final_output_folder/ProjectName_cpdMetadata.csv
# #> Spectra metadata saved at
# #>     /final_output_folder/ProjectName_spectraMetadata.csv
# #> Peak measurement "found" saved at /final_output_folder/ProjectName_found.csv
# #> Peak measurement "rtMin" saved at /final_output_folder/ProjectName_rtMin.csv
# #> Peak measurement "rt" saved at /final_output_folder/ProjectName_rt.csv
# #> Peak measurement "rtMax" saved at /final_output_folder/ProjectName_rtMax.csv
# #> Peak measurement "mzMin" saved at /final_output_folder/ProjectName_mzMin.csv
# #> Peak measurement "mz" saved at /final_output_folder/ProjectName_mz.csv
# #> Peak measurement "mzMax" saved at /final_output_folder/ProjectName_mzMax.csv
# #> Peak measurement "peakArea" saved at
# #>     /final_output_folder/ProjectName_peakArea.csv
# #> Peak measurement "maxIntMeasured" saved at
# #>     /final_output_folder/ProjectName_maxIntMeasured.csv
# #> Peak measurement "maxIntPredicted" saved at
# #>     /final_output_folder/ProjectName_maxIntPredicted.csv
# #> Peak measurement "is_filled" saved at
# #>     /final_output_folder/ProjectName_is_filled.csv
# #> Peak measurement "ppm_error" saved at
# #>     /final_output_folder/ProjectName_ppm_error.csv
# #> Peak measurement "rt_dev_sec" saved at
# #>     /final_output_folder/ProjectName_rt_dev_sec.csv
# #> Peak measurement "tailingFactor" saved at
# #>     /final_output_folder/ProjectName_tailingFactor.csv
# #> Peak measurement "asymmetryFactor" saved at
# #>     /final_output_folder/ProjectName_asymmetryFactor.csv
# #> Summary saved at /final_output_folder/ProjectName_summary.csv

## ----echo = FALSE-------------------------------------------------------------
devtools::session_info()

