changeset 3:2aa9da0a84a4 draft default tip

planemo upload for repository https://github.com/Helmholtz-UFZ/galaxy-tools/tree/main/tools/tox_tools/dose_responses commit 707eca86fc2de2e563fb5c89889f54eb13f529d0
author ufz
date Tue, 21 Jan 2025 12:26:00 +0000
parents c122403ac78a
children
files dose_response.R dose_response.xml test-data/image_output.jpg
diffstat 3 files changed, 44 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/dose_response.R	Wed Dec 18 09:11:40 2024 +0000
+++ b/dose_response.R	Tue Jan 21 12:26:00 2025 +0000
@@ -26,7 +26,7 @@
     return(list(EC50 = ec50, EC25 = ec25, EC10 = ec10))
 }
 
-plot_dose_response <- function(model, data, ec_values, concentration_col, response_col, plot_file, compound_name, concentration_unit) {
+plot_dose_response <- function(model, data, ec_values, concentration_col, response_col, replicate_col, plot_file, compound_name, concentration_unit) {
     # Generate a grid of concentration values for predictions
     concentration_grid <- seq(min(data[[concentration_col]]), max(data[[concentration_col]]), length.out = 100)
     prediction_data <- data.frame(concentration_grid)
@@ -40,19 +40,21 @@
 
     print(prediction_data)
 
-    data$rep <- factor(data$rep)
+    # Ensure replicate_col is treated as a factor
+    data[[replicate_col]] <- factor(data[[replicate_col]])
 
     # Create the plot
     p <- ggplot(data, aes_string(x = concentration_col, y = response_col)) +
-        geom_point(aes(colour = rep)) + # Original data points
-        geom_line(data = prediction_data, aes_string(x = "conc", y = "resp"), color = "blue") + # Predicted curve
-        geom_ribbon(data = prediction_data, aes_string(x = "conc", ymin = "lower", ymax = "upper"), alpha = 0.2, fill = "blue") + # Confidence intervals
+        geom_point(aes_string(colour = replicate_col)) + # Original data points
+        geom_line(data = prediction_data, aes_string(x = concentration_col, y = response_col), color = "blue") + # Predicted curve
+        geom_ribbon(data = prediction_data, aes_string(x = concentration_col, ymin = "lower", ymax = "upper"), alpha = 0.2, fill = "blue") + # Confidence intervals
         geom_vline(xintercept = ec_values$EC10[1], color = "green", linetype = "dashed") +
         geom_vline(xintercept = ec_values$EC50[1], color = "red", linetype = "dashed") +
         labs(
             title = paste(compound_name, "- Dose-Response Curve"),
             x = paste("Dose [", concentration_unit, "]"),
-            y = "Response %"
+            y = "Response %",
+            colour = "Replicates"
         ) +
         theme_minimal() +
         theme(
@@ -66,10 +68,11 @@
     dev.off()
 }
 
-dose_response_analysis <- function(data, concentration_col, response_col, plot_file, ec_file, compound_name, concentration_unit) {
+dose_response_analysis <- function(data, concentration_col, response_col, replicate_col, plot_file, ec_file, compound_name, concentration_unit) {
     # Ensure column names are correctly selected
     concentration_col <- colnames(data)[as.integer(concentration_col)]
     response_col <- colnames(data)[as.integer(response_col)]
+    replicate_col <- colnames(data)[as.integer(replicate_col)]
 
     # Fit models and select the best one
     models <- fit_models(data, concentration_col, response_col)
@@ -81,7 +84,7 @@
     ec_values <- calculate_ec_values(best_model)
 
     # Plot the dose-response curve
-    plot_dose_response(best_model, data, ec_values, concentration_col, response_col, plot_file, compound_name, concentration_unit)
+    plot_dose_response(best_model, data, ec_values, concentration_col, response_col, replicate_col, plot_file, compound_name, concentration_unit)
 
     # Get model summary and AIC value
     model_summary <- summary(best_model)
@@ -108,11 +111,12 @@
 data_file <- args[1]
 concentration_col <- args[2]
 response_col <- args[3]
-plot_file <- args[4]
-ec_file <- args[5]
-compound_name <- args[6]
-concentration_unit <- args[7]
+replicate_col <- args[4]
+plot_file <- args[5]
+ec_file <- args[6]
+compound_name <- args[7]
+concentration_unit <- args[8]
 
 data <- read.csv(data_file, header = TRUE, sep = "\t")
 print(data)
-dose_response_analysis(data, concentration_col, response_col, plot_file, ec_file, compound_name, concentration_unit)
+dose_response_analysis(data, concentration_col, response_col, replicate_col, plot_file, ec_file, compound_name, concentration_unit)
--- a/dose_response.xml	Wed Dec 18 09:11:40 2024 +0000
+++ b/dose_response.xml	Tue Jan 21 12:26:00 2025 +0000
@@ -2,7 +2,7 @@
     <description>for Toxicological Risk Assessment</description>
     <macros>
         <token name="@TOOL_VERSION@">3.0.1</token>
-        <token name="@VERSION_SUFFIX@">3</token>
+        <token name="@VERSION_SUFFIX@">4</token>
     </macros>
     <creator>
         <organization name="Helmholtz Centre for Environmental Research - UFZ, Department of Ecotoxicology"
@@ -19,6 +19,7 @@
             '$input_csv'
             '$concentration_column'
             '$response_column'
+            '$replicate_column'
             '$plot_output'
             '$ec_output'
             '$compound_name'
@@ -29,6 +30,7 @@
         <param name="input_csv" type="data" format="tabular" label="Dose-Response Tabular Input"/>
         <param name="concentration_column" type="data_column" data_ref="input_csv" label="Dose/Concentration Column Index" help="Index of the column for concentration values"/>
         <param name="response_column" type="data_column" data_ref="input_csv" label="Response Column Index" help="Index of the column for response values"/>
+        <param name="replicate_column" type="data_column" data_ref="input_csv" label="Replicate Column Index" help="Index of the column for replicate values"/>
         <param name="compound_name" type="text" label="Compound Name" help="Name of the compound to analyze">
             <validator type="regex" message="Enter a valid compound name">^^[a-zA-Z0-9\[\]()_-]+$</validator>
         </param>
@@ -45,6 +47,7 @@
             <param name="input_csv" value="drc_input.tsv"/>
             <param name="concentration_column" value="2"/>
             <param name="response_column" value="3"/>
+            <param name="replicate_column" value="1"/>
             <param name="compound_name" value="test-chemical"/>
             <param name="concentration_unit" value="mg/L"/>
             <output name="plot_output" value="image_output.jpg" ftype="jpg">
@@ -57,14 +60,30 @@
         </test>
     </tests>
     <help><![CDATA[
-        This tool performs dose-response analysis on the provided CSV file,
-        generates a dose-response plot, and calculates EC values (EC10, EC25, EC50).
+        This tool performs dose-response analysis on the provided CSV/TSV file,
+        generates a dose-response plot, and calculates three Effect Concentrations (EC) values (EC10, EC25, EC50).
+        The tool further calculate the AIC and the model summary.
+
+        The tool need three inputs from the CSV/TSV file:
+        - One column with the replicate number
+        - One column with concentrations values
+        - One column with biological response
+
+        An exemplary input might look like:
 
-        - `input_csv`: A TSV file containing the dose-response data.
-        - `concentration_column`: The name of the column in the CSV file that contains the concentration values.
-        - `response_column`: The name of the column in the CSV file that contains the response values
-        - `plot_output`: A JPG image file of the dose-response plot.
-        - `ec_output`: A tabular file containing the calculated EC values.
+      +------------+---------------+---------------+
+      | rep        | conc          | resp          |
+      +============+===============+===============+
+      | 1          | 0             | 0             |
+      +------------+---------------+---------------+
+      | 2          | 10            | 50            |
+      +------------+---------------+---------------+
+      | 1          | 5             | 10            |
+      +------------+---------------+---------------+
+
+        **NOTE: Input Table must have column headers!**
+
+
     ]]></help>
         <citations>
     <citation type="doi">10.1371/journal.pone.0146021</citation>
Binary file test-data/image_output.jpg has changed