-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathui.R
More file actions
executable file
·212 lines (197 loc) · 7.94 KB
/
ui.R
File metadata and controls
executable file
·212 lines (197 loc) · 7.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# Define UI for application that draws a histogram
library(shiny)
library(shinydashboard)
library(shinyjs)
library(shinyWidgets)
library(shinyBS)
library(shinyalert)
library(waiter)
library(shinycssloaders)
jscode <- "shinyjs.closewindow = function() { window.close(); }"
# read all ui files
sapply(list.files("ui", full.names = TRUE), source, environment())
# init spinner
options(spinner.color = "#95AAD3")
spinner <- list(logo = list(spin_loaders(id = 5, color = "#95AAD3")), color="rgb(153, 199, 191, .5)")
header <-
dashboardHeader(
title = span(img(src="PRONE_Text_Logo.png", height = "60px")),
tags$li(
actionLink(
inputId = "change_colors",
label = div(icon("palette", style = "color:white;"), " Change Colors"),
),
class = "dropdown"
),
tags$li(
actionLink(
inputId = "download_data",
label = div(icon("download", style = "color:white;"), " Download Data"),
),
class = "dropdown"
),
tags$li(
a(
div(icon("circle-info", style = "color:white;"), " Vignette"),
href="https://daisybio.github.io/PRONE/",
title="",
icon = icon("circle-info"),
target = "_blank"
),
class = "dropdown"
),
tags$li(
a(
div(icon("question", style = "color:white;"), " Issues"),
href="https://github.com/lisiarend/PRONE.Shiny/issues",
title="",
icon = icon("question"),
target = "_blank"
),
class = "dropdown"
),
tags$li(
a(
div(icon("github", style = "color:white;"), " Github"),
href="https://github.com/lisiarend/PRONE.Shiny",
title="",
target = "_blank"
),
class = "dropdown"
),
tags$li(
actionLink(
inputId = "dependencies_modal",
label = div(icon("shield", style = "color:white;"), " Dependencies"),
),
class = "dropdown"
)
)
sidebar <- dashboardSidebar(useShinyjs(),
extendShinyjs(text = jscode, functions = c("closewindow")),
tags$head(
tags$style(".inactiveLink {
pointer-events: none;
cursor: default;
}"),
),
uiOutput("sidebar"),
collapsed = FALSE)
body <-
dashboardBody(
shinyalert::useShinyalert(force = TRUE),
shinyjs::useShinyjs(),
useWaiter(), # include dependencies
tags$head(
tags$link(rel = "stylesheet", type = "text/css", href = "custom.css"),
tags$script(src = "custom.js")
),
tags$style( # manually make waiter overly for the whole page
".waiter-overlay-content{
color: white;
font-weight: bold;
height: 100vh;
position: absolute;
top: 50vh; /*30 pixels from the top*/
right: 50%; /*48% from the right*/
}
.btn-custom{
background-color: #95AAD3 !important;
}
.download-butt{
background: #95AAD3 !important;
color: white;
}
"
),
waiter_show_on_load(html = tagList(spinner$logo,
HTML("<br>Loading App ...")),
color=spinner$color),
div(
id = "loading",
fluidRow(
shinydashboard::box(fluidRow(
column(width = 6,
div(
HTML(
"
Latest, high-throughput technologies, such as DNA microarrays or mass spectrometry, have made substantial advancements in several ways, including instrument detection accuracy and data generation speed.
These developments result in massive amounts of information-rich transcriptomics, proteomics, and metabolomics data.
However, high-throughput OMICs data frequently comprise systematic biases introduced throughout various steps of a clinical study, from biological sample collection to quantification.
Neglecting these biases could result in erroneous conclusions drawn from quantitative analysis.
</br>
</br>
Data pre-processing techniques, in particular, normalization of data post-acquisition, aim to account for these biases and improve sample comparability.
There are several approaches for processing and normalizing OMICs data generally and mass spectrometry (MS)-based proteomics data specifically.
However, since the origin of these biases is usually unknown, selecting an appropriate normalization technique for a given dataset is challenging.
</br>
</br>
Here, we present PRONE, a user-friendly R package that comes with a Shiny app that employs state-of-the-art normalization methods and enables simple evaluation of
normalization methods through both quantitative and qualitative evaluation metrics and DE analysis.
</br>
</br>
A detailed description of the PRONE package that is also useful for the navigation through the Shiny app is available <a href='https://lisiarend.github.io/PRONE/'>here</a>.
</br>
</br>
If you are using either the R package or the Shiny app, please cite the following paper:
</br>
</br>
<p style='margin-left: 10px;'>Systematic Evaluation of Normalization Approaches in Tandem Mass Tag and Label-Free Protein Quantification Data Using PRONE
</p>
<p style='margin-left: 10px;'>Lis Arend, Klaudia Adamowicz, Johannes R. Schmidt, Yuliya Burankova, Olga Zolotareva, Olga Tsoy, Josch K. Pauling, Stefan Kalkhof, Jan Baumbach, Markus List, Tanja Laske
</p>
<p style='margin-left: 10px;'>bioRxiv 2025.01.27.634993; doi: <a href='https://doi.org/10.1101/2025.01.27.634993'>https://doi.org/10.1101/2025.01.27.634993</a>
</p>
"
),
style = "font-size: large;"
)
),
column(
width = 6,
img(
src = "PRONE_Workflow.png",
height = "auto",
width = "100%"
),
style = "vertical-align: middle; text-align:center;"
)
),
title = h2("Welcome to PRONE, the PROteomics Normalization Evaluator."),
width = 12
),
width = 12)
),
tabItems(
welcomeBody,
uploadBody(),
filterProteinsBody(),
outlierDetectionBody(),
normalizationBody(),
deAnalysisBody(),
goodbyeBody
),
fluidRow(column(
6,
shinyjs::hidden(bsButton(
inputId = "previousTab",
label = "",
icon = icon("spinner"),
style = "warning",
block = TRUE,
disabled = TRUE
))
),
column(
6,
bsButton(
inputId = "nextTab",
label = "Get Started",
icon = icon("spinner"),
style = "warning",
block = TRUE,
disabled = TRUE
)
))
)
ui <- tags$div(id = "app", dashboardPage(header, sidebar, body, title = "PRONE", skin = "black"))