rport updates, new logo, app.r logic updated, 4pl XL made nicer
This commit is contained in:
+4
-4
@@ -340,7 +340,7 @@ plot_f <- function(dat, TransFlag = F) { # sigmoid,det_sig,
|
|||||||
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
|
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
|
||||||
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
|
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
|
||||||
# theme_bw() +
|
# theme_bw() +
|
||||||
theme(axis.text = element_text(size = 14))
|
theme(axis.text.x = element_text(size = 12, angle=90), axis.text.y = element_text(size = 12))
|
||||||
|
|
||||||
p2 <- p + geom_line(
|
p2 <- p + geom_line(
|
||||||
data = as.data.frame(pl_df), aes(x = seq_x, y = SAMPLE), color = "#C2173F",
|
data = as.data.frame(pl_df), aes(x = seq_x, y = SAMPLE), color = "#C2173F",
|
||||||
@@ -1315,7 +1315,7 @@ tests_FUNC <- function(ro_new, Lim, PureErrFlag) {
|
|||||||
"EQ test ratio of lower asymptotes",
|
"EQ test ratio of lower asymptotes",
|
||||||
"EQ test ratio of Hill slopes",
|
"EQ test ratio of Hill slopes",
|
||||||
"EQ test ratio of upper asymptotes",
|
"EQ test ratio of upper asymptotes",
|
||||||
"F-test on non-linearity*",
|
"F-test on Lack-of-Fit*",
|
||||||
"EQ test ratio of asymptote difference",
|
"EQ test ratio of asymptote difference",
|
||||||
"geom. rel. CI restr. model",
|
"geom. rel. CI restr. model",
|
||||||
"geom. rel. CI unrestr. model"
|
"geom. rel. CI unrestr. model"
|
||||||
@@ -1396,7 +1396,7 @@ ANOVA4plUnresfunc <- function(ro_new) {
|
|||||||
# PureErr
|
# PureErr
|
||||||
SSE <- round(FitAnova[4, 3], 5)
|
SSE <- round(FitAnova[4, 3], 5)
|
||||||
SSE_df <- FitAnova[4, 1]
|
SSE_df <- FitAnova[4, 1]
|
||||||
# Non-Linearity
|
# Lack-of-Fit
|
||||||
SSnonlin <- round(sum((predict(lm(readout ~ factor(Conc) * isSample, all_l)) - smuPREDs)^2), 4)
|
SSnonlin <- round(sum((predict(lm(readout ~ factor(Conc) * isSample, all_l)) - smuPREDs)^2), 4)
|
||||||
LoF_df <- FitAnova[1, 1] + FitAnova[2, 1]
|
LoF_df <- FitAnova[1, 1] + FitAnova[2, 1]
|
||||||
## Total
|
## Total
|
||||||
@@ -1413,7 +1413,7 @@ ANOVA4plUnresfunc <- function(ro_new) {
|
|||||||
ANOVAtab <- data.frame(
|
ANOVAtab <- data.frame(
|
||||||
Source = c(
|
Source = c(
|
||||||
"Treatment", "Preparation", "Regression",
|
"Treatment", "Preparation", "Regression",
|
||||||
"Non-Parallelism", "Residual Error", "Non-linearity",
|
"Non-Parallelism", "Residual Error", "Lack-of-Fit",
|
||||||
"Pure Error", "Total"
|
"Pure Error", "Total"
|
||||||
),
|
),
|
||||||
DF = AnovaDFs,
|
DF = AnovaDFs,
|
||||||
|
|||||||
@@ -6,13 +6,15 @@ output:
|
|||||||
toc: true
|
toc: true
|
||||||
toc_depth: 3
|
toc_depth: 3
|
||||||
header_includes:
|
header_includes:
|
||||||
-\usepackage{fancyheadr}
|
|
||||||
-\setlength{\headheight}{22pt}%
|
-\setlength{\headheight}{22pt}%
|
||||||
-\usepackage{lastpage}
|
|
||||||
-\pagestyle{fancy}
|
|
||||||
-\usepackage{pdflscape}
|
-\usepackage{pdflscape}
|
||||||
-\usepackage{longtable}
|
-\usepackage{longtable}
|
||||||
-\rhead{\includegraphics[width=.15\textwidth]{`r getwd()`/logo.png}}
|
-\usepackage{fancyheadr}
|
||||||
|
-\pagestyle{fancy}
|
||||||
|
-\fancyhf{}
|
||||||
|
-\fancyfoot[C]{Page \thepage \ of \pageref{LastPage}}
|
||||||
|
-\usepackage{lastpage}
|
||||||
|
-\rhead{\includegraphics[width=.15\textwidth]{`r getwd()`/logov2.png}}
|
||||||
params:
|
params:
|
||||||
FileName: NA
|
FileName: NA
|
||||||
newTitle: NA
|
newTitle: NA
|
||||||
@@ -24,7 +26,7 @@ params:
|
|||||||
Assay: NA
|
Assay: NA
|
||||||
author: "Author: `r params$author`"
|
author: "Author: `r params$author`"
|
||||||
title: |
|
title: |
|
||||||
| {width=1in}
|
| {width=1in}
|
||||||
| Linear bioassay evaluation
|
| Linear bioassay evaluation
|
||||||
subtitle: |
|
subtitle: |
|
||||||
`r params$FileName`
|
`r params$FileName`
|
||||||
@@ -34,10 +36,7 @@ date: "`r paste(params$NoP, params$Assay)`"
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<!-- \fancyfoot[C]{\thepage\ of \pageref{LastPage}} -->
|
|
||||||
<!-- \newpage -->
|
|
||||||
|
|
||||||
<!-- \newpage -->
|
|
||||||
|
|
||||||
```{r setup, include=FALSE}
|
```{r setup, include=FALSE}
|
||||||
|
|
||||||
@@ -69,6 +68,8 @@ ANOVAlin <- LinTests[,4:ncol(LinTests)]
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
|
||||||
# Introduction
|
# Introduction
|
||||||
|
|
||||||
Bioassay potency estimation uses statistical methods to quantify the strength of a biological product or drug by comparing its response to that of a reference standard. Biological responses are inherently variable, affected by assay conditions, cell systems or organisms, and measurement noise. To control this variability, a linear regression approach is used to obtain reliable potency values. Three consecutive dilution steps showing the steepest slope are used for linear fitting.
|
Bioassay potency estimation uses statistical methods to quantify the strength of a biological product or drug by comparing its response to that of a reference standard. Biological responses are inherently variable, affected by assay conditions, cell systems or organisms, and measurement noise. To control this variability, a linear regression approach is used to obtain reliable potency values. Three consecutive dilution steps showing the steepest slope are used for linear fitting.
|
||||||
@@ -139,7 +140,7 @@ plot_grid(XLplotLin)
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
The relative potency can be read from tbale 3.
|
The relative potency can be read from tabale 3.
|
||||||
|
|
||||||
```{r LinPotTab, echo=FALSE, warning=FALSE, results='asis'}
|
```{r LinPotTab, echo=FALSE, warning=FALSE, results='asis'}
|
||||||
|
|
||||||
@@ -148,7 +149,9 @@ kable(LinPotTab, format = "markdown", caption= "Potency table", digits=3)
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
0 ... test passed;
|
||||||
|
|
||||||
|
1 ... test failed);
|
||||||
|
|
||||||
|
|
||||||
The ANOVA of the unconstrained model is listed in table 4.
|
The ANOVA of the unconstrained model is listed in table 4.
|
||||||
@@ -173,7 +176,6 @@ kable(LinTests1, row.names = F, format = "markdown", caption="Assay suitability
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
The estimate is the p-value of the test.
|
The estimate is the p-value of the test.
|
||||||
F-tests on regression, significance of slopes, and preparation need to have a p-value <0.05 to pass.
|
F-tests on regression, significance of slopes, and preparation need to have a p-value <0.05 to pass.
|
||||||
All other tests pass if p-value > 0.05.
|
All other tests pass if p-value > 0.05.
|
||||||
@@ -209,6 +211,22 @@ kable(SuModABu, format = "markdown", caption= "Restricted linear regression (SSS
|
|||||||
|
|
||||||
SSSI: separate slope, separate intercept
|
SSSI: separate slope, separate intercept
|
||||||
|
|
||||||
|
# Signature
|
||||||
|
|
||||||
|
<!-- Signature and date:\\ -->
|
||||||
|
<!-- \noindent\framebox(200,50) -->
|
||||||
|
<!-- \begin{minipage}[t][40pt][c]{190pt} -->
|
||||||
|
<!-- \centering -->
|
||||||
|
<!-- % Leave this blank for a physical signature -->
|
||||||
|
<!-- \end{minipage} -->
|
||||||
|
|
||||||
|
|
||||||
|
\vspace{1.5cm}
|
||||||
|
\noindent
|
||||||
|
\begin{tabular}{p{6cm}p{1cm}p{6cm}}
|
||||||
|
\cline{1-1} \cline{3-3}
|
||||||
|
Date & & Signature
|
||||||
|
\end{tabular}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -216,12 +234,22 @@ SSSI: separate slope, separate intercept
|
|||||||
|
|
||||||
## Potency of linear PLA
|
## Potency of linear PLA
|
||||||
|
|
||||||
|
Relative potency of the test sample to the reference is calculated as:
|
||||||
$$
|
$$
|
||||||
rel Potency = \frac{I_{ref} - I_{test}}{k}
|
relPot_{log} = \frac{I_{ref} - I_{test}}{k}
|
||||||
$$
|
$$
|
||||||
where: I... intercept of reference or test
|
where: \\ I... intercept of reference or test\\
|
||||||
k ... common slope
|
k ... common slope
|
||||||
|
|
||||||
|
The standard error of the linear restricted model is used to get the confidence interval of the relative potency with the formula:
|
||||||
|
$$
|
||||||
|
CI_{rel Pot} = exp(relPot_{log} \pm se(relPot_{log})*q^{t_{n-p}}_{1-\frac{\alpha}{2}})
|
||||||
|
$$
|
||||||
|
In general, the confidence intervals are calculated as follows:
|
||||||
|
$$
|
||||||
|
CI = \hat\theta\pm se(\hat\theta)*q^{t_{n-p}}_{1-\frac{\alpha}{2}}
|
||||||
|
$$
|
||||||
|
…where $\hat\theta$ is a fitted parameter or a linear combination thereof, q is the 1-alpha/2 quantile of the Student’s t-distribution with n-p degrees of freedom and se is the standard error derived from any covariance matrix.
|
||||||
|
|
||||||
|
|
||||||
# Literature
|
# Literature
|
||||||
|
|||||||
+26
-17
@@ -12,7 +12,7 @@ header_includes:
|
|||||||
-\pagestyle{fancy}
|
-\pagestyle{fancy}
|
||||||
-\usepackage{pdflscape}
|
-\usepackage{pdflscape}
|
||||||
-\usepackage{longtable}
|
-\usepackage{longtable}
|
||||||
-\rhead{\includegraphics[width=.15\textwidth]{`r getwd()`/logo.png}}
|
-\rhead{\includegraphics[width=.15\textwidth]{`r getwd()`/logov2.png}}
|
||||||
params:
|
params:
|
||||||
FileName: NA
|
FileName: NA
|
||||||
author: NA
|
author: NA
|
||||||
@@ -22,7 +22,7 @@ params:
|
|||||||
coeffs: NA
|
coeffs: NA
|
||||||
author: "Author: `r params$author`"
|
author: "Author: `r params$author`"
|
||||||
title: |
|
title: |
|
||||||
| {width=2in}
|
| {width=1in}
|
||||||
| 4PL bioassay evaluation
|
| 4PL bioassay evaluation
|
||||||
subtitle: |
|
subtitle: |
|
||||||
`r params$FileName`
|
`r params$FileName`
|
||||||
@@ -131,7 +131,7 @@ kable(pottab4plXL, format = "markdown", caption= "Relative potency with absolute
|
|||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
NOTE: results of unrestricted model for Information only.
|
||||||
|
|
||||||
|
|
||||||
## Plot of the data and models
|
## Plot of the data and models
|
||||||
@@ -229,15 +229,6 @@ kable(PLAausw, format = "markdown", caption= "Restricted 4PL model", digits=3, r
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
<!-- A depiction of the CI and corresponding limits of relative potency is shown here: -->
|
|
||||||
|
|
||||||
<!-- ```{r, label='relpotPlot', echo=FALSE, warning=FALSE, fig.height=2, fig.width=3.5, fig.cap="Rel potency with CIs and limits", fig.align='left', results='asis'} -->
|
|
||||||
|
|
||||||
<!-- print(relpotTestPlot) -->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- ``` -->
|
|
||||||
|
|
||||||
|
|
||||||
Sebaugh et al proposed bend points for test and reference samples, that define the points with highest turning behavior. Table 6 lists these bendpoints as well as asymptote points ~ twice as far from the center as the bendpoints.
|
Sebaugh et al proposed bend points for test and reference samples, that define the points with highest turning behavior. Table 6 lists these bendpoints as well as asymptote points ~ twice as far from the center as the bendpoints.
|
||||||
|
|
||||||
@@ -248,7 +239,7 @@ kable(PLbend, format = "markdown", caption= "Bendpoints and asymptote points of
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
The results of the non-linear fitting procedure for the unrestricted model (8 parameters) is listed in table 6:
|
The results of the non-linear fitting procedure for the unrestricted model (8 parameters) is listed in table 7:
|
||||||
|
|
||||||
```{r UnRPLAausw, echo=FALSE, warning=FALSE, results='asis'}
|
```{r UnRPLAausw, echo=FALSE, warning=FALSE, results='asis'}
|
||||||
|
|
||||||
@@ -257,14 +248,19 @@ kable(UnRPLAausw, format = "markdown", caption= "Unrestricted 4PL model", digits
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
<!-- ```{r UnRPLBend, echo=FALSE, warning=FALSE, results='asis'} -->
|
|
||||||
|
|
||||||
<!-- kable(UnRPLBend, format = "markdown", caption= "Bend points of 4PL unrestricted", digits=3, row.names = F) -->
|
# Signature
|
||||||
|
|
||||||
|
|
||||||
<!-- ``` -->
|
\vspace{1.5cm}
|
||||||
|
\noindent
|
||||||
|
\begin{tabular}{p{6cm}p{1cm}p{6cm}}
|
||||||
|
\cline{1-1} \cline{3-3}
|
||||||
|
Date & & Signature
|
||||||
|
\end{tabular}
|
||||||
|
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
|
||||||
# Appendix: Formulas
|
# Appendix: Formulas
|
||||||
|
|
||||||
@@ -305,7 +301,20 @@ $$
|
|||||||
B_{true}=B*\frac{D-A}{4}
|
B_{true}=B*\frac{D-A}{4}
|
||||||
$$
|
$$
|
||||||
|
|
||||||
|
## Confidence intervals
|
||||||
|
|
||||||
|
In general, the confidence intervals are calculated as follows:
|
||||||
|
$$
|
||||||
|
CI = \hat\theta\pm se(\hat\theta)*q^{t_{n-p}}_{1-\frac{\alpha}{2}}
|
||||||
|
$$
|
||||||
|
…where $\hat\theta$ is a fitted parameter or a linear combination thereof, q is the 1-alpha/2 quantile of the Student’s t-distribution with n-p degrees of freedom and se is the standard error derived from any covariance matrix.
|
||||||
|
|
||||||
|
Let $\theta$ be the 4+1 parameters of the fit (a, b, d, EC50 of reference and EC50 difference). It can be shown that the least squares estimator $\hat\theta$ is normally distributed with asymptotic covariance matrix. The gradient method provides one of several ways to calculate the covariance matrix:
|
||||||
|
|
||||||
|
$$
|
||||||
|
\hat{V(\theta)}= \sigma^2(A(\hat\theta)^T*A(\hat\theta))^{-1}
|
||||||
|
$$
|
||||||
|
where A($\theta$) is the n x p matrix of the first partial derivatives for each parameter (i.e. gradient) realized at the fitted parameter estimates. The RMSE of the model or the pure error is used as estimate of $\sigma$. The square root of the diagonals of $\hat{V(\theta)}$ gives the standard errors and with that confidence intervals (CI) can be computed.
|
||||||
|
|
||||||
# Literature
|
# Literature
|
||||||
|
|
||||||
@@ -317,6 +326,6 @@ VerHoef, J.M.: Who invented the Delta Method? The American Statistician, 2012, 6
|
|||||||
|
|
||||||
Bates, D.M., Watts, D.G. (1988). Comparing models. In: Nonlinear Regression Analysis and Its Applications. New York: Wiley, pp 103-108
|
Bates, D.M., Watts, D.G. (1988). Comparing models. In: Nonlinear Regression Analysis and Its Applications. New York: Wiley, pp 103-108
|
||||||
|
|
||||||
|
Bates, D.M., Watts, D.G. (1988) 2. In: Nonlinear Regression Analysis and Its Applications. New York: Wiley, pp 52-58
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ ui <- dashboardPage(
|
|||||||
dashboardHeader(title = "Plateflow"),
|
dashboardHeader(title = "Plateflow"),
|
||||||
dashboardSidebar(
|
dashboardSidebar(
|
||||||
sidebarMenu(
|
sidebarMenu(
|
||||||
img(src = "logo.png", width = 230),
|
img(src = "logov2.png", width = 230),
|
||||||
menuItem("Home", tabName = "home", icon = icon("home")),
|
menuItem("Home", tabName = "home", icon = icon("home")),
|
||||||
menuItem("Data template",
|
menuItem("Data template",
|
||||||
tabName = "template", icon = icon("table"),
|
tabName = "template", icon = icon("table"),
|
||||||
@@ -44,11 +44,11 @@ ui <- dashboardPage(
|
|||||||
# menuItem("User Manual /Validation", tabName = "manual", icon=icon("book"), # tabName here and in dashboard body need to be identical
|
# menuItem("User Manual /Validation", tabName = "manual", icon=icon("book"), # tabName here and in dashboard body need to be identical
|
||||||
# menuSubItem(icon = NULL, tags$li(a("Document", target="self",href="UserManual.pdf")))
|
# menuSubItem(icon = NULL, tags$li(a("Document", target="self",href="UserManual.pdf")))
|
||||||
# ),
|
# ),
|
||||||
menuItem("EXCEL upload", tabName = "Dataupload", icon = icon("magnet", lib = "glyphicon")),
|
menuItem("INSPECT your data", tabName = "Dataupload", icon = icon("magnet", lib = "glyphicon")),
|
||||||
menuItem("4PL simulation", tabName = "fourPL", icon = icon("chart-line", lib = "font-awesome")),
|
menuItem("EXPLORE 4PL and linear reg", tabName = "fourPL", icon = icon("chart-line", lib = "font-awesome")),
|
||||||
# menuItem("XLSX diagnostics", tabName="XLdiagn", icon=icon("chart-bar", lib="font-awesome")),
|
# menuItem("XLSX diagnostics", tabName="XLdiagn", icon=icon("chart-bar", lib="font-awesome")),
|
||||||
# menuItem("Linear regression + report", tabName="pla", icon=icon("pencil", lib="glyphicon")),
|
# menuItem("Linear regression + report", tabName="pla", icon=icon("pencil", lib="glyphicon")),
|
||||||
menuItem("Wizard", tabName = "wizard", icon = icon("chart-column", lib = "font-awesome")) # ,
|
menuItem("OPTIMIZE with wizard", tabName = "wizard", icon = icon("chart-column", lib = "font-awesome")) # ,
|
||||||
# menuItem("Documentation", tabName="documentation", icon=icon("chart-area", lib="font-awesome"))
|
# menuItem("Documentation", tabName="documentation", icon=icon("chart-area", lib="font-awesome"))
|
||||||
),
|
),
|
||||||
tags$footer(
|
tags$footer(
|
||||||
@@ -94,34 +94,30 @@ server <- function(input, output, session) {
|
|||||||
environment(pot4plFUNC) <- environment()
|
environment(pot4plFUNC) <- environment()
|
||||||
environment(tests_FUNC) <- environment()
|
environment(tests_FUNC) <- environment()
|
||||||
|
|
||||||
#### renderUIs ----
|
#### renderUIs Home ----
|
||||||
output$homePage <- renderUI({
|
output$homePage <- renderUI({
|
||||||
navbarPage(
|
navbarPage(
|
||||||
"Home",
|
"Home",
|
||||||
tabPanel(
|
tabPanel(
|
||||||
"Limit setting",
|
"Introduction",
|
||||||
tags$style(HTML("pre { color: black; background-color: #7FAEFF55;
|
tags$style(HTML("pre { color: black; background-color: #7FAEFF55;
|
||||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size: 12px;} ")),
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size: 12px;} ")),
|
||||||
tags$img(src = "logo.png", class = "adv_logo"),
|
h4("Introduction to the plateflow software"),
|
||||||
h4("Introduction to the bioassay software"),
|
|
||||||
# tags$mark("linear regression"), br(),
|
# tags$mark("linear regression"), br(),
|
||||||
column(3,
|
column(6,
|
||||||
style = "background: #7FAEFF88",
|
"INSPECT your plate reader data: This is the right place if you want to visualize your data in the context of a 4 PL fit or a linear regression fit. ",
|
||||||
numericInput("lEACratiola", "lower EAC ratio of LAs", 0.005, step = 0.001),
|
"Bring your data in a readable format and start inspecting.",br(),
|
||||||
numericInput("uEACratiola", "upper EAC for ratio of LAs", 100, step = 1),
|
"Example of EXCEL/csv/numbers file:",br(),
|
||||||
numericInput("lEACratioSlope", "lower EAC for ratio of slopes", 0.55, step = 0.01),
|
|
||||||
numericInput("uEACratioSlope", "upper EAC for ratio of slopes", 1.84, step = 0.1),
|
|
||||||
numericInput("lEACratioua", "lower EAC for ratio of UAs", 0.75, step = 0.1),
|
|
||||||
numericInput("uEACratioua", "upper EAC for ratio of UAs", 1.33, step = 0.1)),
|
|
||||||
column(3, style = "background: #7FAEFF88",
|
|
||||||
numericInput("lowerPot", "lower EAC for potency", 75, step = 1),
|
|
||||||
numericInput("upperPot", "upper EAC for potency", 133, step = 1),
|
|
||||||
numericInput("lEACratioAdiff", "lower EAC of ratio of asymptote differences", 0.75, step = 0.01),
|
|
||||||
numericInput("uEACratioAdiff", "upper EAC of ratio of asymptote differences", 1.33, step = 0.01),
|
|
||||||
numericInput("lEACdiffla", "lower EAC for diff. of LA", -0.175, step = 0.001),
|
|
||||||
numericInput("uEACdiffla", "upper EAC for diff. of LA", 0.189, step = 0.001)
|
|
||||||
|
|
||||||
)
|
tags$img(src = "ExampleXL.png", class = "adv_logo", width = "100%"),
|
||||||
|
"It needs to contain 1 column with the dilution concentrations (first or last column) and at least 2 columns of reference and test sample readouts, respectively.",
|
||||||
|
"The reference readout columns have to be before the test sample readout columns. The column names for reference and test are free to set, but different for all columns.",
|
||||||
|
"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.",
|
||||||
|
),
|
||||||
|
column(6,
|
||||||
|
|
||||||
|
)
|
||||||
),
|
),
|
||||||
tabPanel(
|
tabPanel(
|
||||||
"Documentation",
|
"Documentation",
|
||||||
@@ -140,7 +136,7 @@ server <- function(input, output, session) {
|
|||||||
##### UI XL ----
|
##### UI XL ----
|
||||||
output$Dataupload <- renderUI({
|
output$Dataupload <- renderUI({
|
||||||
navbarPage(
|
navbarPage(
|
||||||
title = "Information",
|
title = "",
|
||||||
tabPanel(
|
tabPanel(
|
||||||
title = "Real data",
|
title = "Real data",
|
||||||
tabsetPanel(
|
tabsetPanel(
|
||||||
@@ -167,12 +163,13 @@ server <- function(input, output, session) {
|
|||||||
column(
|
column(
|
||||||
4,
|
4,
|
||||||
h4("Suitability tests for 4-parametric logistic regression"),
|
h4("Suitability tests for 4-parametric logistic regression"),
|
||||||
|
"(potency CI test is set per default)",
|
||||||
checkboxGroupInput("selectedSSTs", "Which suitability tests to be used?",
|
checkboxGroupInput("selectedSSTs", "Which suitability tests to be used?",
|
||||||
choices = c(
|
choices = c(
|
||||||
"F-test on Regr." = "1",
|
"F-test on Regr." = "1",
|
||||||
"EQ-test on lower asymptote difference" = "2",
|
"EQ-test on lower asymptote difference" = "2",
|
||||||
"EQ-test on ratio of lower asymptote" = "3", "EQ-test on ratio of Hill slopes" = "4",
|
"EQ-test on ratio of lower asymptote" = "3", "EQ-test on ratio of Hill slopes" = "4",
|
||||||
"EQ-test on ratio of upper asymptote" = "5", "F-test on non-linearity" = "6",
|
"EQ-test on ratio of upper asymptote" = "5", "F-test on Lack-of-Fit" = "6",
|
||||||
"EQ-test on ratio of asymptote differences" = "7"
|
"EQ-test on ratio of asymptote differences" = "7"
|
||||||
),
|
),
|
||||||
selected = c("1", "4", "5", "6", "7")
|
selected = c("1", "4", "5", "6", "7")
|
||||||
@@ -189,12 +186,24 @@ server <- function(input, output, session) {
|
|||||||
selected = c("1", "2", "3", "4", "5", "6", "7", "8")
|
selected = c("1", "2", "3", "4", "5", "6", "7", "8")
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
column(
|
|
||||||
4,
|
column(2,
|
||||||
h4("Example of EXCEL file "),
|
style = "background: #7FAEFF88",
|
||||||
h4("with column of dilutions and at least 2 columns of reference and the same amount of columns with test sample readouts."),
|
numericInput("lEACratiola", "lower EAC ratio of LAs", 0.005, step = 0.001),
|
||||||
tags$img(src = "ExampleXL.png", class = "adv_logo", width = "100%"),
|
numericInput("uEACratiola", "upper EAC for ratio of LAs", 100, step = 1),
|
||||||
plotOutput("plotSing", width = "400px", height = "300px")
|
numericInput("lEACratioSlope", "lower EAC for ratio of slopes", 0.55, step = 0.01),
|
||||||
|
numericInput("uEACratioSlope", "upper EAC for ratio of slopes", 1.84, step = 0.1),
|
||||||
|
numericInput("lEACratioua", "lower EAC for ratio of UAs", 0.75, step = 0.1),
|
||||||
|
numericInput("uEACratioua", "upper EAC for ratio of UAs", 1.33, step = 0.1)),
|
||||||
|
column(2, style = "background: #7FAEFF88",
|
||||||
|
numericInput("lowerPot", "lower EAC for potency", 75, step = 1),
|
||||||
|
numericInput("upperPot", "upper EAC for potency", 133, step = 1),
|
||||||
|
numericInput("lEACratioAdiff", "lower EAC of ratio of asymptote differences", 0.75, step = 0.01),
|
||||||
|
numericInput("uEACratioAdiff", "upper EAC of ratio of asymptote differences", 1.33, step = 0.01),
|
||||||
|
numericInput("lEACdiffla", "lower EAC for diff. of LA", -0.175, step = 0.001),
|
||||||
|
numericInput("uEACdiffla", "upper EAC for diff. of LA", 0.189, step = 0.001)
|
||||||
|
|
||||||
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
tabPanel(
|
tabPanel(
|
||||||
@@ -217,7 +226,8 @@ server <- function(input, output, session) {
|
|||||||
tableOutput("AIC"),
|
tableOutput("AIC"),
|
||||||
h5("First row: restricted model; 2nd row: unrestricted model"),
|
h5("First row: restricted model; 2nd row: unrestricted model"),
|
||||||
h5("Smaller values of AIC indicate better fit to the data"),
|
h5("Smaller values of AIC indicate better fit to the data"),
|
||||||
tableOutput("VarDiagn")
|
box(title = "Useful information", status = "info", solidHeader = T, width = 12, "", collapsible = T,
|
||||||
|
tableOutput("VarDiagn"))
|
||||||
),
|
),
|
||||||
column(
|
column(
|
||||||
8,
|
8,
|
||||||
@@ -225,10 +235,13 @@ server <- function(input, output, session) {
|
|||||||
htmlOutput("No4PLFitText"),
|
htmlOutput("No4PLFitText"),
|
||||||
|
|
||||||
DTOutput("pottab4plXL"),
|
DTOutput("pottab4plXL"),
|
||||||
plotOutput("diagnplot"),
|
box(title = "Residuals and QQ-plot", status = "info", solidHeader = T, width = 12, "", collapsible = T,
|
||||||
DTOutput("EQtests"),
|
plotOutput("diagnplot")),
|
||||||
|
box(title = "Assay Suitability Tests", status = "info", solidHeader = T, width = 12, "", collapsible = T,
|
||||||
|
DTOutput("EQtests")),
|
||||||
DTOutput("pottab4plTransXL"),
|
DTOutput("pottab4plTransXL"),
|
||||||
tableOutput("ANOVAXLS")
|
box(title = "ANOVA", status = "info", solidHeader = T, width = 12, "", collapsible = T,
|
||||||
|
tableOutput("ANOVAXLS"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -447,9 +460,9 @@ server <- function(input, output, session) {
|
|||||||
DTOutput("pottab4pl"),
|
DTOutput("pottab4pl"),
|
||||||
"Footnote: test performed on relative CIs.",
|
"Footnote: test performed on relative CIs.",
|
||||||
DTOutput("EQtests4pl"), # SSTs
|
DTOutput("EQtests4pl"), # SSTs
|
||||||
h5("*...The estimate for F-test on regression and on non-linearity is the p-value"),
|
h5("*...The estimate for F-test on regression and on Lack-of-Fit is the p-value"),
|
||||||
h5("F-test on regression passes if F-value > F-crit and thus p < 0.05"),
|
h5("F-test on regression passes if F-value > F-crit and thus p < 0.05"),
|
||||||
h5("F-test on non-linearity passes if F-value < F-crit and thus p > 0.05"),
|
h5("F-test on Lack-of-Fit passes if F-value < F-crit and thus p > 0.05"),
|
||||||
h5("Test results outcome: 0 ... test passed (for EQ tests: CI within limits);
|
h5("Test results outcome: 0 ... test passed (for EQ tests: CI within limits);
|
||||||
1 ... test failed (for EQ tests CI not within limits);
|
1 ... test failed (for EQ tests CI not within limits);
|
||||||
-1 ... calculations unbound/denominator too close to 0"),
|
-1 ... calculations unbound/denominator too close to 0"),
|
||||||
@@ -769,37 +782,27 @@ server <- function(input, output, session) {
|
|||||||
})
|
})
|
||||||
output$No4PLFitText <- renderText(warning_textNo4PLFit())
|
output$No4PLFitText <- renderText(warning_textNo4PLFit())
|
||||||
|
|
||||||
output$relpotTestTab <- renderTable({
|
output$relpotTestTab <- renderTable({ NULL })
|
||||||
NULL
|
output$relpotTestPlot <- renderPlot({ NULL })
|
||||||
})
|
|
||||||
output$relpotTestPlot <- renderPlot({
|
|
||||||
NULL
|
|
||||||
})
|
|
||||||
|
|
||||||
output$AIC <- renderTable({
|
output$AIC <- renderTable({ NULL })
|
||||||
NULL
|
output$VarDiagn <- renderTable({ NULL })
|
||||||
})
|
|
||||||
output$VarDiagn <- renderTable({
|
|
||||||
NULL
|
|
||||||
})
|
|
||||||
|
|
||||||
output$pottab4plXL <- renderDT({
|
output$pottab4plXL <- renderDT({ NULL })
|
||||||
NULL
|
output$diagnplot <- renderPlot({ NULL })
|
||||||
})
|
output$EQtests <- renderDT({ NULL })
|
||||||
output$diagnplot <- renderPlot({
|
|
||||||
NULL
|
|
||||||
})
|
|
||||||
output$EQtests <- renderDT({
|
|
||||||
NULL
|
|
||||||
})
|
|
||||||
#
|
#
|
||||||
output$pottab4plTransXL <- renderDT({
|
output$pottab4plTransXL <- renderDT({ NULL })
|
||||||
NULL
|
output$ANOVAXLS <- renderTable({ NULL })
|
||||||
})
|
|
||||||
output$ANOVAXLS <- renderTable({
|
output$coeffs_r <- renderTable({ NULL})
|
||||||
NULL
|
|
||||||
})
|
output$bends_r2 <- renderTable({ NULL })
|
||||||
# )
|
output$coeffs_unr <- renderTable({ NULL })
|
||||||
|
output$logcoeffs_r <- renderTable({ NULL })
|
||||||
|
output$bends_unr2 <- renderTable({ NULL })
|
||||||
|
output$logcoeffs_unr <- renderTable({ NULL })
|
||||||
|
|
||||||
|
|
||||||
return(NULL)
|
return(NULL)
|
||||||
}
|
}
|
||||||
@@ -828,7 +831,7 @@ server <- function(input, output, session) {
|
|||||||
BPsMR_MU <- data.frame(
|
BPsMR_MU <- data.frame(
|
||||||
points = c(
|
points = c(
|
||||||
"lower bendpoint REF", "upper bendpoint REF", "lower bendpoint TEST", "upper bendpoint TEST",
|
"lower bendpoint REF", "upper bendpoint REF", "lower bendpoint TEST", "upper bendpoint TEST",
|
||||||
"lower asymp. point REF", "upper asymp. point REFr", "lower asymp. point TEST", "upper asymp. point TEST",
|
"lower asymp. point REF", "upper asymp. point REF", "lower asymp. point TEST", "upper asymp. point TEST",
|
||||||
"bendREF_lower_unrestr", "bendREF_upper_unrestr", "bendTESTE_lower_unrestr", "bendTEST_upper_unrestr"
|
"bendREF_lower_unrestr", "bendREF_upper_unrestr", "bendTESTE_lower_unrestr", "bendTEST_upper_unrestr"
|
||||||
),
|
),
|
||||||
estimates = c(
|
estimates = c(
|
||||||
@@ -2017,24 +2020,24 @@ server <- function(input, output, session) {
|
|||||||
pottab4_$relative_upperCL <- round(pottab4_[, 7] / pottab4_[, 5] * 100, 2)
|
pottab4_$relative_upperCL <- round(pottab4_[, 7] / pottab4_[, 5] * 100, 2)
|
||||||
|
|
||||||
if (as.numeric(pottab4_$relative_lowerCL[1]) > Lim[[9]] & as.numeric(pottab4_$relative_upperCL[1]) < Lim[[10]]) {
|
if (as.numeric(pottab4_$relative_lowerCL[1]) > Lim[[9]] & as.numeric(pottab4_$relative_upperCL[1]) < Lim[[10]]) {
|
||||||
test_potCI <- 0
|
test_potCI <- "passed"
|
||||||
} else {
|
} else {
|
||||||
test_potCI <- 1
|
test_potCI <- "failed"
|
||||||
}
|
}
|
||||||
if (as.numeric(pottab4_$relative_lowerCL[2]) > Lim[[9]] & as.numeric(pottab4_$relative_upperCL[2]) < Lim[[10]]) {
|
if (as.numeric(pottab4_$relative_lowerCL[2]) > Lim[[9]] & as.numeric(pottab4_$relative_upperCL[2]) < Lim[[10]]) {
|
||||||
test_potUCI <- 0
|
test_potUCI <- ""
|
||||||
} else {
|
} else {
|
||||||
test_potUCI <- 1
|
test_potUCI <- ""
|
||||||
}
|
}
|
||||||
if (as.numeric(pottab4_$relative_lowerCL[3]) > Lim[[9]] & as.numeric(pottab4_$relative_upperCL[3]) < Lim[[10]]) {
|
if (as.numeric(pottab4_$relative_lowerCL[3]) > Lim[[9]] & as.numeric(pottab4_$relative_upperCL[3]) < Lim[[10]]) {
|
||||||
test_potCI_t <- 0
|
test_potCI_t <- ""
|
||||||
} else {
|
} else {
|
||||||
test_potCI_t <- 1
|
test_potCI_t <- ""
|
||||||
}
|
}
|
||||||
if (as.numeric(pottab4_$relative_lowerCL[4]) > Lim[[9]] & as.numeric(pottab4_$relative_upperCL[4]) < Lim[[10]]) {
|
if (as.numeric(pottab4_$relative_lowerCL[4]) > Lim[[9]] & as.numeric(pottab4_$relative_upperCL[4]) < Lim[[10]]) {
|
||||||
test_potUCI_t <- 0
|
test_potUCI_t <- ""
|
||||||
} else {
|
} else {
|
||||||
test_potUCI_t <- 1
|
test_potUCI_t <- ""
|
||||||
}
|
}
|
||||||
pottab4_ <- cbind(pottab4_[, -(2:4)], data.frame(tests = c(test_potCI, test_potUCI, test_potCI_t, test_potUCI_t)))
|
pottab4_ <- cbind(pottab4_[, -(2:4)], data.frame(tests = c(test_potCI, test_potUCI, test_potCI_t, test_potUCI_t)))
|
||||||
colnames(pottab4_) <- c("model", "potency", "lower95%CI", "upper95%CI", "relative_lower95%CI", "relative_upper95%CI", "test_result")
|
colnames(pottab4_) <- c("model", "potency", "lower95%CI", "upper95%CI", "relative_lower95%CI", "relative_upper95%CI", "test_result")
|
||||||
@@ -2049,21 +2052,18 @@ server <- function(input, output, session) {
|
|||||||
paging = T, dom = "t"
|
paging = T, dom = "t"
|
||||||
)
|
)
|
||||||
) %>% formatStyle("test_result", target = "row", backgroundColor = styleEqual(
|
) %>% formatStyle("test_result", target = "row", backgroundColor = styleEqual(
|
||||||
c(0, 1),
|
c("passed", "failed"),
|
||||||
c("#B5C74055", "#F9545455")
|
c("#B5C74055", "#F9545455")
|
||||||
))
|
))
|
||||||
})
|
})
|
||||||
output$pottab4plTransXL <- DT::renderDataTable({
|
output$pottab4plTransXL <- DT::renderDataTable({
|
||||||
dat <- datatable(pottab4_[3:4, ],
|
dat <- datatable(pottab4_[3:4, -ncol(pottab4_)],
|
||||||
rownames = F,
|
rownames = F,
|
||||||
options = list(
|
options = list(
|
||||||
digits = 3,
|
digits = 3,
|
||||||
paging = T, dom = "t"
|
paging = T, dom = "t"
|
||||||
)
|
)
|
||||||
) %>% formatStyle("test_result", target = "row", backgroundColor = styleEqual(
|
)
|
||||||
c(0, 1),
|
|
||||||
c("#B5C74055", "#F9545455")
|
|
||||||
))
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -2607,30 +2607,36 @@ server <- function(input, output, session) {
|
|||||||
|
|
||||||
#### download XL 4PL report----
|
#### download XL 4PL report----
|
||||||
|
|
||||||
output$downloadXLReport <- downloadHandler(
|
observe({
|
||||||
filename = paste0("Report_4PLEvaluation", Dat$RepIdentifier, ".pdf"),
|
if (is.null(Dat$FITsFlag)) return(NULL)
|
||||||
content = function(file) {
|
if (!Dat$FITsFlag) {
|
||||||
tpdr <- tempdir()
|
browser()
|
||||||
tempReport <- file.path(tpdr, "Doc_BioassayReport.Rmd")
|
output$downloadXLReport <- downloadHandler(
|
||||||
file.copy("Doc_BioassayReport.Rmd", tempReport, overwrite = T)
|
filename = paste0("Report_4PLEvaluation", Dat$RepIdentifier, ".pdf"),
|
||||||
|
content = function(file) {
|
||||||
|
tpdr <- tempdir()
|
||||||
|
tempReport <- file.path(tpdr, "Doc_BioassayReport.Rmd")
|
||||||
|
file.copy("Doc_BioassayReport.Rmd", tempReport, overwrite = T)
|
||||||
|
|
||||||
tempReportc <- file.path(tpdr, "logo.png")
|
tempReportc <- file.path(tpdr, "logov2.png")
|
||||||
file.copy("logo.png", tempReportc, overwrite = T)
|
file.copy("logov2.png", tempReportc, overwrite = T)
|
||||||
|
|
||||||
rmarkdown::render(tempReport,
|
rmarkdown::render(tempReport,
|
||||||
output_file = file,
|
output_file = file,
|
||||||
params = list(
|
params = list(
|
||||||
FileName = Dat$FileName,
|
FileName = Dat$FileName,
|
||||||
author = Dat$Author,
|
author = Dat$Author,
|
||||||
NoP = Dat$NoP,
|
NoP = Dat$NoP,
|
||||||
Assay = Dat$Assay,
|
Assay = Dat$Assay,
|
||||||
REP = REP,
|
REP = REP,
|
||||||
coeffs = Dat$coeffs_UN
|
coeffs = Dat$coeffs_UN
|
||||||
),
|
),
|
||||||
envir = new.env(parent = globalenv())
|
envir = new.env(parent = globalenv())
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
})
|
||||||
|
|
||||||
#### download XL Lin report----
|
#### download XL Lin report----
|
||||||
|
|
||||||
@@ -2641,8 +2647,8 @@ server <- function(input, output, session) {
|
|||||||
tempReport <- file.path(tpdr, "Doc_BioassayLinReport.Rmd")
|
tempReport <- file.path(tpdr, "Doc_BioassayLinReport.Rmd")
|
||||||
file.copy("Doc_BioassayLinReport.Rmd", tempReport, overwrite = T)
|
file.copy("Doc_BioassayLinReport.Rmd", tempReport, overwrite = T)
|
||||||
|
|
||||||
tempReportc <- file.path(tpdr, "logo.png")
|
tempReportc <- file.path(tpdr, "logov2.png")
|
||||||
file.copy("logo.png", tempReportc, overwrite = T)
|
file.copy("logov2.png", tempReportc, overwrite = T)
|
||||||
|
|
||||||
rmarkdown::render(tempReport,
|
rmarkdown::render(tempReport,
|
||||||
output_file = file,
|
output_file = file,
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
+118
@@ -0,0 +1,118 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="10mm"
|
||||||
|
height="10mm"
|
||||||
|
viewBox="0 0 10 10"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
inkscape:export-filename="logov2.png"
|
||||||
|
inkscape:export-xdpi="1300.48"
|
||||||
|
inkscape:export-ydpi="1300.48"
|
||||||
|
inkscape:version="1.4.4 (dcaf3e7d9e, 2026-05-05)"
|
||||||
|
sodipodi:docname="logov2.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:zoom="23.455313"
|
||||||
|
inkscape:cx="9.5500753"
|
||||||
|
inkscape:cy="17.885074"
|
||||||
|
inkscape:window-width="1267"
|
||||||
|
inkscape:window-height="1400"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:export-bgcolor="#ffffffff">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="4.9999999,9.9999997"
|
||||||
|
orientation="-1,0"
|
||||||
|
id="guide1"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,4.9999999"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide2"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,1.9999999"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide3"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,7.9999998"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide4"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0.49999999,9.9999997"
|
||||||
|
orientation="-1,0"
|
||||||
|
id="guide5"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="9.4999997,9.9999997"
|
||||||
|
orientation="-1,0"
|
||||||
|
id="guide6"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs1" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<circle
|
||||||
|
style="fill:#418fb7;fill-opacity:1;stroke:#000000;stroke-width:0.264583;stroke-opacity:1"
|
||||||
|
id="path2"
|
||||||
|
cx="5"
|
||||||
|
cy="5"
|
||||||
|
r="3.4559603" />
|
||||||
|
<circle
|
||||||
|
style="display:inline;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.7;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="circle8"
|
||||||
|
cx="5"
|
||||||
|
cy="5"
|
||||||
|
r="3.4559603" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.3;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="circle7"
|
||||||
|
cx="5"
|
||||||
|
cy="5"
|
||||||
|
r="3.4559603" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.7;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 0.5,8 c 4,0 5.0000001,-5.9999999 9,-6"
|
||||||
|
id="path7"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.3;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 0.5,8 c 4,0 5.0000001,-5.9999999 9,-6"
|
||||||
|
id="path6"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
Vendored
BIN
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
Vendored
BIN
Binary file not shown.
+118
@@ -0,0 +1,118 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="10mm"
|
||||||
|
height="10mm"
|
||||||
|
viewBox="0 0 10 10"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
inkscape:export-filename="logov2.png"
|
||||||
|
inkscape:export-xdpi="1300.48"
|
||||||
|
inkscape:export-ydpi="1300.48"
|
||||||
|
inkscape:version="1.4.4 (dcaf3e7d9e, 2026-05-05)"
|
||||||
|
sodipodi:docname="logov2.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:zoom="23.455313"
|
||||||
|
inkscape:cx="9.5500753"
|
||||||
|
inkscape:cy="17.885074"
|
||||||
|
inkscape:window-width="1267"
|
||||||
|
inkscape:window-height="1400"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
inkscape:export-bgcolor="#ffffffff">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="4.9999999,9.9999997"
|
||||||
|
orientation="-1,0"
|
||||||
|
id="guide1"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,4.9999999"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide2"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,1.9999999"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide3"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0,7.9999998"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide4"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="0.49999999,9.9999997"
|
||||||
|
orientation="-1,0"
|
||||||
|
id="guide5"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="9.4999997,9.9999997"
|
||||||
|
orientation="-1,0"
|
||||||
|
id="guide6"
|
||||||
|
inkscape:locked="false"
|
||||||
|
inkscape:label=""
|
||||||
|
inkscape:color="rgb(0,134,229)" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs1" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<circle
|
||||||
|
style="fill:#418fb7;fill-opacity:1;stroke:#000000;stroke-width:0.264583;stroke-opacity:1"
|
||||||
|
id="path2"
|
||||||
|
cx="5"
|
||||||
|
cy="5"
|
||||||
|
r="3.4559603" />
|
||||||
|
<circle
|
||||||
|
style="display:inline;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.7;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="circle8"
|
||||||
|
cx="5"
|
||||||
|
cy="5"
|
||||||
|
r="3.4559603" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.3;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="circle7"
|
||||||
|
cx="5"
|
||||||
|
cy="5"
|
||||||
|
r="3.4559603" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.7;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 0.5,8 c 4,0 5.0000001,-5.9999999 9,-6"
|
||||||
|
id="path7"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.3;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 0.5,8 c 4,0 5.0000001,-5.9999999 9,-6"
|
||||||
|
id="path6"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
Reference in New Issue
Block a user