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