From dd266151a865464f5e8f23e3a57b6e30a2ec18c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Todor=20Kondi=C4=87?= <todor.kondic@uni.lu>
Date: Tue, 16 Aug 2022 16:44:54 +0200
Subject: [PATCH] app: Added report functionality.

---
 R/plotting.R      |  9 ++---
 R/shiny-ui-base.R | 89 +++++++++++++++++++++++++++++++++++++++++++++++
 inst/rmd/app.Rmd  | 18 ++++++++++
 3 files changed, 112 insertions(+), 4 deletions(-)

diff --git a/R/plotting.R b/R/plotting.R
index eff4b0a..e1b17df 100644
--- a/R/plotting.R
+++ b/R/plotting.R
@@ -491,6 +491,7 @@ guide_fun <- function() {
 
 narrow_summ <- function(summ,kvals,labs,...) {
         keys <- names(kvals)
+        ## keys <- keys[!is.na(keys)]
         needed <- setdiff(labs,keys)
         x <- as.list(c(needed,...))
         x <- c(list(summ,kvals),x)
@@ -498,8 +499,6 @@ narrow_summ <- function(summ,kvals,labs,...) {
 }
 
 make_eic_ms1_plot <- function(extr_ms1,summ,kvals,labs,axis="linear",rt_range=NULL, asp=1) {
-    
-    message("RTs: ", paste0(rt_range,coll=','))
     ## Get metadata.
     summ_rows <- narrow_summ(summ,kvals,labs,"mz","ms1_rt","ms1_int","Name","SMILES","Formula")
     ## Get the table with ms1 data.
@@ -613,9 +612,11 @@ make_spec_ms2_plot <- function(extr_ms2,summ,kvals,labs,axis="linear",asp=1) {
  
 }
 
-combine_plots <- function(p_eic_ms1,p_eic_ms2,p_spec_ms2) {
-    cowplot::plot_grid(p_eic_ms1,p_eic_ms2,p_spec_ms2,ncol=1,align='vh',axis='b')
+combine_plots <- function(p_eic_ms1,p_eic_ms2,p_spec_ms2,p_struct) {
+    cowplot::plot_grid(p_eic_ms1,p_struct,p_eic_ms2,p_spec_ms2,ncol=2,align='v',axis='l')
 }
 
+
+
     
     
diff --git a/R/shiny-ui-base.R b/R/shiny-ui-base.R
index 6270044..9aa1aba 100644
--- a/R/shiny-ui-base.R
+++ b/R/shiny-ui-base.R
@@ -1140,6 +1140,71 @@ mk_shinyscreen_server <- function(projects,init) {
             rvs$gui$datatab$adduct <- z$adduct
         }, label = "datatab-edit")
 
+        observeEvent(input$make_report_b,{
+            isolate({
+                ms1 <- rvs$m$extr$ms1
+                ms2 <- rvs$m$extr$ms2
+                summ <- rvs$m$out$tab$summ
+
+            })
+            req(NROW(summ)>0L)
+            req(NROW(ms1)>0L)
+            req(NROW(ms2)>0L)
+
+            cind <- rf_get_cindex()
+            key <- rf_get_cindex_key()
+            rt_range <- rf_get_rtrange()
+            labs <- req(rf_get_cindex_labs())
+            projdir <- rvs$gui$paths$project
+            fn <- paste0(file.path(projdir,input$report_name),'.pdf')
+            print(fn)
+            pdf(file=fn,paper="a4")
+            for (ri in 1:NROW(cind)) {
+                rowtab <- cind[ri][,..key] 
+                kvals <- lapply(rowtab,function (x) x[[1]])
+                names(kvals) <- key
+                message('Compound index row: ',ri)
+                p1 <- make_eic_ms1_plot(ms1,summ,kvals=kvals,
+                                        labs=labs,
+                                        asp=PLOT_EIC_ASPECT,
+                                        rt_range=rt_range)
+                p2 <- make_eic_ms2_plot(summ,
+                                        kvals=kvals,
+                                        labs=labs,
+                                        rt_range = rt_range,
+                                        asp=PLOT_EIC_ASPECT)
+
+                id <- rowtab <- cind[ri][,..key][["ID"]][[1]]
+                smi <- rvs$m$out$tab$comp[ID==(id),SMILES][[1]]
+                grb <- smiles2img(smi)
+                p_struc <- qplot(1:5, 2*(1:5), geom="blank") +
+                    annotation_custom(grb, xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf) +
+                    theme_empty
+
+                p_spec <- make_spec_ms2_plot(ms2,
+                                             summ,
+                                             kvals=kvals,
+                                             labs=labs)
+
+                cmb <- combine_plots(p1,p2,p_spec,p_struc)
+                print(cmb)
+            }
+            dev.off()
+        })
+
+        ## observeEvent(input$plot_save_single,{
+
+        ##     p1 <- rf_plot_eic_ms1()
+        ##     p2 <- rf_plot_eic_ms2()
+        ##     p3 <- rf_plot_spec_ms2()
+        ##     str <- rf_plot_struct()
+
+        ##     message("Plots saved to ",file.path(rvs$gui$paths$project,
+        ##                                         FIG_TOPDIR))
+
+            
+        ## })
+
         
         ## RENDER
         output$curr_proj <- renderText({
@@ -1287,6 +1352,30 @@ mk_shinyscreen_server <- function(projects,init) {
             
             
         ## },height=1000)
+        observeEvent(input$plot_brush,{
+            xmin <- input$plot_brush[["xmin"]]
+            xmax <- input$plot_brush[["xmax"]]
+            if (!is.null(xmin)) updateNumericInput(session=session,
+                                                   inputId="plot_rt_min",
+                                                   value=xmin)
+            if (!is.null(xmax)) updateNumericInput(session=session,
+                                                   inputId="plot_rt_max",
+                                                   value=xmax)
+            session$resetBrush("plot_brush")
+            
+        },label = "get_rt_from_selection")
+
+        observeEvent(input$plot_rt_click,
+        {
+            ## TODO: update to sensible range.
+            updateNumericInput(session=session,
+                               inputId="plot_rt_min",
+                               value=NA_real_)
+            updateNumericInput(session=session,
+                               inputId="plot_rt_max",
+                               value=NA_real_)
+        }, label = "reset_rt_range")
+
 
         output$plot_eic_ms1 <- renderPlot({
             rf_plot_eic_ms1()
diff --git a/inst/rmd/app.Rmd b/inst/rmd/app.Rmd
index 448b37e..7445af5 100644
--- a/inst/rmd/app.Rmd
+++ b/inst/rmd/app.Rmd
@@ -705,6 +705,24 @@ plotOutput("plot_spec_ms2",
 </div>
 <div></div>
 </div>
+<div style="display: flex-flow: row nowrap"> <!-- Control Bar -->
+```{r, echo=F}
+## actionButton("plot_save_single",
+##              label="Save this plot")
+## actionButton("plot_save_all",
+##              label="Save all plots")
+actionButton("make_report_b",
+             label="Create report")
+textInput("report_name",
+          label="Report Name",
+          value="report")
+## textInput("plot_ext",
+##           label = "Plot extension",
+##           value = "pdf")
+```
+
+</div> <\!-- Control Bar -\-> -->
+
 
 <!-- <div style="display: flex-flow: column nowrap"> <\!-- Main -\-> -->
 <!-- <div style="display: flex; flex-direction: row; flex-wrap: nowrap;"> <\!-- EICs and Structure -\-> -->
-- 
GitLab