Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
output: html_document
runtime: shiny #shiny_prerendered
title: Shinyscreen
author: Environmental Cheminformatics Group, LCSB, University of Luxembourg
SHINYSCREEN_PATH <- "~/cabinet/shinyscreen"
FN_WORKDIR_STATE <- "conf-state.yaml"
load_package <- function(name,src=NULL,reload_pkgs=NULL) {

    for (name in c(reload_pkgs,name)) {
        pname <- paste0("package:",name)
        if (pname %in% search()) eval(substitute(detach(pname,unload=T),list(pname=pname)))
    }
    if (!is.null(src)) devtools::install(src, upgrade = "never")

    for (name in rev(c(reload_pkgs,name))) {
        eval(substitute(library(name,list(name=name))))
    }
    invisible(NULL)
}

proj <- getwd()
setwd(proj)


dir.create("pkgs",showWarnings = F)
.libPaths(c("pkgs",.libPaths()))
Sys.setenv("R_LIBS_USER"="pkgs")
load_package("shinyscreen",src="~/cabinet/shinyscreen")
## library(shinyscreen)
deps_path <- getwd() #Where includes are stored.
fn_rmd_conf <- file.path(deps_path,'conf.Rmd')
def_state <- new_state()

Configuration {.tabset}

Inputs

Specify the project directory This is where the output files and the state of the analysis will be saved.
```{r, echo=FALSE} actionButton(inputId = "project_b", label= "Project")


Load the config file if needed.

```{r, echo=FALSE}
actionButton(inputId = "conf_file_b",
             label= "Load config")
Load the compound list(s) A compound list is composed of entries describing compounds. This description is used to search for its spectrum in the data file. The list is a table in the ***CSV*** format and contains these columns,
  • ID : required column, must be filled; this is a user-defined ID, uniquely associated with a compound

  • Name : this column can be left blank; if not, it should contain the names of the compounds

  • SMILES : a SMILES string, describing the structure of the compound; this entry can be left empty only if one of either Formula, or mz entries are not

  • Formula : a chemical formula of a compound; this field can be empty only if one of either SMILES, or mz entries are not

  • mz : mass of the ionised compound; this field can be left empty only if one of either SMILES, or Formula is not

  • CAS : the CAS number of the compound; it can be left empty

  • RT : retention time of the MS1 peak in minutes, if known; can be left empty.

Only ID and one of SMILES, Formula or mz must be filled. When structure, or a formula of a compound is known, it is also possible to look for various adducts in the sample. Of course, scanning for completely unknown compounds is also supported by the mz column. In this case, mz is the mass of the ion.

It is strongly recommended to quote SMILES, names and formulas in the CSV file used with Shinyscreen.

```{r, echo=FALSE} actionButton(inputId = "comp_list_b", label= "Compound list(s)")

<details><summary>Load compound set list (_setid_ table)</summary>
The compound lists can contain more entries than is necessary. Using
the _setid_ lists, it is possible to create _compound sets_ which
contain only those compounds that will actually be searched for in the
data files. A _setid table_ is a _CSV_ containing at least two
columns,

* ***ID*** : the ID entry from the compound list

* ***set*** : an user-defined set name.
</details>
```{r, echo=FALSE}
actionButton(inputId = "setid_b",
             label= "Load the setid table")
Load data files Shinyscreen currently supports only the ***mzML*** file format. After loading the files, set file tags in the file table (column ***tag***). Additionally, specify a set of compounds that is supposed to be extracted from the file using the ***set*** column. Finally, specify the ***adduct*** in the adduct column. In case of compounds with unknown structure and formula, the adduct is ignored for obvious reasons.
```{r, echo=FALSE} actionButton(inputId = "datafiles_b", label= "Load data files.")

```{r, context='server', echo=FALSE}
## b_project <- eventReactive(input$project, {
##     #dir <- tk_choose.dir(,caption = "Select project directory")
##     ""
## })
#rv_conf$project
#print(rv_conf)
## rv_conf$project <- b_project()

Extraction

Spectra extraction based settings

MS1 coarse error

Extract all entries matching the target mass within this error in the precursor table.

```{r, echo=F} shinyscreen::mz_input(input_mz = "ms1_coarse", input_unit = "ms1_coarse_unit", def_mz = def_state$conf$tolerance[["ms1 coarse"]], def_unit = "Da") ```
MS1 fine error

The precursor table masses can be of lower accuracy. Once there is a match within the coarse error, it can be further checked versus the fine error bounds directly in the mass spectrum.

```{r, echo=F} shinyscreen::mz_input(input_mz = "ms1_fine", input_unit = "ms1_fine_unit", def_mz = def_state$conf$tolerance[["ms1 fine"]], def_unit = "ppm") ```
MS1 EIC window

The mz interval over which the intensities are aggregated to generate a chromatogram.

```{r, echo=F} shinyscreen::mz_input(input_mz = "ms1_eic", input_unit = "ms1_eic_unit", def_mz = def_state$conf$tolerance[["eic"]], def_unit = "Da") ```
Retention time window

If the expected retention time has been specified for the compound, then search for the MS1 signature inside the window defined by this range.

```{r, echo=F} shinyscreen::rt_input(input_rt = "ms1_rt_win", input_unit = "ms1_rt_win_unit", def_rt = def_state$conf$tolerance[["rt"]], def_unit = "min") ```

Prescreening

MS1 intensity threshold

Ignore MS1 signal below the threshold.

```{r, echo=F}

numericInput(inputId = "ms1_int_thresh", label = NULL, value = def_stateconfprescreen$ms1_int_thresh)


<details><summary>MS2 intensity threshold</summary> 

Ignore MS2 signal below the threshold.

</details>
```{r, echo=F}

numericInput(inputId = "ms2_int_thresh",
             label = NULL,
             value = def_state$conf$prescreen$ms2_int_thresh)

MS1 signal-to-noise ratio.


numericInput(inputId = "s2n",
             label = NULL,
             value = def_state$conf$prescreen$s2n)
MS1/MS2 retention delay.

Look for associated MS2 spectrum within this window around the MS1 peak.

```{r, echo=F} shinyscreen::rt_input(input_rt = "ret_time_shift_tol", input_unit = "ret_time_shift_tol_unit", def_rt = def_state$conf$tolerance[["ret_time_shift_tol"]], def_unit = "min") ```

Subsetting and filtering

Plots

Report

Extract Data and Prescreen

Extract spectra from data files.

After Shinyscreen is configured, the compound and setid lists loaded, it is possible to proceed with extracting the data. This is potentially a time-intensive step, so some patience might be needed.

Once the data is extracted, it will be possible to quality check the spectra associated with the compounds specified in the setid list, to subset that data, look at the plots and publish a report.

```{r, echo=FALSE} actionButton(inputId = "extract", label = "Extract") ```

Browse Results