From 9f60e1b6393793c9417e0a118c928eabed6db6f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Todor=20Kondi=C4=87?= <todor.kondic@uni.lu>
Date: Wed, 31 Aug 2022 15:29:49 +0200
Subject: [PATCH] app, plotting, shiny-ui-base: Add intensity zooming.

---
 R/plotting.R      | 11 ++++++++---
 R/shiny-ui-base.R | 41 +++++++++++++++++++++++++++++++++++++++--
 inst/rmd/app.Rmd  | 20 ++++++++++++++++++++
 3 files changed, 67 insertions(+), 5 deletions(-)

diff --git a/R/plotting.R b/R/plotting.R
index 56f6284..c6e6d45 100644
--- a/R/plotting.R
+++ b/R/plotting.R
@@ -525,7 +525,7 @@ narrow_summ <- function(summ,kvals,labs,...) {
 
 ### PLOTTING: TOP-LEVEL PLOT CREATION
 
-make_eic_ms1_plot <- function(extr_ms1,summ,kvals,labs,axis="linear",rt_range=NULL, asp=1) {
+make_eic_ms1_plot <- function(extr_ms1,summ,kvals,labs,axis="linear",rt_range=NULL,i_range=NULL, asp=1) {
     ## Get metadata.
     summ_rows <- narrow_summ(summ,kvals,labs,"mz","ms1_rt","ms1_int","Name","SMILES","Formula")
     ## Get the table with ms1 data.
@@ -533,7 +533,12 @@ make_eic_ms1_plot <- function(extr_ms1,summ,kvals,labs,axis="linear",rt_range=NU
 
     key <- names(kvals)
     ## Deal with retention time range.
-    rt_lim <- if (is.null(rt_range)) NULL else ggplot2::coord_cartesian(xlim=rt_range)#ggplot2::xlim(rt_range[[1]],rt_range[[2]])
+    coord <- if (is.null(rt_range) && is.null(i_range)) {
+                 NULL
+             } else {
+                 ggplot2::coord_cartesian(xlim=rt_range,
+                                          ylim=i_range)
+             }
     xrng <- range(pdata$rt) #if (!is.null(rt_range)) rt_range else range(pdata$rt)
     dx <- abs(xrng[[2]]-xrng[[1]])
     yrng <- range(pdata$intensity)
@@ -552,7 +557,7 @@ make_eic_ms1_plot <- function(extr_ms1,summ,kvals,labs,axis="linear",rt_range=NU
         ggplot2::xlab("retention time")+
         cust_geom_line()+
         scale_y(axis=axis,labels=sci10)+
-        rt_lim
+        coord
     ## annt_dx <- 5*dx/100.
     ## annt <- summ_rows[,.(x=..annt_dx+ms1_rt,y=ms1_int,txt=signif(ms1_rt,5))]
     ## ## Annotate.
diff --git a/R/shiny-ui-base.R b/R/shiny-ui-base.R
index d7a2b4a..a10305f 100644
--- a/R/shiny-ui-base.R
+++ b/R/shiny-ui-base.R
@@ -795,6 +795,16 @@ mk_shinyscreen_server <- function(projects,init) {
             if (is.na(x2)) x2 <- NA_real_
             c(x1,x2)
         })
+
+        rf_get_irange <- reactive({
+            y1 <- input$plot_i_min
+            y2 <- input$plot_i_max
+
+            if (is.na(y1)) y1 <- NA_real_
+            if (is.na(y2)) y2 <- NA_real_
+            c(y1,y2)
+
+        })
         rf_plot_eic_ms1 <- reactive({
             isolate({
                 ms1 <- rvs$m$extr$ms1
@@ -806,7 +816,18 @@ mk_shinyscreen_server <- function(projects,init) {
             make_eic_ms1_plot(ms1,summ,kvals=req(rf_get_cindex_kval()),
                               labs=req(rf_get_cindex_labs()),
                               asp=PLOT_EIC_ASPECT,
-                              rt_range=rf_get_rtrange())
+                              rt_range=rf_get_rtrange(),
+                              i_range=rf_get_irange())
+        })
+
+        rf_get_ms2_eic_rtrange <- reactive({
+            pms1 <- rf_plot_eic_ms1()
+            drng <- range(pms1$data$rt)
+            urng <- rf_get_rtrange()
+            if (is.na(urng[[1]])) urng[[1]] <- drng[[1]]
+            if (is.na(urng[[2]])) urng[[2]] <- drng[[2]]
+            print(urng)
+            urng
         })
 
         rf_plot_eic_ms2 <- reactive({
@@ -821,7 +842,7 @@ mk_shinyscreen_server <- function(projects,init) {
             make_eic_ms2_plot(summ,
                               kvals=rf_get_cindex_kval(),
                               labs=rf_get_cindex_labs(),
-                              rt_range = rf_get_rtrange(),
+                              rt_range = rf_get_ms2_eic_rtrange(),
                               asp=PLOT_EIC_ASPECT)
             
             
@@ -1365,12 +1386,22 @@ mk_shinyscreen_server <- function(projects,init) {
         observeEvent(input$plot_brush,{
             xmin <- input$plot_brush[["xmin"]]
             xmax <- input$plot_brush[["xmax"]]
+            ymin <- input$plot_brush[["ymin"]]
+            ymax <- input$plot_brush[["ymax"]]
+
             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)
+
+            if (!is.null(ymin)) updateNumericInput(session=session,
+                                                   inputId="plot_i_min",
+                                                   value=ymin)
+            if (!is.null(ymax)) updateNumericInput(session=session,
+                                                   inputId="plot_i_max",
+                                                   value=ymax)
             session$resetBrush("plot_brush")
             
         },label = "get_rt_from_selection")
@@ -1384,6 +1415,12 @@ mk_shinyscreen_server <- function(projects,init) {
             updateNumericInput(session=session,
                                inputId="plot_rt_max",
                                value=NA_real_)
+            updateNumericInput(session=session,
+                               inputId="plot_i_min",
+                               value=NA_real_)
+            updateNumericInput(session=session,
+                               inputId="plot_i_max",
+                               value=NA_real_)
         }, label = "reset_rt_range")
 
 
diff --git a/inst/rmd/app.Rmd b/inst/rmd/app.Rmd
index eb15085..a69f489 100644
--- a/inst/rmd/app.Rmd
+++ b/inst/rmd/app.Rmd
@@ -692,6 +692,26 @@ numericInput(inputId = "plot_rt_max",
 
 ```
 </div> <!-- RT div -->
+
+#### Intensity Range (MS1)
+
+<div style="display:flex; flex-direction: row;"> <!-- Intensity div -->
+```{r, echo=F}
+numericInput(inputId = "plot_i_min",
+             label="Start",
+             value=NA_real_,
+             width="15%")
+```
+```{r, echo=F}
+numericInput(inputId = "plot_i_max",
+             label="End",
+             value=NA_real_,
+             width="15%")
+
+
+```
+</div> <!-- Intensity div -->
+
 </div>
 <div>
 ```{r, echo=F}
-- 
GitLab