Skip to content

Commit

Permalink
RSLC gradient included
Browse files Browse the repository at this point in the history
  • Loading branch information
Kiweler committed Jun 7, 2019
1 parent f874b97 commit c1adac6
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 43 deletions.
150 changes: 112 additions & 38 deletions R/gradient_functions.R
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,27 @@
#'
#' @return Gradient information as sentence.

gradient_as_string <- function(flat_json, group_number)
gradient_as_string <- function(flat_json, group_number, lc_pump)
{
assertive.types::assert_is_list(flat_json)
assertive.types::assert_is_a_number(group_number)
assertive.types::assert_is_a_string(lc_pump)

grad_tab <- one_gradient_table(flat_json, group_number)
grad_tab$`Duration[mm:ss]` %<>%
stringi::stri_replace_all_regex(pattern = ":.*", replacement = "") %<>%
stringi::stri_replace_all_regex(pattern = "^0", replacement = "")
grad_tab <- one_gradient_table(flat_json, group_number, lc_pump)

{
if(lc_pump == "Thermo EASY-nLC")
{
grad_tab$`Time[mm:ss]` %<>%
stringi::stri_replace_all_regex(pattern = ":0.*", replacement = "") %<>%
stringi::stri_replace_all_regex(pattern = "^0", replacement = "")
time <- grad_tab$`Time[mm:ss]`
}
else if(lc_pump == "RSLCnano")
{
time <- grad_tab$`Time[min]`
}
}

if(dim(table(grad_tab$`Flow[nl/min]`)) == 1)
{
Expand All @@ -27,85 +38,148 @@ gradient_as_string <- function(flat_json, group_number)
sep = "")
}

