From ce2fa67dab9830d4dba4d6385daed701b9ee3753 Mon Sep 17 00:00:00 2001 From: Huemer Barbara Date: Sat, 4 Jul 2026 00:05:24 +0200 Subject: [PATCH] started with ui. made a new app.R for that and made the home page and started with the explore page. Header with baselayout is also done. --- app.R | 58 +++++++++++++ dev/app.R | 2 +- explore_page.R | 72 ++++++++++++++++ home_page.R | 44 ++++++++++ www/{ExampleXL.png => example_file.png} | Bin www/logo.png | Bin 23092 -> 0 bytes www/{logov2.svg => logo.svg} | 0 www/styles.css | 104 ++++++++++++++++++++++++ 8 files changed, 279 insertions(+), 1 deletion(-) create mode 100644 app.R create mode 100644 explore_page.R create mode 100644 home_page.R rename www/{ExampleXL.png => example_file.png} (100%) delete mode 100644 www/logo.png rename www/{logov2.svg => logo.svg} (100%) create mode 100644 www/styles.css diff --git a/app.R b/app.R new file mode 100644 index 0000000..6459ebc --- /dev/null +++ b/app.R @@ -0,0 +1,58 @@ +shiny::devmode(TRUE) + +library(shiny) +library(bslib) +theme <- bs_theme( + primary = "#7faeff" # blue-light +) + +source("R/Global.R") +source("home_page.R") +source("explore_page.R") + + + + +inspect_page <- tagList( + tags$div( + "Hello World – Page C") +) + +optimize_page <- tagList( + tags$div( + "Hello World – Page D") +) + +# --- UI --- + +ui <- page_navbar( + title = tags$img( + "Plateflow", + src = "logo.svg", + height = "35px", + alt = "InnerAnalyticsLogo" + ), + header = tags$head( + tags$link(rel = "stylesheet", href = "styles.css") + ), + theme = theme, + + nav_panel("Home", home_page), + nav_panel("EXPLORE", explore_page), + nav_panel("INSPECT", inspect_page), + nav_panel("OPTIMIZE", optimize_page) +) + +# --- Server --- + +server <- function(input, output, session) { + # input$page holds the currently active tab name if you ever need it + # e.g. observeEvent(input$page, { cat("Switched to:", input$page, "\n") }) + output$sessioninfo <- renderPrint({ sessionInfo()}) + + +} + + + +shinyApp(ui = ui, server = server) \ No newline at end of file diff --git a/dev/app.R b/dev/app.R index 3d99621..5252304 100644 --- a/dev/app.R +++ b/dev/app.R @@ -441,7 +441,7 @@ server <- function(input, output, session) { numericInput("dilutionFac", "dilution factor", value = NA, min = 0, max = 10), numericInput("NoDil", "no. of dilutions", value = NA, min = 8), numericInput("NoDilSer", "no. of dil. series", value = NA), - verbatimTextOutput("dilutions") + verbatimTextOutput("dilutions") #TODO_BARBARA Was wird hier ausgegeben? Sehe in ui nichts ), h4("log-dilutions from settings above"), column( diff --git a/explore_page.R b/explore_page.R new file mode 100644 index 0000000..da6a223 --- /dev/null +++ b/explore_page.R @@ -0,0 +1,72 @@ +explore_4pl <- tagList( + tags$p("hallo") +) + +explore_linear <- tagList( + tags$p("linear") +) + + + + +explore_page <- layout_sidebar( + sidebar = sidebar( + class = "sidebar", + tags$div( class = "sidebar_collector", + tags$h5( class = "sidebar_collector_header", + "Exploration Settings" + ), + sliderInput("sdfac", "Variability of lower to upper asymptote [%]:", min = 0, max = 100, value = 50), + sliderInput("potencydiff", "Potency of test [%]:", min = 0, max = 200, value = 100), + checkboxInput("PureErrMeta","Use pure error", FALSE), + checkboxInput("heterosked","Heteroskedastic noise", FALSE), + ), + tags$div( class = "sidebar_collector", + tags$h5( class = "sidebar_collector_header", "Curve Settings"), + numericInput("lowAsymptREF", "lower asymptote REF", 10, step = 1, min = 0), + numericInput("lowAsymptTEST", "lower asymptote TEST", 10, step = 1, min = 0), + numericInput("uppAsymptREF", "upper asymptote REF", 110, step = 1, min = 0), + numericInput("uppAsymptTEST", "upper asymptote TEST", 110, step = 1, min = 0), + numericInput("slopeREF", "slope REF", 1, step = 0.1, min = -10), + numericInput("slopeTEST", "slope TEST", 1, step = 0.1, min = -10), + numericInput("EC50", "EC50 REF", -3.5), + numericInput("potDiff", "potency difference", 0) + ), + tags$div( class = "sidebar_collector", + tags$h5( class = "sidebar_collector_header", "Dilutions"), + numericInput("CONC1", "highest concentration", 0.3, min = -3.5), + numericInput("CONC2", "2nd concentration", 0.15), + numericInput("CONC3", "3rd concentration", 0.075), + numericInput("CONC4", "4th concentration", 0.0375), + numericInput("CONC5", "5th concentration", 0.01875), + numericInput("CONC6", "6th concentration", 0.00938), + numericInput("CONC7", "7th concentration", 0.00469), + numericInput("CONC8", "8thd concentration", 0.00235), + numericInput("CONC9", "9thd concentration", value = NA), + numericInput("CONC10", "10th concentration", value = NA), + numericInput("CONC11", "11th concentration", value = NA), + numericInput("CONC12", "lowest concentration", NA) + ), + tags$div( class = "sidebar_collector", + tags$h5( class = "sidebar_collector_header", "Geometric Dilution Scheme"), + numericInput("ConcStart", "starting concentration", value = NA, min = 0), + numericInput("dilutionFac", "dilution factor", value = NA, min = 0, max = 10), + numericInput("NoDil", "no. of dilutions", value = NA, min = 8), + numericInput("NoDilSer", "no. of dil. series", value = NA, min = 0), #TODO 1? + ), + ), + + + # Main content goes here (can be multiple elements) + navset_pill( + id = "tab_menu", + nav_panel("4PL", explore_4pl), + nav_panel("LINEAR", explore_linear) + ), + tags$div( + box( # TODO + title = "Simulated data per log-concentration", solidHeader = TRUE, width = 12, "incl. mean, sd and CV%", + DT::dataTableOutput("ConctabMeta") + ), + ) +) diff --git a/home_page.R b/home_page.R new file mode 100644 index 0000000..79efdf2 --- /dev/null +++ b/home_page.R @@ -0,0 +1,44 @@ +home_page <- tagList( + tags$div( style = "align-self: center", + tags$div( class = "home-text-section", + tags$h3("Welcome to Plateflow"), + tags$p("Plateflow allows you to EXPLORE, INSPECT and OPTIMIZE your data in + the context of a 4 PL fit or a linear regression fit. "), + ), + + tags$div( class = "home-text-section", + tags$h4("Readable formats and expected structure"), + tags$p("Plateflow is optimized for uploadfiles in the folowing formats: + .xlsx, .csv and .numbers."), + tags$ul( + tags$li("1 column with the dilution concentrations (first or last column) is expected"), + tags$li("The column name of the dilution concentrations can be as follows: concentration, dose, log_concentration, log_dose (first letter can be capital). + It is assumed, that the concentrations are in anti-log or in natural log mode."), + tags$li("2 columns of reference and test sample readouts, respectively, in this order, are expected"), + tags$li("The column names for reference and test are free to set, but must differ for all columns"), + ), + tags$p("You can download an example", tags$a("TestFile.xlsx ", target = "self", href = "TestFile.xlsx"), "File here."), + tags$h6("Example filestructure:"), + tags$img(src= "example_file.png", width = "800px", alt="example filestructure for upload", style = " max-width:800px"), + tags$br(), + ), + + tags$div( class = "home-text-section", + tags$br(), + tags$h4("Information on dilution settings"), #TODO + tags$p("Bend points are calculated according to following formula:", + withMathJax(" $$bp_{1/2} = \\pm\\frac{1.31696}{Hill's slope}$$"), + "Please refer to this", a(href = "ADONIS.pdf", "Whitepaper", download = NA, target = "_blank"), "for further details.", #TODO this link does not work for me + ), + tags$br(), + ), + + tags$div( class = "home-text-section", + tags$h4("Plateflow Point of Contact"), + tags$p("At InnerAnalytics, we are happy to hear from you. You can contact us under: ", + tags$a("info@inner-analytics.eu", href = "mailto:info@inner-analytics.eu")), + tags$p("If you would like to report a bug, we would appreciate it if you sent us the following infos to help us solve your request as fast as possible: "), + verbatimTextOutput("sessioninfo"), #TODO actually output this + ), + ) +) \ No newline at end of file diff --git a/www/ExampleXL.png b/www/example_file.png similarity index 100% rename from www/ExampleXL.png rename to www/example_file.png diff --git a/www/logo.png b/www/logo.png deleted file mode 100644 index c6a6fc3b04057e92d1d7df16bde065c400d4d9c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23092 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 a{AUyho~Gw8-