R/GUI_2_source.R

Defines functions drexplorerGUI_2 outputRes_press2 contour_press doseResponseCurve_press medianEffect_press IAI_press fig_gen exampleDat_nl22B2_press exampleDat_UMSCC22B_press datFile_press2 GUI_2_main_callback GUI_2_main set_dirOutput2_

Documented in drexplorerGUI_2 set_dirOutput2_

#' setup output dir
set_dirOutput2_ <- function(){
  # set output dir according to input data
  dirOutput <- file.path(getwd(), 'drexplorer_results')
  if(!file.exists(dirOutput)){
    dir.create(dirOutput, recursive = TRUE)
  }
  guiSet("dirOutput_", dirOutput)
  dirOutput
}

GUI_2_main <- function(datFile, exampleDat_UMSCC22B, exampleDat_nl22B2,
                       IAI, IAImode, medianEffect, doseResponseCurve, contour, outputRes){
  dd <- guiGetSafe("PERSONAL_dataset_2")
  if(class(dd)[1] != "data.frame") stop("Data must be loaded.")
  res_design <- detect_ray_design(d1 = dd[, 1], d2 = dd[, 2], e = dd[, 3])
  ## get aux text
  text_design <- ifelse(res_design$isRayDesign == TRUE,
                        sprintf('This is a fixed ratio design.'),
                        sprintf('This is NOT a fixed ratio design.\t'))
  txDim <- sprintf('%d rows; %d columns in the data; %d effective records (0~1)',
                   nrow(res_design$drMat), ncol(res_design$drMat), sum(!res_design$ind_eAbnorm))
  txRcr <- sprintf('drug 1 only has %d records; drug 2 only has %d records, mixture has %d records.',
                   length(res_design$d1), length(res_design$d2), length(res_design$d12))
  tx_d2d1 <- sprintf('Observed d2.d1: %s; d2.d1 to be used: %.2f',
                     str_c(res_design$d2.d1_avail, collapse = ', '), res_design$d2.d1)
  texttt <- sprintf('>>>>>%s\n-------->%s\n%s\n%s\n\n', txDim, text_design, txRcr, tx_d2d1)
  texttt
}

GUI_2_main_callback <- function(arg){
  if( arg == "datFile" ) {
    datFile_press2()
  }else if( arg == "exampleDat_UMSCC22B" ) {
    exampleDat_UMSCC22B_press()
  }else if( arg == "exampleDat_nl22B2" ) {
    exampleDat_nl22B2_press()
  }else if( arg == "IAI" ) {
    IAI_press()
  }else if( arg == "medianEffect" ) {
    medianEffect_press()
  }else if( arg == "doseResponseCurve" ) {
    doseResponseCurve_press()
  }else if( arg == "contour" ) {
    contour_press()
  }else if( arg == "outputRes" ) {
    outputRes_press2()
  }
}


datFile_press2 <- function(){
  f_name <- guiGetValue("datFile")
  f_ext <- tolower(tools::file_ext(f_name))
  baseName <- str_split(basename(f_name), '\\.')[[1]][1]
  guiSet("FILE_NAME", baseName)
  if(f_ext == 'csv'){
    data <- read.csv(f_name)
  } else {
    data <- read.delim(f_name)
  }
  guiSet("PERSONAL_dataset_2", data)
  tt <- set_dirOutput2_()
}


exampleDat_UMSCC22B_press <- function(){
  # set output dir according to input data
  dirOutput <- set_dirOutput2_()
  ff <- file.path(dirOutput, 'UMSCC22B.csv')
  write.csv(UMSCC22B, file = ff, row.names = F)
  guiSetValue("datFile", ff)
  GUI_2_main_callback("datFile")  
}
if(getRversion() >= "2.15.1")  utils::globalVariables(c("UMSCC22B"))



exampleDat_nl22B2_press <- function() {
  # set output dir according to input data
  dirOutput <- set_dirOutput2_()
  ff <- file.path(dirOutput, 'nl22B2.csv')
  write.csv(nl22B2, file = ff, row.names = F)
  guiSetValue("datFile", ff)
  GUI_2_main_callback("datFile")  
}
if(getRversion() >= "2.15.1")  utils::globalVariables(c("nl22B2"))



