### Metabolome pre-processing
#Code was adapted from Klaus et al. 2020. “Notame”: Workflow for Non-Targeted LC–MS Metabolic Profiling. Metabolites.10(4),135. DOI: https://doi.org/10.3390/metabo10040135


## Libraries -------------------------------------------------------------
library(notame)
library(readxl)
library(notame) # Workflow for non-targeted LC-MS metabolic profiling
library(doParallel) # For each Parallel Adaptor for the 'parallel' Package
library(here) # A Simpler Way to Find Your Files
library(magrittr) # A Forward-Pipe Operator for R
library(tidyverse) # Easily Install and Load the 'Tidyverse'
library(patchwork) # The Composer of Plots
library(dplyr)
library(stringr)
library(tidyverse)



ppath <- here()
init_log(log_file = paste0(ppath, '/log.txt'))


## Negative mode -------------------------------------------------------------

Negative<-read_from_excel("04_Dataset_Metabolome_Negative_Intensity.xlsx",
                          sheet="Negative",
                          corner_row = 5, corner_column = "H",
                          split_by = c("Column", "Ion_Mode"))


names(Negative)
sapply(Negative, class)
sapply(Negative, dim)

### metabosets


modes <- construct_metabosets(exprs = Negative$exprs,
                              pheno_data = Negative$pheno_data,
                              feature_data = Negative$feature_data,
                              group_col = "Group")

names(modes)
sapply(modes, class)

### Preoproced----------------------------------------------------------------
processed <- list()
for (i in seq_along(modes)) {
  name <- names(modes)[i]
  mode <- modes[[i]]
  # Set all zero abundances to NA
  mode <- mark_nas(mode, value = 0)

  # flag detection
  mode <- flag_detection(mode, qc_limit = 0.7, group_limit = 0.8)
  corrected <- correct_drift(mode)
  # Flag low quality metabolites
  flagged <- flag_quality(corrected)
  # Drop quality controls
  noqc <- drop_qcs(flagged)
  # Drop flagged features
  goodquality<-drop_flagged(noqc)

  processed[[i]] <- goodquality
}


Negative_Intensity_filtered<- merge_metabosets(processed)

## Positive mode -------------------------------------------------------------

Positive<-read_from_excel("05_Dataset_Metabolome_Positive_Intensity.xlsx",
                          sheet="Positive",
                          corner_row = 5, corner_column = "G",
                          split_by = c("Column", "Ion_Mode"))


names(Positive)
sapply(Positive, class)
sapply(Positive, dim)


modes <- construct_metabosets(exprs = Positive$exprs,
                              pheno_data = Positive$pheno_data,
                              feature_data = Positive$feature_data,
                              group_col = "Group")

names(modes)
sapply(modes, class)

### Preoproced----------------------------------------------------------------
processed <- list()
for (i in seq_along(modes)) {
  name <- names(modes)[i]
  mode <- modes[[i]]
  # Set all zero abundances to NA
  mode <- mark_nas(mode, value = 0)

  # flag detection
  mode <- flag_detection(mode, qc_limit = 0.7, group_limit = 0.8)
  corrected <- correct_drift(mode)
  # Flag low quality metabolites
  flagged <- flag_quality(corrected)
  # Drop quality controls
  noqc <- drop_qcs(flagged)
  # Drop flagged features
  goodquality<-drop_flagged(noqc)

  processed[[i]] <- goodquality
}


Positive_Intensity_filtered<- merge_metabosets(processed)
