---
title: 'CorrectOverloadedPeaks: a computational tool for automatic correction of overloaded signals in GC-APCI-MS'
author: Jan Lisec
date: "20.08.2016"
output: 
  rmarkdown::html_vignette:
    fig_width: 7
    fig_height: 7
vignette: >
  %\VignetteIndexEntry{CorrectOverloadedPeaks: a computational tool for automatic correction of overloaded signals in GC-APCI-MS}
  %\VignetteEngine{knitr::rmarkdown}
  %\usepackage[utf8]{inputenc}
---

This short Vignette will show how to correction overloaded signals in (i) an artificial test case and (ii) a provided real data set. To achieve this we need to load the package functions as well as a small data example in xcmsRaw format.

```{r preload}
library(CorrectOverloadedPeaks)
data("xcmsRaw_data")
```

Let's model a typical overloaded signal occuring frequently in GC-APCI-MS using the provided function \code{ModelGaussPeak}.

```{r}
pk <- CorrectOverloadedPeaks::ModelGaussPeak(height=10^7, width=3, scan_rate=10, e=0, ds=8*10^6, base_line=10^2)
plot(pk, main="Gaussian peak of true intensity 10^7 but cutt off at 8*10^6")
```

Now we roughly estimate peak boarders before applying the provided function \code{FitGaussPeak} to correct peak data.

```{r}
idx <- pk[,"int"]>0.005 * max(pk[,"int"])
tmp <- CorrectOverloadedPeaks::FitGaussPeak(x=pk[idx,"rt"], y=pk[idx,"int"], silent=FALSE, xlab="RT", ylab="Intensity")
```

The generated QC plot does show the optimal solution found (green line), indicating the substituted intensity values (grey circles) and obtained parameters (blue text) including the probably peak height (max_int=9.7*10^6) being very close to the true peak height (10^7). Now let's extend this simplified process to peaks from a real data set. The following function call will generate (i) a PDF in the working directory with QC-plots for 10 peaks from 5 chromatographic regions, (ii) processing information output to the console and (iii) a new file "cor_df_all.RData" in the working directory containing all extracted but non-corrected mass traces.

```{r}
tmp <- CorrectOverloadedPeaks::CorrectOverloadedPeaks(data=xcmsRaw_data, method="EMG", testing=TRUE)
```

Let's load these non-corrected mass traces for further visualization of package capabilities. For instance we can reprocess peak 2 from region 4 using the isotopic ratio approach:

```{r}
load("cor_df_all.RData")
head(cor_df_all[[4]][[2]])
tmp <- CorrectOverloadedPeaks::FitPeakByIsotopicRatio(cor_df=cor_df_all[[4]][[2]], silent=FALSE)
```

The extracted data contain RT and Intensity information for the overloaded mass trace (mz=350.164) as well as isotopes of this mz up to the first isotope which is not itself overloaded (M+2, green triangles). This isotope is evaluated with respect to its ratio to M+0 in the peak front (15.9%) and this ratio in turn is used to scal up the overloaded data points of M+0 (grey circles) as indicated by the black line. The data could of course be processed alternatively using the Gauss method as shown previously for artificial data.

```{r}
tmp <- CorrectOverloadedPeaks::FitGaussPeak(x=cor_df_all[[4]][[2]][,"RT"], y=cor_df_all[[4]][[2]][,"int0"], silent=FALSE, xlab="RT", ylab="Intensity")
```

Finally we clean up the temporary files stored on the harddrive.

```{r}
if(file.exists("cor_df_all.RData")) file.remove("cor_df_all.RData")
if(file.exists("S5_35_01_2241_Int+LM.mzXML.pdf")) file.remove("S5_35_01_2241_Int+LM.mzXML.pdf")
```
