From 45699cf748539c663cc72f396b9667fc123055b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Todor=20Kondi=C4=87?= <kontrapunkt@uclmail.net> Date: Sun, 1 Jan 2023 16:52:25 +0100 Subject: [PATCH] Fix #97 Everything under Measurement Properties refreshes correctly now. The reason why it did not was the overuse of req functions. --- DESCRIPTION | 2 +- R/shiny-state.R | 18 +++++++ R/shiny-ui-base.R | 133 ++++++++++++++++++---------------------------- 3 files changed, 71 insertions(+), 82 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 3ed66f9..2e7e99c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: shinyscreen Title: Pre-screening of Mass Spectrometry Data -Version: 1.2.2-0003 +Version: 1.2.3 Author: Todor Kondić Maintainer: Todor Kondić <todor.kondic@uni.lu> Authors@R: diff --git a/R/shiny-state.R b/R/shiny-state.R index b7b0570..8bb95a2 100644 --- a/R/shiny-state.R +++ b/R/shiny-state.R @@ -486,3 +486,21 @@ update_on_commit_chg <- function(summ,input,ptab,ltab) { summ[the_row,qa_pass:=apply(.SD,1,all),.SDcols=qflg] summ } + + +get_mprop_ms2_metadata <- function(ltab_entry) { + res <- list(rt=NA_real_,int=NA_real_,qa=character(0),ms2_sel=F) + + if (NROW(ltab_entry)==0L) return(res) + + res$rt = ltab_entry$ms1_rt + res$int = ltab_entry$ms1_int + z <- ltab_entry[.SD,.SDcols=patterns("qa_ms[12].*")] + lqa_vals <- as.list(ltab_entry[,.SD,.SDcols=patterns("qa_ms[12].*")]) + qa_names <- names(lqa_vals) + res$qa <- qa_names[as.logical(lqa_vals)] + res$ms2_sel = ltab_entry$ms2_sel + + res + +} diff --git a/R/shiny-ui-base.R b/R/shiny-ui-base.R index e3b4df5..ccafedf 100644 --- a/R/shiny-ui-base.R +++ b/R/shiny-ui-base.R @@ -786,10 +786,17 @@ mk_shinyscreen_server <- function(projects,init) { }) rf_get_ltab <- reactive({ - tab <- req(rf_select_from_summ()) + tab <- rf_select_from_summ() if (NROW(tab)!=0) get_ltab(tab) else data.frame() }) + rf_get_ltab_entry <- reactive({ + ltab <- rf_get_ltab() + if (NROW(ltab)>0L && isTruthy(input$sel_spec)) { + ltab[item==input$sel_spec] + } else data.frame() + }) + ## REACTIVE FUNCTIONS: PLOTS @@ -901,34 +908,6 @@ mk_shinyscreen_server <- function(projects,init) { }) - ## REACTIVE FUNCTIONS: MEASUREMENT PROPERTIES - - rf_msrprop_get_vals <- reactive({ - ptab <- rf_get_cindex_parents() - stab <- rf_select_from_summ() - - res <- if (NROW(stab)==1L && is.na(stab[1,an])) { - x1 <- list(rt=stab[1,ms1_rt],int=stab[1,ms1_int]) - x2 <- stab[1,.SD,.SDcols=patterns("qa_ms[12].*")] - qa <- as.logical(x2) - names(qa) <- names(x2) - c(x1,list(qa=qa),ms2_sel=F) - - } else { - selMS2 <- req(input$sel_spec) - xx <- rf_get_ltab() - x1 <- list(rt=xx[item==(selMS2),ms1_rt], - int=xx[item==(selMS2),ms1_int]) - x2 <- xx[item==(selMS2),.SD,.SDcols=patterns("qa_ms[12].*")] - qa <- as.logical(x2) - names(qa) <- names(x2) - x3 <- list(ms2_sel=xx[item==(selMS2),ms2_sel]) - c(x1,list(qa=qa),x3) - } - - res - }) - ## OBSERVERS @@ -1326,22 +1305,14 @@ mk_shinyscreen_server <- function(projects,init) { observe({ input$cmt_changes_b - res <- rf_msrprop_get_vals() - ## TODO: FIXME: Uncomment after debug. - if (isTruthy(res)) { - valrt = res$rt - valint = res$int - valms2sel = res$ms2_sel - selqa <- res$qa[QABOX_VALS] - selqa <- QABOX_VALS[selqa] - message("valms2sel: ", valms2sel) - message("selqa: ", paste(selqa,collapse=',')) - } else { - valrt = NA_real_ - valint = NA_real_ - selqa <- character(0) - valms2sel = F - } + ltab_entry <- rf_get_ltab_entry() + ## res <- rf_msrprop_get_vals() + res <- get_mprop_ms2_metadata(ltab_entry) + valrt = res$rt + valint = res$int + valms2sel = res$ms2_sel + selqa <- res$qa + updateNumericInput(session = session, inputId = "chg_ms1_rt", value = valrt) @@ -1360,18 +1331,18 @@ mk_shinyscreen_server <- function(projects,init) { value = valms2sel) }) - ## TODO: FIXME: Uncomment after debug? - ## observeEvent(input$cmt_changes_b,{ - ## summ <- req(rvs$m$out$tab$summ) - ## ptab <- req(rf_get_cindex_parents()) - ## ltab <- req(rf_get_ltab()) - ## rvs$m$out$tab$summ <- update_on_commit_chg(summ, - ## input=input, - ## ptab=ptab, - ## ltab=ltab) + observeEvent(input$cmt_changes_b,{ + summ <- req(rvs$m$out$tab$summ) + + ptab <- req(rf_get_cindex_parents()) + ltab <- req(rf_get_ltab()) + rvs$m$out$tab$summ <- update_on_commit_chg(summ, + input=input, + ptab=ptab, + ltab=ltab) - ## }) + }) @@ -1600,33 +1571,33 @@ mk_shinyscreen_server <- function(projects,init) { }) - ## FIXME: TODO: Uncomment after fixing. - ## output$print_spec_tab <- renderPrint({ - ## notfound <- "No MS2 spectrum has been found for this entry." - ## ms2tabsel <- req(rf_get_ltab()) - ## selMS2 <- req(input$sel_spec) - ## if (NROW(ms2tabsel)!=0L) { - ## lval <- lapply(ms2tabsel[item==(selMS2)],function(x) x) - ## ms2 <- rvs$m$extr$ms2 - ## kval <- rf_get_cindex_kval() - ## allval <- c(kval,lval) - ## ## There can be some duplicates. - ## common <- union(names(kval),names(lval)) - ## allval <- allval[common] - ## #Because in current implementation, kval may contain - ## #more than the names existing in extr$ms2. Also, - ## #BASE_KEY_MS2 does not contain `an', so we need to readd - ## #it. - ## key <- unique(c(names(allval)[names(allval) %in% BASE_KEY_MS2],"an")) - ## kval2 <- allval[key] - ## spec <- get_data_from_key(ms2,kval2)[,.(mz,intensity)] - ## ## as.character(lapply(1L:NROW(spec),function(nr) paste0(spec[nr,mz]," ",spec[nr,intensity]))) - ## print(as.data.frame(spec),row.names=F) + + output$print_spec_tab <- renderPrint({ + notfound <- "No MS2 spectrum has been found for this entry." + ms2tabsel <- rf_get_ltab() + selMS2 <- req(input$sel_spec) + if (NROW(ms2tabsel)!=0L) { + lval <- lapply(ms2tabsel[item==(selMS2)],function(x) x) + ms2 <- rvs$m$extr$ms2 + kval <- rf_get_cindex_kval() + allval <- c(kval,lval) + ## There can be some duplicates. + common <- union(names(kval),names(lval)) + allval <- allval[common] + #Because in current implementation, kval may contain + #more than the names existing in extr$ms2. Also, + #BASE_KEY_MS2 does not contain `an', so we need to readd + #it. + key <- unique(c(names(allval)[names(allval) %in% BASE_KEY_MS2],"an")) + kval2 <- allval[key] + spec <- get_data_from_key(ms2,kval2)[,.(mz,intensity)] + ## as.character(lapply(1L:NROW(spec),function(nr) paste0(spec[nr,mz]," ",spec[nr,intensity]))) + print(as.data.frame(spec),row.names=F) - ## } else { - ## notfound - ## } - ## }) + } else { + notfound + } + }) -- GitLab