From 4231db5d858509b12f48d6724bfa7db19b7393df Mon Sep 17 00:00:00 2001
From: Lea Seep <74967328+LeaSeep@users.noreply.github.com>
Date: Thu, 19 Dec 2024 14:25:39 +0100
Subject: [PATCH] Updates based on thorough first user assessment (#426)
* changed to show debug text again; to let user know what is going on; addresses #421
* Make things clearer in layout, incl. button design, placement, tip highlights and promoting more parallelism (#419, #413, #414)
* changes and clean up to the docs to easen the retrieval of information
* indicate that batch collection is optional, adding explicit help file - addresses #418
* making top links more obvious; attention no order change #415 as suggested
* make cOmicsArt print prettier
* Crash fix sig ana (#420)
* add hiding of tabs to avoid usage of results; fixes #417
* fixed to work with native SumExp next to cOmicsArt created #404 (#425)
---
docs/interface-details/02-selection.md | 2 +-
docs/interface-details/03-pre-processing.md | 2 +-
program/shinyApp/R/data_selection/ui.R | 29 ++--
program/shinyApp/R/enrichment_analysis/ui.R | 3 +-
program/shinyApp/R/heatmap/ui.R | 2 +-
program/shinyApp/R/help_tab/ui.R | 14 +-
program/shinyApp/R/module_DownloadReport.R | 3 +-
program/shinyApp/R/pca/ui.R | 18 +--
program/shinyApp/R/pre_processing/ui.R | 4 +-
program/shinyApp/R/sample_correlation/ui.R | 2 +-
program/shinyApp/R/significance_analysis/ui.R | 3 +-
.../shinyApp/R/single_gene_visualisation/ui.R | 3 +-
.../DataSelection_DataUploadFileInput.md | 10 +-
.../helpfiles/DataSelection_MetaData.md | 6 +-
.../helpfiles/DataSelection_RowSelection.md | 6 +-
.../helpfiles/DataSelection_SummarizedExp.md | 6 +-
.../DataSelection_UploadInspection.md | 6 +-
program/shinyApp/helpfiles/EA_Options.md | 6 +-
.../shinyApp/helpfiles/Heatmap_Aesthetics.md | 6 +-
.../helpfiles/Heatmap_FurtherOptions.md | 7 +-
program/shinyApp/helpfiles/Heatmap_Options.md | 6 +-
.../helpfiles/Heatmap_RowAnnoBased.md | 6 +-
program/shinyApp/helpfiles/PCA_Choices.md | 6 +-
.../shinyApp/helpfiles/PreProcessing_Batch.md | 12 ++
.../shinyApp/helpfiles/PreProcessing_DESeq.md | 6 +-
.../helpfiles/PreProcessing_Procedures.md | 6 +-
.../shinyApp/helpfiles/SampleCorr_Choices.md | 7 +-
.../shinyApp/helpfiles/SampleCorr_Color.md | 6 +-
.../helpfiles/SampleCorr_Downloads.md | 6 +-
program/shinyApp/helpfiles/SigAna_Choices.md | 7 +-
.../helpfiles/SigAna_Intersections.md | 6 +-
program/shinyApp/helpfiles/SigAna_Vis.md | 7 +-
.../shinyApp/helpfiles/SingleGene_Options.md | 8 +-
.../shinyApp/helpfiles/SingleGene_Select.md | 6 +-
.../shinyApp/helpfiles/TakingNotesMD_help.md | 6 +-
.../shinyApp/helpfiles/helpTab_question.md | 6 +-
program/shinyApp/server.R | 148 +++++++++++++++---
program/shinyApp/ui.R | 47 +++++-
38 files changed, 353 insertions(+), 87 deletions(-)
create mode 100644 program/shinyApp/helpfiles/PreProcessing_Batch.md
diff --git a/docs/interface-details/02-selection.md b/docs/interface-details/02-selection.md
index 5393058a..b4f4cc05 100644
--- a/docs/interface-details/02-selection.md
+++ b/docs/interface-details/02-selection.md
@@ -61,7 +61,7 @@ Very similar to the `File Input`, but replacing the sample annotation with the
- **Omic Type that is uploaded**: Select the type of omics data you are uploading (Transcriptomics, Lipidomics, Metabolomics).
-- **Start straight away with a test-dataset!**: Click this button to start with a test dataset.
+- **Upload data**: Click this button to start with a test dataset.
## Main Panel 💡
diff --git a/docs/interface-details/03-pre-processing.md b/docs/interface-details/03-pre-processing.md
index b5a8c064..04af179a 100644
--- a/docs/interface-details/03-pre-processing.md
+++ b/docs/interface-details/03-pre-processing.md
@@ -171,7 +171,7 @@ The options (and steps) of preprocessing are as follows:
---
-### Select Batch Effect Column
+### [optional] Select Batch Effect Column
Choose a batch effect if applicable. Possible choices are taken from the sample
annotation columns. **Important**: This step is **optional**, as sometimes no batches need
diff --git a/program/shinyApp/R/data_selection/ui.R b/program/shinyApp/R/data_selection/ui.R
index 51c2d377..aa5d2f78 100644
--- a/program/shinyApp/R/data_selection/ui.R
+++ b/program/shinyApp/R/data_selection/ui.R
@@ -44,7 +44,7 @@ data_selection_sidebar_panel <- sidebarPanel(
label = "Upload new data",
width = "80%",
icon = icon('paper-plane'),
- style = "color: #fffff; background-color: #90DBF4; border-color: #000000"
+ style = "color: black; background-color: white; border-color: black;"
),
hr(style = "border-top: 1px solid #858585;")
),
@@ -71,7 +71,7 @@ data_selection_sidebar_panel <- sidebarPanel(
label = "Upload new data",
width = "80%",
icon = icon('paper-plane'),
- style = "color: #fffff; background-color: #90DBF4; border-color: #000000",
+ style = "color: black; background-color: white; border-color: black;"
),
hr(style = "border-top: 1px solid #858585;")
),
@@ -111,7 +111,7 @@ data_selection_sidebar_panel <- sidebarPanel(
label = "Upload new data",
width = "80%",
icon = icon('paper-plane'),
- style = "color: #fffff; background-color: #90DBF4; border-color: #000000",
+ style = "color: black; background-color: white; border-color: black;"
),
hr(style = "border-top: 1px solid #858585;")
),
@@ -130,9 +130,8 @@ data_selection_sidebar_panel <- sidebarPanel(
br(),
actionButton(
inputId = "EasyTestForUser",
- label = "Start straight away with a test-dataset!",
- icon = icon('paper-plane'),
- style = "color: #fffff; background-color: #90DBF4; border-color: #000000"
+ label = "Upload test data",
+ style = "color: black; background-color: white; border-color: black;"
),
hr(style = "border-top: 1px solid #858585;")
)
@@ -145,6 +144,7 @@ data_selection_main_panel <- mainPanel(
div(id ="InfoBox_DataSelection",
htmlOutput(outputId = "debug", container = pre)
),
+ div(id = "mainPanel_other",
# add link to toggle on the div geneAnno_toggle
actionButton(
inputId = "geneAnno_toggle_button",
@@ -164,7 +164,7 @@ data_selection_main_panel <- mainPanel(
fluidRow(
column(5,
actionButton(
- "select_data", "Select Data",
+ "select_data", "[optional] Select Data",
width = "100%",
icon = icon('filter'),
style = "color: #fffff; background-color: white; border-color: #000000"
@@ -175,10 +175,18 @@ data_selection_main_panel <- mainPanel(
condition = "input.select_data % 2 == 0",
fluidRow(column(5,
actionButton(
- "use_full_data", "Use Full Dataset",
+ "use_full_data", "Go to Preprocessing",
width = "100%",
- icon = icon('rocket'),
- style = "color: #fffff; background-color: #70BF4F47; border-color: #000000"
+ icon = icon("fas fa-mouse-pointer"),
+ style = "
+ background-color: white;
+ color: black;
+ border: 2px solid darkgrey;
+ font-size: 15px;
+ font-weight: bold;
+ box-shadow: 3px 3px 5px rgba(255, 0, 0, 0.8);
+ padding: 5px 5px;
+ border-radius: 10px;"
)
))
),
@@ -222,6 +230,7 @@ data_selection_main_panel <- mainPanel(
inputId = "refresh1",
label = "YOu should not be seeing this"
))
+ )
)
diff --git a/program/shinyApp/R/enrichment_analysis/ui.R b/program/shinyApp/R/enrichment_analysis/ui.R
index 311e8468..be1418d3 100644
--- a/program/shinyApp/R/enrichment_analysis/ui.R
+++ b/program/shinyApp/R/enrichment_analysis/ui.R
@@ -105,7 +105,8 @@ ea_sidebar <- function(ns){
uiOutput(outputId = ns("UniverseOfGene_ui")),
actionButton(
inputId = ns("enrichmentGO"),
- label = "Get Enrichment Analysis"
+ label = "Get Enrichment Analysis",
+ icon = icon("fas fa-mouse-pointer")
),
hr(style = "border-top: 1px solid #000000;"),
uiOutput(outputId = ns("KeggPathwayID_ui")),
diff --git a/program/shinyApp/R/heatmap/ui.R b/program/shinyApp/R/heatmap/ui.R
index dadd44ad..40d61928 100644
--- a/program/shinyApp/R/heatmap/ui.R
+++ b/program/shinyApp/R/heatmap/ui.R
@@ -56,7 +56,7 @@ heatmap_sidebar<- function(ns){
actionButton(
inputId = ns("Do_Heatmap"),
label = "Get Heatmap",
- icon(name = "fas fa-laptop-code")
+ icon(name = "fas fa-mouse-pointer")
),
hr(style = "border-top: 1px solid #000000;"),
h5("Aesthetics") %>% helper(type = "markdown", content = "Heatmap_Aesthetics"),
diff --git a/program/shinyApp/R/help_tab/ui.R b/program/shinyApp/R/help_tab/ui.R
index 8b8213b2..19e95cb5 100644
--- a/program/shinyApp/R/help_tab/ui.R
+++ b/program/shinyApp/R/help_tab/ui.R
@@ -17,7 +17,7 @@ help_tab_sidebar_panel <- sidebarPanel(
inputId = "get_help",
label = "GO!",
icon = icon('paper-plane'),
- style = "color: #fffff; background-color: #90DBF4; border-color: #000000"
+ style = "color: black; background-color: white; border-color: black;"
),
div(
id = "horizontalLine",
@@ -46,7 +46,17 @@ help_tab_sidebar_panel <- sidebarPanel(
help_tab_main_panel <- mainPanel(
id = "mainPanel_help_tab",
h4("Main Panel",id = "Test"),
- actionButton("start_tour", span(icon("hand-pointer"),"Tour around cOmicsArt"),style = "background-color: #00c6ff; color: white; padding: 10px 20px; border-radius: 10px; transition: transform 0.2s;"),
+ actionButton(
+ "start_tour",
+ span(icon("hand-pointer"),"Tour around cOmicsArt"),
+ style = "
+ background-color: #00c6ff;
+ color: white;
+ padding: 10px 20px;
+ border-radius: 10px;
+ font-size: 15px;
+ font-weight: bold;
+ transition: transform 0.2s;"),
div(
id = "help_tab_info",
htmlOutput(outputId = "help_tab_info", container = pre),
diff --git a/program/shinyApp/R/module_DownloadReport.R b/program/shinyApp/R/module_DownloadReport.R
index 0dd5cd8f..7ac52141 100644
--- a/program/shinyApp/R/module_DownloadReport.R
+++ b/program/shinyApp/R/module_DownloadReport.R
@@ -5,7 +5,8 @@ DownloadReport_ui <- function(id){
tagList(
actionLink(
inputId = ns("DownloadReport"),
- label = "Download Report (as html)"
+ label = tagList(icon("download"), "Download Report (as html)"),
+ style = "font-size: 18px; font-weight: bold; color: black;text-decoration: underline;"
)
)
}
diff --git a/program/shinyApp/R/pca/ui.R b/program/shinyApp/R/pca/ui.R
index 83e5cbce..c4f9c786 100644
--- a/program/shinyApp/R/pca/ui.R
+++ b/program/shinyApp/R/pca/ui.R
@@ -17,41 +17,41 @@ pca_sidebar_panel <- function(ns){
uiOutput(outputId = ns("SampleAnnotationTypes_pca_ui")),
uiOutput(outputId = ns("sample_selection_pca_ui")),
# Scale data to unit variance y/n
- radioGroupButtons(
+ radioButtons(
inputId = ns("scale_data"),
label = "Scale data to unit variance?",
choices = c("Yes","No"),
- direction = "horizontal",
+ # direction = "horizontal",
selected = "No"
),
### start pca ---
actionButton(
inputId = ns("Do_PCA"),
label = "Get PCA",
- icon("fas fa-laptop-code")
+ icon("fas fa-mouse-pointer")
),
### further visualizations
hr(style = "border-top: 1px solid #000000;"),
uiOutput(outputId = ns("coloring_options_ui")),
- radioGroupButtons(
+ radioButtons(
inputId = ns("x_axis_selection"),
label = "PC for x-Axis",
choices = c("PC1","PC2", "PC3", "PC4"),
- direction = "vertical",
+ # direction = "horizontal",
selected = "PC1"
),
- radioGroupButtons(
+ radioButtons(
inputId = ns("y_axis_selection"),
label = "PC for y-Axis",
choices = c("PC1","PC2", "PC3", "PC4"),
- direction = "vertical",
+ # direction = "horizontal",
selected = "PC2"
),
- radioGroupButtons(
+ radioButtons(
inputId = ns("Show_loadings"),
label = "Plot Loadings on top? (currently top 5)",
choices = c("Yes","No"),
- direction = "horizontal",
+ # direction = "horizontal",
selected = "No"
),
helpText("Note: if you would like to change the annotation of the indicated loading vectors please select an option the the tab Loadings"),
diff --git a/program/shinyApp/R/pre_processing/ui.R b/program/shinyApp/R/pre_processing/ui.R
index b25157a6..836de142 100644
--- a/program/shinyApp/R/pre_processing/ui.R
+++ b/program/shinyApp/R/pre_processing/ui.R
@@ -21,11 +21,11 @@ pre_processing_sidebar_panel <- sidebarPanel(
selected = "none"
) %>% helper(type = "markdown", content = "PreProcessing_Procedures"),
uiOutput(outputId = "DESeq_formula_sub_ui"),
- uiOutput(outputId = "batch_effect_ui"),
+ uiOutput(outputId = "batch_effect_ui") %>% helper(type = "markdown", content = "PreProcessing_Batch"),
actionButton(
inputId = "Do_preprocessing",
label = "Get Pre-Processing",
- icon(name = "fas fa-laptop-code")
+ icon(name = "fas fa-mouse-pointer")
),
hr(style = "border-top: 1px solid #000000;"),
uiOutput("violin_plot_color_ui")
diff --git a/program/shinyApp/R/sample_correlation/ui.R b/program/shinyApp/R/sample_correlation/ui.R
index 7b00a825..aaf53da9 100644
--- a/program/shinyApp/R/sample_correlation/ui.R
+++ b/program/shinyApp/R/sample_correlation/ui.R
@@ -12,7 +12,7 @@ sampleCorrelation_sidebar_panel <- function(ns){
actionButton(
inputId = ns("Do_SampleCorrelation"),
label = "Get Sample Correlation",
- icon("fas fa-laptop-code")
+ icon("fas fa-mouse-pointer")
),
hr(style = "border-top: 1px solid #000000;"),
uiOutput(outputId = ns("SampleAnnotationChoice_ui")) %>% helper(type = "markdown", content = "SampleCorr_Color"),
diff --git a/program/shinyApp/R/significance_analysis/ui.R b/program/shinyApp/R/significance_analysis/ui.R
index f6efa6d7..ce6acb56 100644
--- a/program/shinyApp/R/significance_analysis/ui.R
+++ b/program/shinyApp/R/significance_analysis/ui.R
@@ -27,7 +27,8 @@ significance_analysis_sidebar_ui<- function(ns){
# Button to start analysis
actionButton(
inputId = ns("significanceGo"),
- label = "Get Significance Analysis"
+ label = "Get Significance Analysis",
+ icon = icon("fas fa-mouse-pointer")
),
hidden(actionButton(
inputId = ns("refreshUI"),
diff --git a/program/shinyApp/R/single_gene_visualisation/ui.R b/program/shinyApp/R/single_gene_visualisation/ui.R
index 0a5c4a80..7565bddb 100644
--- a/program/shinyApp/R/single_gene_visualisation/ui.R
+++ b/program/shinyApp/R/single_gene_visualisation/ui.R
@@ -8,7 +8,8 @@ single_gene_visualisation_sidebar_ui<- function(ns){
actionButton(
inputId = ns("singleGeneGo"),
- label = "Get Single Gene Visualisation"
+ label = "Get Single Gene Visualisation",
+ icon = icon("fas fa-mouse-pointer")
),
# hidden Button to refresh the UI
hidden(actionButton(
diff --git a/program/shinyApp/helpfiles/DataSelection_DataUploadFileInput.md b/program/shinyApp/helpfiles/DataSelection_DataUploadFileInput.md
index e05652e1..4425c29f 100644
--- a/program/shinyApp/helpfiles/DataSelection_DataUploadFileInput.md
+++ b/program/shinyApp/helpfiles/DataSelection_DataUploadFileInput.md
@@ -1,10 +1,14 @@
### Data Upload via File Input
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
With `Data upload` you can upload your data to the server via explicit csv files.
-The files must be in the following format:
+The files must be in the following format:
1. data-matrix (.csv)
- contains the actual data, e.g. counts
- must have the samples (e.g. mouse 1) in the columns and a **unique** naming as
@@ -22,7 +26,7 @@ The files must be in the following format:
Need help to prepare your data? Check out our Excel Workbook: UploadeHelpcOmicsArt.xlsx.
-Some pitfalls you may fall into:
+Some pitfalls you may fall into:
* The files must be uploaded at their respective position (**data matrix,
sample annotation, entities annotation**).
* The files need to be **.csv** files, which also means that they need to be comma
diff --git a/program/shinyApp/helpfiles/DataSelection_MetaData.md b/program/shinyApp/helpfiles/DataSelection_MetaData.md
index 9ff2171f..f648db05 100644
--- a/program/shinyApp/helpfiles/DataSelection_MetaData.md
+++ b/program/shinyApp/helpfiles/DataSelection_MetaData.md
@@ -1,7 +1,11 @@
### Data Upload via File Input + Meta Data Sheet
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
With `Data upload` you can upload your data to the server via explicit csv files.
The files must be in the following format:
diff --git a/program/shinyApp/helpfiles/DataSelection_RowSelection.md b/program/shinyApp/helpfiles/DataSelection_RowSelection.md
index 270df44e..82d3ed36 100644
--- a/program/shinyApp/helpfiles/DataSelection_RowSelection.md
+++ b/program/shinyApp/helpfiles/DataSelection_RowSelection.md
@@ -1,7 +1,11 @@
### Data Selection by Columns and Rows
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
With `Row selection` you can choose the entities (e.g. genes) you want to include in the
analysis.
diff --git a/program/shinyApp/helpfiles/DataSelection_SummarizedExp.md b/program/shinyApp/helpfiles/DataSelection_SummarizedExp.md
index a39d68e1..69a721e4 100644
--- a/program/shinyApp/helpfiles/DataSelection_SummarizedExp.md
+++ b/program/shinyApp/helpfiles/DataSelection_SummarizedExp.md
@@ -1,7 +1,11 @@
### Data Upload via Precompiled Data
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
With this option, you can upload previously used data. This allows you to upload
everything at once. Additionally, you can upload results from previous analyses. It is
diff --git a/program/shinyApp/helpfiles/DataSelection_UploadInspection.md b/program/shinyApp/helpfiles/DataSelection_UploadInspection.md
index 5dbf4416..8cf61dfa 100644
--- a/program/shinyApp/helpfiles/DataSelection_UploadInspection.md
+++ b/program/shinyApp/helpfiles/DataSelection_UploadInspection.md
@@ -1,7 +1,11 @@
### Data Quality Check - Visual Inspection
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
Using the `Upload visual inspection` tab, you can see the uploaded data and perform a
data quality check.
diff --git a/program/shinyApp/helpfiles/EA_Options.md b/program/shinyApp/helpfiles/EA_Options.md
index 86e7be2a..88733f24 100644
--- a/program/shinyApp/helpfiles/EA_Options.md
+++ b/program/shinyApp/helpfiles/EA_Options.md
@@ -1,7 +1,11 @@
## Enrichment Analysis Options
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
In cOmicsArt you can do either a gene set enrichment analysis or an over-representation analysis. The options for both analyses are described below.
For more details read here on
diff --git a/program/shinyApp/helpfiles/Heatmap_Aesthetics.md b/program/shinyApp/helpfiles/Heatmap_Aesthetics.md
index c4b143f4..060e2f71 100644
--- a/program/shinyApp/helpfiles/Heatmap_Aesthetics.md
+++ b/program/shinyApp/helpfiles/Heatmap_Aesthetics.md
@@ -1,7 +1,11 @@
## Heatmap Aesthetics Options
---
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
**1. Choose Variable to Color the Samples After:**
diff --git a/program/shinyApp/helpfiles/Heatmap_FurtherOptions.md b/program/shinyApp/helpfiles/Heatmap_FurtherOptions.md
index d689fe4c..4de873af 100644
--- a/program/shinyApp/helpfiles/Heatmap_FurtherOptions.md
+++ b/program/shinyApp/helpfiles/Heatmap_FurtherOptions.md
@@ -1,7 +1,12 @@
## Log Fold Change (LFC) Ordering Options
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
+
**1. Choose Type for LFC-Based Ordering:**
diff --git a/program/shinyApp/helpfiles/Heatmap_Options.md b/program/shinyApp/helpfiles/Heatmap_Options.md
index 85aab78e..0178dddb 100644
--- a/program/shinyApp/helpfiles/Heatmap_Options.md
+++ b/program/shinyApp/helpfiles/Heatmap_Options.md
@@ -1,7 +1,11 @@
## Row Selection Options
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
1. **Batch Correction**: Use batch-corrected data if available (set in Pre-processing).
diff --git a/program/shinyApp/helpfiles/Heatmap_RowAnnoBased.md b/program/shinyApp/helpfiles/Heatmap_RowAnnoBased.md
index 6afb0af6..ab9b1592 100644
--- a/program/shinyApp/helpfiles/Heatmap_RowAnnoBased.md
+++ b/program/shinyApp/helpfiles/Heatmap_RowAnnoBased.md
@@ -1,7 +1,11 @@
## Additional Row Selection Options
---
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
These options only make sense if you selected `rowAnno_based` in the `Row Selection`.
They serve to filter the row entities which to include in the heatmap.
diff --git a/program/shinyApp/helpfiles/PCA_Choices.md b/program/shinyApp/helpfiles/PCA_Choices.md
index 955f989a..6201bc1d 100644
--- a/program/shinyApp/helpfiles/PCA_Choices.md
+++ b/program/shinyApp/helpfiles/PCA_Choices.md
@@ -1,7 +1,11 @@
## Principal Component Analysis (PCA) Options
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
A principal component analysis (PCA) is a linear dimensionality reduction technique to
visualize clusters within your data. For a small introduction on PCAs, please refer to
diff --git a/program/shinyApp/helpfiles/PreProcessing_Batch.md b/program/shinyApp/helpfiles/PreProcessing_Batch.md
new file mode 100644
index 00000000..53c7e630
--- /dev/null
+++ b/program/shinyApp/helpfiles/PreProcessing_Batch.md
@@ -0,0 +1,12 @@
+## Batch Correction
+***
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
+
+### Key Considerations:
+Batch correction can be performed during pre-processing if the batch information is already included in your sample annotation. When using DESeq processing, the batch-corrected data will be utilized for visualization purposes. However, for significance analysis, the batch will be treated as a factor.
+
+---
\ No newline at end of file
diff --git a/program/shinyApp/helpfiles/PreProcessing_DESeq.md b/program/shinyApp/helpfiles/PreProcessing_DESeq.md
index 41cbdf6a..34d67ebd 100644
--- a/program/shinyApp/helpfiles/PreProcessing_DESeq.md
+++ b/program/shinyApp/helpfiles/PreProcessing_DESeq.md
@@ -1,7 +1,11 @@
## DESeq Factor Choices
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
### Understanding the Design Matrix in DESeq2
diff --git a/program/shinyApp/helpfiles/PreProcessing_Procedures.md b/program/shinyApp/helpfiles/PreProcessing_Procedures.md
index 29b7cb16..f7da38d4 100644
--- a/program/shinyApp/helpfiles/PreProcessing_Procedures.md
+++ b/program/shinyApp/helpfiles/PreProcessing_Procedures.md
@@ -1,6 +1,10 @@
## Data Preprocessing
***
-💡 **Tip**: For detailed information, visit this link.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
### Key Steps:
1. **Cleaning:**
diff --git a/program/shinyApp/helpfiles/SampleCorr_Choices.md b/program/shinyApp/helpfiles/SampleCorr_Choices.md
index e3694b92..1e298b17 100644
--- a/program/shinyApp/helpfiles/SampleCorr_Choices.md
+++ b/program/shinyApp/helpfiles/SampleCorr_Choices.md
@@ -1,7 +1,10 @@
## Correlation Method
***
-💡 **Tip**: For details, visit this link.
-
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
### Methods:
1. **Pearson:**
diff --git a/program/shinyApp/helpfiles/SampleCorr_Color.md b/program/shinyApp/helpfiles/SampleCorr_Color.md
index 250b619f..49c86a05 100644
--- a/program/shinyApp/helpfiles/SampleCorr_Color.md
+++ b/program/shinyApp/helpfiles/SampleCorr_Color.md
@@ -1,7 +1,11 @@
## Color Annotation
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
You can choose **Multiple** options. Each option is a column from the `sample
annotation table`. The clustered samples will be colored on the right side by your
diff --git a/program/shinyApp/helpfiles/SampleCorr_Downloads.md b/program/shinyApp/helpfiles/SampleCorr_Downloads.md
index 4932c074..abc414a1 100644
--- a/program/shinyApp/helpfiles/SampleCorr_Downloads.md
+++ b/program/shinyApp/helpfiles/SampleCorr_Downloads.md
@@ -1,7 +1,11 @@
## Download Helper
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
These buttons serve for various downloading purposes.
diff --git a/program/shinyApp/helpfiles/SigAna_Choices.md b/program/shinyApp/helpfiles/SigAna_Choices.md
index 049904e7..2e4de2d3 100644
--- a/program/shinyApp/helpfiles/SigAna_Choices.md
+++ b/program/shinyApp/helpfiles/SigAna_Choices.md
@@ -1,6 +1,9 @@
## Significance Analysis Options
-
-💡 **Tip**: For more details, visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
1. **Groups to Compare**
- Select groups for significance analysis based on predefined factors (for DESeq) or sample annotations.
diff --git a/program/shinyApp/helpfiles/SigAna_Intersections.md b/program/shinyApp/helpfiles/SigAna_Intersections.md
index 194cd27b..1a5feb99 100644
--- a/program/shinyApp/helpfiles/SigAna_Intersections.md
+++ b/program/shinyApp/helpfiles/SigAna_Intersections.md
@@ -1,7 +1,11 @@
## Highlight and Download intersections
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
To allow for a better overview of the intersections, the user can highlight the
intersections of interest. You can choose from all available intersections in the
diff --git a/program/shinyApp/helpfiles/SigAna_Vis.md b/program/shinyApp/helpfiles/SigAna_Vis.md
index f9533337..84cc3a60 100644
--- a/program/shinyApp/helpfiles/SigAna_Vis.md
+++ b/program/shinyApp/helpfiles/SigAna_Vis.md
@@ -1,7 +1,12 @@
## Visualizing Significance Analysis Results Options
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
+
**1. Select Comparisons to Visualize:**
diff --git a/program/shinyApp/helpfiles/SingleGene_Options.md b/program/shinyApp/helpfiles/SingleGene_Options.md
index 0f399eae..6da10a63 100644
--- a/program/shinyApp/helpfiles/SingleGene_Options.md
+++ b/program/shinyApp/helpfiles/SingleGene_Options.md
@@ -1,7 +1,11 @@
## Single Gene Visualization Options
----
-💡 **Tip**: For more detailed information, please visit here.
+***
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
**1. Choose Data Type:**
diff --git a/program/shinyApp/helpfiles/SingleGene_Select.md b/program/shinyApp/helpfiles/SingleGene_Select.md
index df00a86b..ffedb46f 100644
--- a/program/shinyApp/helpfiles/SingleGene_Select.md
+++ b/program/shinyApp/helpfiles/SingleGene_Select.md
@@ -1,7 +1,11 @@
## Choosing groups for comparison
---
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
This option lets you specify how to group the samples based on the annotation categories
provided in the sample annotation file. This only has an effect if you have chosen
diff --git a/program/shinyApp/helpfiles/TakingNotesMD_help.md b/program/shinyApp/helpfiles/TakingNotesMD_help.md
index 0d319ba3..7bd72c0c 100644
--- a/program/shinyApp/helpfiles/TakingNotesMD_help.md
+++ b/program/shinyApp/helpfiles/TakingNotesMD_help.md
@@ -1,7 +1,11 @@
## Personal Note Taking
***
-💡 **Tip**: For more detailed information, please visit here.
+
+
💡 Tip: For more detailed information, please visit
+
this page.
+
+
This Section is here for your Notes. It can be as easy as just a keyword or as complex as an entire figure description or even an entire book (however I do think there are better tools for this).
To enable possibilities to structure your text, involving headings, bullets points or colored chunks `markdown` syntax can be used.
diff --git a/program/shinyApp/helpfiles/helpTab_question.md b/program/shinyApp/helpfiles/helpTab_question.md
index c6221226..3508b5be 100644
--- a/program/shinyApp/helpfiles/helpTab_question.md
+++ b/program/shinyApp/helpfiles/helpTab_question.md
@@ -1,6 +1,10 @@
## Congrats!
***
-💡 **Tip**: If you click here you will be directed to the correct location within the documentation. Note: Here is the beginning of the documentation.
+
+
💡 Tip: If you click
+
this page.you will be directed to the correct location within the documentation. Note: Here is the beginning of the documentation.
+
+
You found your first question mark. Watch out for these to get immediate help on the
particular topic the question mark is attached to. They often also direct you to further
diff --git a/program/shinyApp/server.R b/program/shinyApp/server.R
index 9fbdccec..2964d4d3 100644
--- a/program/shinyApp/server.R
+++ b/program/shinyApp/server.R
@@ -71,7 +71,7 @@ server <- function(input,output,session){
hideTab(inputId = "tabsetPanel1", target = "Heatmap")
hideTab(inputId = "tabsetPanel1", target = "Single Gene Visualisations")
hideTab(inputId = "tabsetPanel1", target = "Enrichment Analysis")
- shinyjs::hide("mainPanel_DataSelection")
+ shinyjs::hideElement(id = "mainPanel_other")
shinyjs::hideElement(id = "data_summary")
shinyjs::hideElement(id = "div_sampleCorrelation_main_panel")
shinyjs::hideElement(id = "PCA_main_panel_div")
@@ -461,9 +461,11 @@ server <- function(input,output,session){
observe({
if (input$refresh1 > 0) {
req(data_input_shiny() == "DataUploadSuccesful")
- shinyjs::show("mainPanel_DataSelection")
+ shinyjs::showElement("InfoBox_DataSelection")
+ shinyjs::showElement("mainPanel_other")
} else {
- shinyjs::hide("mainPanel_DataSelection")
+ shinyjs::showElement("InfoBox_DataSelection")
+ shinyjs::hideElement("mainPanel_other")
}
})
@@ -1046,17 +1048,27 @@ server <- function(input,output,session){
data_input <- list()
# upload depending on where the button was clicked
if(uploaded_from() == "file_input"){
- data_input <- list(
- Matrix = read_file(input$data_matrix1$datapath, check.names=T),
- sample_table = read_file(input$data_sample_anno1$datapath, check.names=T),
- annotation_rows = read_file(input$data_row_anno1$datapath, check.names=T)
- )
- # check if only 1 col in anno row,
- # add dummy col to ensure R does not turn it into a vector
- if(ncol(data_input$annotation_rows) < 2){
- data_input$annotation_rows$origRownames <- rownames(data_input$annotation_rows)
- }
+ tryCatch({
+ data_input <- list(
+ Matrix = read_file(input$data_matrix1$datapath, check.names=T),
+ sample_table = read_file(input$data_sample_anno1$datapath, check.names=T),
+ annotation_rows = read_file(input$data_row_anno1$datapath, check.names=T)
+ )
+ # check if only 1 col in anno row,
+ # add dummy col to ensure R does not turn it into a vector
+ if(ncol(data_input$annotation_rows) < 2){
+ data_input$annotation_rows$origRownames <- rownames(data_input$annotation_rows)
+ }
+ },error = function(e){
+ output$debug <- renderText({
+ "Upload failed, please check your input."
+ })
+ reset('data_matrix1')
+ reset('data_sample_anno1')
+ reset('data_row_anno1')
+ return(NULL)
+ })
} else if(uploaded_from() == "metadata"){
tmp_sampleTable <- fun_readInSampleTable(input$metadataInput$datapath)
test_data_upload <- function(){
@@ -1084,13 +1096,68 @@ server <- function(input,output,session){
} else if(uploaded_from() == "precompiled"){
+ # Expand to work with any SummarizedExperiment object
+ # (also works with an 'old' pre-compiled object generated by the app)
uploadedFile <- readRDS(file = input$data_preDone$datapath)
- if(any(names(uploadedFile) %in% input[[paste0("omic_type_", uploaded_from())]])){
- # This is a file precompiled before 14.March.2023
- data_input <- uploadedFile[[input[[paste0("omic_type_", uploaded_from())]]]]
- } else {
- data_input[[paste0(input[[paste0("omic_type_", uploaded_from())]],"_SumExp")]] <- uploadedFile
+ # Check if the object is a SummarizedExperiment
+ if (is(uploadedFile, "SummarizedExperiment")) {
+ # a SE object - only esnure that naming of the obeject list fits or re-do
+ data_input[[paste0(omic_type(),"_SumExp")]] <- uploadedFile
+ count_matrix <- assay(data_input[[paste0(omic_type(),"_SumExp")]])
+ if (any(is.na(count_matrix))){
+ output$debug <- renderText({
+ "The assay data contains missing values, those will be removed."
+ })
+ }else{
+ if (any(count_matrix < 0)) {
+ output$debug <- renderText({
+ "The assay data contains negative values, which are invalid for some pre-processing procedures."
+ })
+ }
+ if (!all(count_matrix == round(count_matrix))) {
+ output$debug <- renderText({
+ "The assay data contains non-integer values, which is invalid for DESeq2 pre-processing procedure."
+ })
+ }
+ }
+ } else if(is.list(uploadedFile) & any(sapply(uploadedFile, function(x) is(x, "SummarizedExperiment")))){
+ # get the sum exp from the list
+ getIdxOfSumExp <- sapply(uploadedFile, function(x) is(x, "SummarizedExperiment"))
+ if(length(which(getIdxOfSumExp)) > 1){
+ output$debug <- renderText({
+ "Upload failed. The provided input contains more than one Summarized Experiment object. Please only provide one"
+ return(NULL)
+ })
+ }else{
+ data_input[[paste0(omic_type(),"_SumExp")]] <- uploadedFile[[which(getIdxOfSumExp)]]
+ count_matrix <- assay(data_input[[paste0(omic_type(),"_SumExp")]])
+ if (any(is.na(count_matrix))){
+ output$debug <- renderText({
+ "The assay data contains missing values, those will be removed."
+ })
+ }else{
+ if (any(count_matrix < 0)) {
+ output$debug <- renderText({
+ "The assay data contains negative values, which are invalid for some pre-processing procedures."
+ })
+ }
+ if (!all(count_matrix == round(count_matrix))) {
+ output$debug <- renderText({
+ "The assay data contains non-integer values, which is invalid for DESeq2 pre-processing procedure."
+ })
+ }
+ }
+
+ }
+ }else{
+ # not a SE object
+ output$debug <- renderText({
+ "Upload failed. Is the provided input Summarized Experiment object?"
+ })
+ return(NULL)
}
+
+
} else if(uploaded_from() == "testdata"){
data_input <- readRDS(
file = "www/Transcriptomics_only_precompiled-LS.RDS"
@@ -1124,8 +1191,11 @@ server <- function(input,output,session){
},
error = function(e){
print("Error! Uploading via file input failed")
+ custom_error <- list()
+ custom_error[["message"]] <- "Uploading via file input failed"
+ error_modal(custom_error)
output$debug <- renderText({
- "Uploading failed: The uplaoded files could not be put into a SummarizedExperiment. Try the 'Inspect data' button for potential errors."
+ "Uploading failed: The uploaded files could not be put into a SummarizedExperiment. Try the 'Inspect data' button for potential errors."
})
NULL
}
@@ -1368,7 +1438,7 @@ server <- function(input,output,session){
}
selectInput(
inputId = "BatchEffect_Column",
- label = "Select Batch Effect Column",
+ label = "[optional] Select Batch Effect Column",
choices = c("NULL", filtered_column_names),
selected = "NULL"
)
@@ -1419,11 +1489,15 @@ server <- function(input,output,session){
# new object Created for res_tmp[[session$token]]
res_tmp[[session$token]]$data <<- res_tmp[[session$token]]$data[rownames(res_tmp[[session$token]]$data),]
par_tmp[[session$token]]['BatchColumn'] <<- input$BatchEffect_Column
-
# preprocessing
print(paste0("Do chosen Preprocessing:",input$PreProcessing_Procedure))
+
+ # Check for DESeq option if more than 100 genes avail as it is for omics!
+
tryCatch({
- if(input$PreProcessing_Procedure == "vst_DESeq"){
+ if(input$PreProcessing_Procedure == "vst_DESeq" & nrow(res_tmp[[session$token]]$data) < 100){
+ stop("DESeq Preprocessing is only recommended for omics (here for data with more than 100 genes). Change Pre-processing or your data input!")
+ }else if(input$PreProcessing_Procedure == "vst_DESeq"& nrow(res_tmp[[session$token]]$data) >= 100){
res_tmp[[session$token]]$data <<- deseq_processing(
data = res_tmp[[session$token]]$data,
omic_type = par_tmp[[session$token]]$omic_type,
@@ -1440,6 +1514,16 @@ server <- function(input,output,session){
}
}, error = function(e){
error_modal(e)
+ output$Statisitcs_Data <- renderText({
+ HTML("There has been an error
The current data might not be what you expect.
Ensure you change something within the data or the Pre-Processing,
and click 'Get Pre-Processing' again.
You should not see this message before moving to analysis!
")
+ })
+ hideTab(inputId = "tabsetPanel1", target = "Sample Correlation")
+ hideTab(inputId = "tabsetPanel1", target = "Significance Analysis")
+ hideTab(inputId = "tabsetPanel1", target = "PCA")
+ hideTab(inputId = "tabsetPanel1", target = "Heatmap")
+ hideTab(inputId = "tabsetPanel1", target = "Single Gene Visualisations")
+ hideTab(inputId = "tabsetPanel1", target = "Enrichment Analysis")
+
waiter$hide()
req(FALSE)
})
@@ -1454,9 +1538,18 @@ server <- function(input,output,session){
)
}, error = function(e){
error_modal(
- e, additional_text = "Batch correction failed. Make sure the batch effect column is correct!"
+ e, additional_text = "Batch correction failed. Make sure the batch effect column is correct or NULL!"
)
waiter$hide()
+ output$Statisitcs_Data <- renderText({
+ HTML("There has been an error
The current data might not be what you expect.
Ensure you change something within the data or the Pre-Processing,
and click 'Get Pre-Processing' again.
You should not see this message before moving to analysis!
")
+ })
+ hideTab(inputId = "tabsetPanel1", target = "Sample Correlation")
+ hideTab(inputId = "tabsetPanel1", target = "Significance Analysis")
+ hideTab(inputId = "tabsetPanel1", target = "PCA")
+ hideTab(inputId = "tabsetPanel1", target = "Heatmap")
+ hideTab(inputId = "tabsetPanel1", target = "Single Gene Visualisations")
+ hideTab(inputId = "tabsetPanel1", target = "Enrichment Analysis")
req(FALSE)
})
} else if (input$BatchEffect_Column != "NULL" & input$PreProcessing_Procedure == "vst_DESeq"){
@@ -1478,6 +1571,15 @@ server <- function(input,output,session){
)
)
waiter$hide()
+ output$Statisitcs_Data <- renderText({
+ HTML("There has been an error
The current data might not be what you expect.
Ensure you change something within the data or the Pre-Processing,
and click 'Get Pre-Processing' again.
You should not see this message before moving to analysis!
")
+ })
+ hideTab(inputId = "tabsetPanel1", target = "Sample Correlation")
+ hideTab(inputId = "tabsetPanel1", target = "Significance Analysis")
+ hideTab(inputId = "tabsetPanel1", target = "PCA")
+ hideTab(inputId = "tabsetPanel1", target = "Heatmap")
+ hideTab(inputId = "tabsetPanel1", target = "Single Gene Visualisations")
+ hideTab(inputId = "tabsetPanel1", target = "Enrichment Analysis")
req(FALSE)
})
} else {
diff --git a/program/shinyApp/ui.R b/program/shinyApp/ui.R
index c1c06281..60948aea 100644
--- a/program/shinyApp/ui.R
+++ b/program/shinyApp/ui.R
@@ -100,6 +100,17 @@ ui <- shiny::fluidPage(
font-size: 24px;
color: darkred !important;
}
+ .well button {
+ background-color: white;
+ color: black;
+ border: 2px solid darkgrey;
+ font-size: 15px;
+ font-weight: bold;
+ box-shadow: 3px 3px 5px rgba(255, 0, 0, 0.8);
+ padding: 5px 5px;
+ border-radius: 10px;
+ }
+
#shiny-disconnected-overlay {
background-color: grey;
opacity: 1;
@@ -287,9 +298,19 @@ ui <- shiny::fluidPage(
)
),
div(
- id = "TitleID_normal",
- column(width=1, tags$img(src = "Logo_cOmicsArt_clear.png", height="100%", width="100%")),
- h1(HTML('cOmicsArt'))
+ id = "TitleID_normal",
+ column(
+ width = 1,
+ tags$img(src = "Logo_cOmicsArt_clear.png", height = "100%", width = "100%")
+ ),
+ h1(
+ "cOmicsArt",
+ style = "background: linear-gradient(to right, #EC0014 8%, #FD8D33 10%, #3897F1 12%, #FFD335 14%, #A208BA 16%, #EF0089 18%, #EC0014 20%);
+ background-size: 100%;
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ font-weight: bold;"
+ )
),
div(
id = "UsefulLinks",
@@ -308,12 +329,28 @@ ui <- shiny::fluidPage(
),
splitLayout(
cellWidths = c("75%", "10%", "15%"),
- tags$a(href = "https://icb-dcm.github.io/cOmicsArt/", "Go To Documentation", target = "_blank"),
+ tags$a(
+ href = "https://icb-dcm.github.io/cOmicsArt/",
+ target = "_blank",
+ tagList(
+ icon("book"), # Replace "book" with any other suitable icon
+ span("Go To Documentation", style = "margin-left: 5px;")
+ ),
+ style = "font-size: 18px; color: black; text-decoration: underline;"
+ ),
NULL
),
splitLayout(
cellWidths = c("75%", "10%", "15%"),
- tags$a(href = "https://lea-orga.notion.site/12eab506afb581bf8ecfeeb2bb07c319", "Give Us Feedback!", target = "_blank"),
+ tags$a(
+ href = "https://lea-orga.notion.site/12eab506afb581bf8ecfeeb2bb07c319",
+ target = "_blank",
+ tagList(
+ icon("comment-dots"), # Replace "comment-dots" with another icon if desired
+ span("Give Us Feedback!", style = "margin-left: 5px;")
+ ),
+ style = "font-size: 18px; color: black;text-decoration: underline;"
+ ),
NULL
)
),