fig_gen <- function(type = 'IAI', mode = 'both', return = FALSE){
  dd <- guiGetSafe("PERSONAL_dataset_2")
  fit <- fitIAI(d1 = dd[, 1], d2 = dd[, 2], e = dd[, 3],
                name1 = colnames(dd)[1], name2 = colnames(dd)[2])
  plotIAI(fit, type = type, mode = mode)
  if(return){
    return(fit)
  }
}


IAI_press <- function(){
  fig_gen(type = 'IAI', mode = guiGetValue("IAImode"))
}

medianEffect_press <- function(){
  fig_gen(type = 'medianEffect')
}

doseResponseCurve_press <- function(){
  fig_gen(type = 'doseResponseCurve')	
}


#' @importFrom tcltk tkmessageBox
contour_press <- function(){
  fit <- fig_gen(type = 'contour', return = TRUE)
  if(fit$meta$isRayDesign == TRUE){
    tkmessageBox(message = "This is a fixed ratio design; No contour plot can be constructed!",
                 title = "Warning" )
  }
}

outputRes_press2 <- function(){
  dirOutput <- set_dirOutput2_()
  pdf(file = file.path(dirOutput, sprintf('IAIplot_for_%s.pdf', guiGetSafe("FILE_NAME"))))
  dd <- guiGetSafe("PERSONAL_dataset_2")
  fit <- fitIAI(d1 = dd[, 1], d2 = dd[, 2], e = dd[, 3],
                name1 = colnames(dd)[1], name2 = colnames(dd)[2])
  plotIAI(fit, type = 'medianEffect')
  plotIAI(fit, type = 'doseResponseCurve')
  plotIAI(fit, type = 'contour')
  plotIAI(fit, type = 'IAI', mode = 'both')
  plotIAI(fit, type = 'IAI', mode = 'response')
  plotIAI(fit, type = 'IAI', mode = 'dose')
  dev.off()
  write.csv(fit$CI, file = file.path(dirOutput, sprintf('IAI_CI_%s.csv', guiGetSafe("FILE_NAME"))))
}


#' Launch Graphical User Interface (GUI) for drug interaction (IAI) analysis
#' 
#' This function will launch GUI for computing Interaction Index (IAI) in fixed ratio design. 
#' The GUI works across different platforms, but the appearance would be slightly different.
#'
#' @export
drexplorerGUI_2 <- function(){
  gui(GUI_2_main,
      argFilename = list(datFile=NULL),
      argCommand = list(exampleDat_UMSCC22B = NULL, exampleDat_nl22B2 = NULL, 
                        IAI = NULL, medianEffect = NULL, doseResponseCurve = NULL,
                        contour = NULL, outputRes = NULL),
      argList = list(exampleDat = c('UMSCC22B', 'nl22B2')),
      argOption = list(IAImode = c('both', 'response', 'dose')), 
      argGridOrder = c(1, 2, 2, 3, 3, 4, 5, 6, 7),
      callback = GUI_2_main_callback,
      helps=list(datFile = "A tab-delimilated file or csv file with column 1 being the drug 1 concentration and column 2 being drug 2 concentration and column 3 being the cell viability (between 0 and 1)",
                 exampleDat_UMSCC22B = "Select the UMSCC22B data as an example",
                 exampleDat_nl22B2 = "Select the nl22B2 data as an example",
                 IAI = "Generate Interaction Index plot",
                 IAImode = "The quantity to be plotted against the Interaction Index",
                 alpha = "Significance level in detecting outlier data points. Choose Ignore to omit outlier removal"),
      title = "drexplorer GUI--Drug Interaction",
      argText = list(datFile = "Load File ...              ",
                     exampleDat_UMSCC22B = "Use UMSCC22B data",
                     exampleDat_nl22B2 = "Use nl22B2 data", 
                     IAI = "Generate IAI plot", 
                     IAImode = "Quantity against IAI",
                     medianEffect = "Generate Median-Effect plot",
                     doseResponseCurve = "Generate dose-response curve",
                     contour = "Generate contour plot", 
                     outputRes = "Save results"),
      verbose=FALSE)
}
lshen1/drexplorer2 documentation built on June 2, 2020, 9:27 p.m.