first <- paste("The quantity of B in percent is from ", grad_tab$`Mixture[%B]`[1], "% B in ",
grad_tab$`Duration[mm:ss]`[2], " minutes to ",
grad_tab$`Mixture[%B]`[2], "% B.",
first <- paste("The quantity of B in percent is from ", grad_tab$`Mixture[%B]`[1], "% B to ",
grad_tab$`Mixture[%B]`[2], "% B at minute ", time[2], ".",
sep = "")

following <- paste("In ", grad_tab$`Duration[mm:ss]`[3:nrow(grad_tab)], " minutes to ",
following <- paste("At minute ", time[3:nrow(grad_tab)], " to ",
grad_tab$`Mixture[%B]`[3:nrow(grad_tab)], "% B.", sep = "", collapse = " ")

paste(flow, first, following, sep=" ") %>%
return()
}


#' Gradient.
#' Create a list with all gradient tables.
#'
#' @param flat_json A flattened JSON file, created by "prepare_json()".
#' @param group_number An index that determines the group.
#' @param lc_pump Name of the used lc_pump, default = "Thermo EASY-nLC".
#' @param lc_pump Name of the used lc pump, default = "Thermo EASY-nLC"
#'
#' @return A table with gradient.
#' @return List of gradients for all groups
#'
#' @examples
#' # Real-time JSON-generation: `json <- generate_json(data)`
#' json <- MARMoSET::testfile_json
#'
#' flat_json <- flatten_json(json)
#'
#' one_gradient_table(flat_json, 1)
#' gradient_tables(flat_json)
#'
#' @export

one_gradient_table <- function(flat_json, group_number, lc_pump = "Thermo EASY-nLC")
gradient_tables <- function(flat_json, lc_pump = "Thermo EASY-nLC")
{
assertive.types::assert_is_list(flat_json)
assertive.types::assert_is_a_number(group_number)
assertive.properties::assert_is_not_null(flat_json[[paste("Group" , group_number , "Instruments", lc_pump, "InstrumentFriendName", sep = ".")]])
assertive.types::assert_is_a_string(lc_pump)

time <- flat_json[[paste0("Group.",group_number,".Instruments.Thermo EASY-nLC.Method.Gradient.Time [mm:ss]")]]
duration <- flat_json[[paste0("Group.",group_number,".Instruments.Thermo EASY-nLC.Method.Gradient.Duration [mm:ss]")]]
flow <- flat_json[[paste0("Group.",group_number,".Instruments.Thermo EASY-nLC.Method.Gradient.Flow [nl/min]")]]
mixture <- flat_json[[paste0("Group.",group_number,".Instruments.Thermo EASY-nLC.Method.Gradient.Mixture [%B]")]]
group_count <- flat_json %>% names() %>% stringi::stri_extract_first_regex('^Group\\.\\d+\\.') %>% table() %>% length()

gradient_tab <- data.frame(
"Time[mm:ss]" = time,
"Duration[mm:ss]" = duration,
"Flow[nl/min]" = flow,
"Mixture[%B]" = mixture,
check.names = FALSE,
stringsAsFactors = FALSE)
vector_of_gradient_tables <- lapply(1:group_count, function(group) one_gradient_table(flat_json, group, lc_pump))

return(gradient_tab)
return(vector_of_gradient_tables)
}


#' Create a list with all gradient tables.
#' Gradient.
#'
#' @param flat_json A flattened JSON file, created by "prepare_json()".
#' @param lc_pump Name of the used lc pump, default = "Thermo EASY-nLC"
#' @param group_number An index that determines the group.
#' @param lc_pump Name of the used lc_pump, default = "Thermo EASY-nLC".
#'
#' @return List of gradients for all groups
#' @return A table with gradient.
#'
#' @examples
#' # Real-time JSON-generation: `json <- generate_json(data)`
#' json <- MARMoSET::testfile_json
#'
#' flat_json <- flatten_json(json)
#'
#' gradient_tables(flat_json)
#' one_gradient_table(flat_json, 1)
#'
#' @export

gradient_tables <- function(flat_json, lc_pump = "Thermo EASY-nLC")
one_gradient_table <- function(flat_json, group_number, lc_pump = "Thermo EASY-nLC")
{
assertive.types::assert_is_list(flat_json)
assertive.types::assert_is_a_string(lc_pump)
assertive.types::assert_is_a_number(group_number)

group_count <- flat_json %>% names() %>% stringi::stri_extract_first_regex('^Group\\.\\d+\\.') %>% table() %>% length()
{
if(lc_pump == "Thermo EASY-nLC")
{
gradient_table <- EASYnLC_g_tab(flat_json = flat_json, group_number = group_number)
}
else if(lc_pump == "RSLCnano")
{
gradient_table <- RSLC_g_tab(flat_json = flat_json, group_number = group_number)
}
}
return(gradient_table)
}

vector_of_gradient_tables <- lapply(1:group_count, function(group) one_gradient_table(flat_json, group, lc_pump))
######################################################################################
#' Create gradient table for RSLCpump.
#'
#' @param flat_json A flattened JSON file, created by "prepare_json()".
#'
#' @return gradient table for RSLCpump

return(vector_of_gradient_tables)
RSLC_g_tab <- function(flat_json, group_number)
{
group_regex <- paste0("^Group.", group_number, ".Instruments.RSLCnano.Method.[0-9]+\\.[0-9]{3}")
RSLC_gradient <- stringi::stri_subset(names(flat_json), regex = group_regex)
# get values for these keys
gradient_values <- lapply(1:length(RSLC_gradient), function(key) flat_json[[RSLC_gradient[key]]] %>%stringi::stri_split(regex = " ")) %>%
as.data.frame() %>% t()

# shortening the rows
gradient_time <- stringi::stri_replace_all_regex(RSLC_gradient, pattern = "^Group.[:digit:].Instruments.RSLCnano.Method.", replacement = "") %>%
stringi::stri_split(regex = "\\[min\\]") %>%
as.data.frame() %>% t()

# combine values and keys
gradient_table <- as.data.frame(cbind(gradient_time, gradient_values[,1])) %>%
# tidy up the entries
dplyr::filter(!stringr::str_detect(V2, 'Equilibration|LoadingPump|ColumnOven.Valve')) %<>%
dplyr::mutate(V2 = V2 %>% stringi::stri_replace_first_fixed('Run','')) %<>%
dplyr::mutate(V2 = V2 %>% stringi::stri_trim()) %>%
# spread
tidyr::spread(key = V2, value = V3)

col2 <- colnames(gradient_table[2:length(gradient_table)]) %>% stringi::stri_replace_all_regex(pattern = '.PumpModule.NC_Pump.', replacement = '') %>%
stringi::stri_replace_all_regex(pattern = '%B.Value', replacement = 'Mixture[%B]') %>%
stringi::stri_replace_all_regex(pattern = 'Flow.Nominal', replacement = 'Flow[nl/min]') %>%
stringi::stri_trim()
colnames(gradient_table) <- c("Time[min]", col2)

# microliter to nl:
gradient_table$`Flow[nl/min]` %<>% as.character() %>% as.numeric() %>% magrittr::multiply_by(1000)
gradient_table$`Time[min]` %<>% as.character() %>% as.numeric()
gradient_table %<>% dplyr::arrange(`Time[min]`)

return(gradient_table)
}


#' Create gradient table for RSLCpump.
#'
#' @param flat_json A flattened JSON file, created by "prepare_json()".
#'
#' @return gradient table for RSLCpump

EASYnLC_g_tab <- function(flat_json, group_number)
{
time <- flat_json[[paste0("Group.",group_number,".Instruments.Thermo EASY-nLC.Method.Gradient.Time [mm:ss]")]]
duration <- flat_json[[paste0("Group.",group_number,".Instruments.Thermo EASY-nLC.Method.Gradient.Duration [mm:ss]")]]
flow <- flat_json[[paste0("Group.",group_number,".Instruments.Thermo EASY-nLC.Method.Gradient.Flow [nl/min]")]]
mixture <- flat_json[[paste0("Group.",group_number,".Instruments.Thermo EASY-nLC.Method.Gradient.Mixture [%B]")]]

gradient_table <- data.frame(
"Time[mm:ss]" = time,
"Duration[mm:ss]" = duration,
"Flow[nl/min]" = flow,
"Mixture[%B]" = mixture,
check.names = FALSE,
stringsAsFactors = FALSE)

return(gradient_table)
}
Binary file modified R/sysdata.rda
Binary file not shown.
3 changes: 2 additions & 1 deletion R/term_matching_functions.R
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ one_group_match_terms <- function(flat_json, term_matching_table, group_number)
}
else if (handle_type == "function")
{
meta_data_table[["Value"]][[this_row]] <- gradient_as_string(flat_json, group_number)
lc_pump <- term_matching_table[which(term_matching_table$term == "hplc_instrument"),]$example
meta_data_table[["Value"]][[this_row]] <- gradient_as_string(flat_json, group_number, lc_pump )
}
}

