From 61ebfc23eec4de05a3ab0a4610239be4a075c6f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Todor=20Kondi=C4=87?= <todor.kondic@uni.lu> Date: Thu, 4 Aug 2022 17:28:41 +0200 Subject: [PATCH] app: Reintroduced structures. --- R/plotting.R | 51 +++++++++++++++++--------------- R/resources.R | 2 ++ R/shiny-ui-base.R | 74 +++++++++++++++++++++++++++-------------------- inst/rmd/app.Rmd | 14 +++++++-- 4 files changed, 84 insertions(+), 57 deletions(-) diff --git a/R/plotting.R b/R/plotting.R index 1fb7a4f..8644e0d 100644 --- a/R/plotting.R +++ b/R/plotting.R @@ -348,7 +348,13 @@ theme_eic <- function(...) theme_light()+ggplot2::theme(axis.title=ggplot2::elem legend.text=ggplot2::element_text(size=12L), plot.caption=ggplot2::element_text(size=12L),...) - +theme_empty <- ggplot2::theme_bw() +theme_empty$line <- ggplot2::element_blank() +theme_empty$rect <- ggplot2::element_blank() +theme_empty$strip.text <- ggplot2::element_blank() +theme_empty$axis.text <- ggplot2::element_blank() +theme_empty$plot.title <- ggplot2::element_blank() +theme_empty$axis.title <- ggplot2::element_blank() sci10 <- function(x) { prefmt <- formatC(x,format="e",digits=2) @@ -438,18 +444,21 @@ get_data_4_eic_ms1 <- function(extr_ms1,kvals,labs) { } ## Prepare MS2 eic data: rt and intensity + key made of splitby. -get_data_4_eic_ms2 <- function(summ,adduct,id,splitby) { - key <- list(adduct=adduct,ID=id) - tab <-get_data_from_key(tab=summ,key=key) - pdata <- tab[,.(intensity=ms2_int,rt=ms2_rt),by=c('ID',splitby,"an")] - pdata <- eval(bquote(pdata[,label:=make_line_label(..(lapply(splitby,as.symbol))),by=.(splitby)],splice=T)) - setkeyv(pdata,cols=c("ID",splitby,"rt")) +get_data_4_eic_ms2 <- function(summ,kvals,labs) { + tab <-get_data_from_key(tab=summ,key=kvals) + nms <- names(kvals) + byby <- unique(c(nms,labs,"an")) + pdata <- tab[,.(intensity=ms2_int,rt=ms2_rt),by=byby] + if (NROW(pdata)==0L) return(NULL) + xlxx <- as.character(labs) + pdata <- eval(bquote(pdata[,label:=make_line_label(..(lapply(xlxx,as.symbol))),by=.(xlxx)],splice=T)) + setkeyv(pdata,cols=c(labs,"rt")) pdata } -make_eic_ms1_plot <- function(extr_ms1,summ,kvals,labs,axis="linear",rt_range=NULL) { +make_eic_ms1_plot <- function(extr_ms1,summ,kvals,labs,axis="linear",rt_range=NULL, asp=0.5) { ## Get the table with ms1 data. @@ -465,7 +474,7 @@ make_eic_ms1_plot <- function(extr_ms1,summ,kvals,labs,axis="linear",rt_range=NU dy <- abs(yrng[[2]]-yrng[[1]]) ## Calculate aspect ratio. - aspr <- if (dx < .Machine$double.eps) 1 else 0.5*as.numeric(dx)/as.numeric(dy) + aspr <- if (dx < .Machine$double.eps) 1 else asp*as.numeric(dx)/as.numeric(dy) tag_txt = paste0(sapply(names(kvals),function (nx) paste0(nx,": ", kvals[[nx]])), @@ -486,22 +495,17 @@ make_eic_ms1_plot <- function(extr_ms1,summ,kvals,labs,axis="linear",rt_range=NU } -make_eic_ms2_plot <- function(summ,key,splitby,axis="linear",rt_range=NULL) { - set <- key[['set']] - id <- key[['id']] - adduct <- key[['adduct']] - key <- list(set=set, - adduct=adduct, - ID=id) - +make_eic_ms2_plot <- function(summ,kvals,labs,axis="linear",rt_range=NULL,asp=0.5) { + ## TODO ## Get plotting data for the compound. pdata <- get_data_4_eic_ms2(summ, - adduct=adduct, - id=id, - splitby=splitby) + kvals=kvals, + labs=labs) + + if (NROW(pdata)==0L) return(NULL) ## Get metadata. - summ_row <- get_data_from_key(summ,key=key) + summ_row <- get_data_from_key(summ,key=kvals) ## Deal with retention time range. rt_lim <- if (is.null(rt_range)) NULL else ggplot2::xlim(rt_range) @@ -511,10 +515,11 @@ make_eic_ms2_plot <- function(summ,key,splitby,axis="linear",rt_range=NULL) { dy <- abs(yrng[[2]]-yrng[[1]]) ## Fix aspect ratio. - aspr <- if (dx < .Machine$double.eps) 1 else 0.5*as.numeric(dx)/as.numeric(dy) + aspr <- if (dx < .Machine$double.eps) 1 else asp*as.numeric(dx)/as.numeric(dy) ## Derive various labels. - tag_txt = paste0("Set: ", set, " ID: ",id) + tag_txt = paste0(sapply(names(kvals),function (nx) paste0(nx,": ", kvals[[nx]])), + collapse='; ') title_txt = paste0("MS2 EIC for ion m/z = ",paste0(signif(unique(summ_row$mz),digits=7L),collapse=", ")) subt_txt = if (!length(summ_row$Name)==0L && !is.na(summ_row$Name) && nchar(summ_row$Name)>0L) summ_row$Name else NULL ## Base plot. diff --git a/R/resources.R b/R/resources.R index 8ff85ef..4c3b5d3 100644 --- a/R/resources.R +++ b/R/resources.R @@ -292,3 +292,5 @@ ARRANGE_CHOICES <- c(nothing="nothing", mz="mz", rt="rt", id="ID") + +PLOT_EIC_ASPECT <- 0.75 diff --git a/R/shiny-ui-base.R b/R/shiny-ui-base.R index 9ae0b4f..6477a3d 100644 --- a/R/shiny-ui-base.R +++ b/R/shiny-ui-base.R @@ -767,53 +767,59 @@ mk_shinyscreen_server <- function(projects,init) { }) req(NROW(summ)>0L) req(NROW(ms1)>0L) - make_eic_ms1_plot(ms1,summ,kvals=req(rf_get_cindex_kval()),labs=req(rf_get_cindex_labs())) + make_eic_ms1_plot(ms1,summ,kvals=req(rf_get_cindex_kval()), + labs=req(rf_get_cindex_labs()), + asp=PLOT_EIC_ASPECT) }) rf_plot_eic_ms2 <- reactive({ isolate({ summ <- rvs$m$out$tab$summ - cind <- rf_get_cindex() }) req(NROW(summ)>0L) - req(NROW(cind)>0L) - row <- input$cindex_row_last_clicked - req(row) - sel <- cind[row] + gg <- rf_plot_eic_ms1() rt_rng <- range(gg$data$rt) make_eic_ms2_plot(summ, - key=rf_get_cindex_kval(), - splitby=c("tag"), - rt_range = rt_rng) + kvals=rf_get_cindex_kval(), + labs=rf_get_cindex_labs(), + rt_range = rt_rng, + asp=PLOT_EIC_ASPECT) }) - rf_plot_spec_ms2 <- reactive({ - isolate({ - summ <- rvs$m$out$tab$summ - ms2 <- rvs$m$extr$ms2 - cind <- rf_get_cindex() - }) - req(NROW(summ)>0L) - req(NROW(ms2)>0L) + rf_plot_struct <- reactive({ + cind <- rf_get_cindex() + key <- rf_get_cindex_key() req(NROW(cind)>0L) - row <- input$cindex_row_last_clicked - req(row) - sel <- cind[row] - - make_spec_ms2_plot(ms2, - summ, - set=sel$set, - adduct=sel$adduct, - id=sel$ID, - splitby=c("adduct","tag")) - - - }) + row <- req(input$cindex_row_last_clicked) + id <- rowtab <- cind[row][,..key][["ID"]][[1]] + smi <- rvs$m$out$tab$comp[ID==(id),SMILES][[1]] + print("smiles:") + print(smi) + grb <- smiles2img(smi) + xx <- qplot(1:5, 2*(1:5), geom="blank") + + annotation_custom(grb, xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf) + + theme_empty + xx + }) + + ## rf_plot_spec_ms2 <- reactive({ + ## isolate({ + ## summ <- rvs$m$out$tab$summ + ## ms2 <- rvs$m$extr$ms2 + ## }) + ## req(NROW(summ)>0L) + ## req(NROW(ms2)>0L) + ## req(NROW(cind)>0L) + ## make_spec_ms2_plot(ms2, + ## summ, + ## kvals=req(rf_get_cindex_kval()), + ## labs=req(rf_get_cindex_labs())) + ## }) ## OBSERVERS @@ -1227,9 +1233,13 @@ mk_shinyscreen_server <- function(projects,init) { output$plot_eic_combined <- renderPlot({ p1 <- rf_plot_eic_ms1() - p2 <- NULL#rf_plot_eic_ms2() + p2 <- rf_plot_eic_ms2() combine_plots(p1,p2) }) + + output$plot_struct <- renderPlot({ + rf_plot_struct() + }) ## output$plot_eic_ms1 <- renderPlot({ ## rf_plot_eic_ms1() ## }) @@ -1239,7 +1249,7 @@ mk_shinyscreen_server <- function(projects,init) { ## }) output$plot_spec_ms2 <- renderPlot({ - rf_plot_spec_ms2() + NULL #rf_plot_spec_ms2() }) diff --git a/inst/rmd/app.Rmd b/inst/rmd/app.Rmd index 5f3de6a..c9755f0 100644 --- a/inst/rmd/app.Rmd +++ b/inst/rmd/app.Rmd @@ -666,6 +666,8 @@ DT::DTOutput("cindex") <div style="display: flex-flow: column nowrap"> ### Viewer +<div style="display: flex; flex-direction: row; flex-wrap: nowrap;"> +<div style="width: 70%;"> <!-- EIC ID Plot --> ```{r,echo=F} ## plotOutput("plot_eic_ms1", ## hover = hoverOpts(id="plot_hover", @@ -693,14 +695,22 @@ plotOutput("plot_eic_combined", dblclick = "plot_rt_click", brush = "plot_brush") +``` +</div> <!-- EIC ID Plot --> +<div style="width: 30%;"> <!-- Structure --> +```{r, echo=F} +plotOutput("plot_struct") +``` +</div> +</div> +```{r, echo=F} + plotOutput("plot_spec_ms2", hover = hoverOpts(id="plot_hover", delayType = "throttle", delay=100), dblclick = "plot_mz_click", brush = brushOpts(id="plot_mz_brush")) - - ``` <div style="display: flex-flow: row nowrap"> <!-- Control Bar --> -- GitLab