Expand Down
Binary file modified data/tmt_list.rda
Binary file not shown.
5 changes: 2 additions & 3 deletions vignettes/manipulate_term_match_table.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
library(MARMoSET)
library("MARMoSET")
```

## Structure
Expand Down Expand Up @@ -121,8 +121,7 @@ subset_tmt <- rbind(subset_tmt, new_row)

This so changed term matching table can be used with the function `match_terms()`.

```{R}
```{r}
subset_table <- one_group_match_terms(flat_json = flat_json,
term_matching_table = subset_tmt,
group_number = 1)
Expand Down
2 changes: 1 addition & 1 deletion vignettes/using_MARMoSET.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ gradient_table <- one_gradient_table(flat_json = flat_json,
vector_of_gradient_tables <- gradient_tables(flat_json = flat_json)
head(gradient_table, 3)
head(gradient_table, 2)
```

Finally to export all tables in a vector or one specific, the functions `save_group_table()` and `save_all_groups()`are helpful. The output of `gradient_tables()` or `match_terms()` goes in as `groups_vector` whereas the second argument, `output_path` expects a path with filename. `save_all_groups()` adds the group numbers automatically to each filename, `save_group_table()` takes it as third argument but doesn't add.
Expand Down

0 comments on commit c1adac6

Please sign in to comment.