Repository 'mqppep_anova'
hg clone https://eddie.galaxyproject.org/repos/eschen42/mqppep_anova

Changeset 15:2c5f1a2fe16a (2022-03-26)
Previous changeset 14:6679616d0c18 (2022-03-22) Next changeset 16:2b9119d7d80a (2022-04-05)
Commit message:
"planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/mqppep commit 96659062ea07ac43d139746b0d119f1ee020f9cd"
modified:
macros.xml
mqppep_anova.R
mqppep_anova.xml
mqppep_anova_script.Rmd
workflow/ppenrich_suite_wf.ga
b
diff -r 6679616d0c18 -r 2c5f1a2fe16a macros.xml
--- a/macros.xml Tue Mar 22 23:12:18 2022 +0000
+++ b/macros.xml Sat Mar 26 02:27:12 2022 +0000
b
@@ -1,5 +1,5 @@
 <macros>
-    <token name="@TOOL_VERSION@">0.1.5</token>
+    <token name="@TOOL_VERSION@">0.1.6</token>
     <token name="@VERSION_SUFFIX@">0</token>
     <xml name="requirements">
         <requirements>
@@ -16,15 +16,18 @@
             <requirement type="package" version="1.7.1"   >r-optparse</requirement>
             <requirement type="package" version="2.11"    >r-rmarkdown</requirement>
             <!--
-            It would be nice to use conda-forge/texlive-core, but issue 23 blocked PDF-creation.
-            Also, I got pango font errors (output had missing symbols replaced with boxes) unless
-            I specified the build as well as the version, i.e.
-            texlive-core=20210325=h97429d4_0
+            It would be nice to use conda-forge/texlive-core rather than r-tinytex because the
+            former installs texlive when the package is built, but issue 23 blocked PDF-creation.
+            Also, texlive-core also gave pango font errors (output had missing symbols replaced
+            with boxes) unless I specified the build as well as the version when building a
+            conda environment, e.g.:  texlive-core=20210325=h97429d4_0
             -->
             <requirement type="package" version="0.37"    >r-tinytex</requirement>
             <requirement type="package" version="3.3.5"   >r-ggplot2</requirement>
             <requirement type="package" version="3.9.10"  >python</requirement>
             <requirement type="package" version="5.26.2"  >perl</requirement>
+            <requirement type="package" version="0.9.4"   >r-latex2exp</requirement>
+            <requirement type="package" version="0.3.7"   >r-vioplot</requirement>
         </requirements>
     </xml>
 </macros>
b
diff -r 6679616d0c18 -r 2c5f1a2fe16a mqppep_anova.R
--- a/mqppep_anova.R Tue Mar 22 23:12:18 2022 +0000
+++ b/mqppep_anova.R Sat Mar 26 02:27:12 2022 +0000
[
@@ -32,7 +32,7 @@
   make_option(
     c("-f", "--firstDataColumn"),
     action = "store",
-    default = "10",
+    default = "^Intensity[^_]",
     type = "character",
     help = "First column of intensity values"
   ),
@@ -110,9 +110,12 @@
 if (! file.exists(args$inputFile)) {
   stop((paste("Input file", args$inputFile, "does not exist")))
 }
-input_file <- args$inputFile
-alpha_file <- args$alphaFile
-first_data_column <- args$firstDataColumn
+input_file             <- args$inputFile
+alpha_file             <- args$alphaFile
+imputed_data_file_name <- args$imputedDataFile
+imp_qn_lt_data_filenm  <- args$imputedQNLTDataFile
+report_file_name       <- args$reportFile
+
 imputation_method <- args$imputationMethod
 print(
   grepl(
@@ -133,42 +136,49 @@
     return(-1)
     }
 
+# read with default values, when applicable
 mean_percentile <- args$meanPercentile
-print("mean_percentile is:")
-cat(str(mean_percentile))
-
-sd_percentile <- args$sdPercentile
-print("sd_percentile is:")
-cat(str(mean_percentile))
-
+sd_percentile   <- args$sdPercentile
+# in the case of 'random" these values are ignored by the client script
+if (imputation_method == "random") {
+  print("mean_percentile is:")
+  cat(str(mean_percentile))
 
-regex_sample_names    <- gsub("^[ \t\n]*", "",
-                         readChar(args$regexSampleNames,  1000)
-                       )
-regex_sample_names    <- gsub("[ \t\n]*$", "",
-                         regex_sample_names
-                       )
-cat(regex_sample_names)
-cat("\n")
+  print("sd_percentile is:")
+  cat(str(mean_percentile))
+}
 
-regex_sample_grouping <- gsub("^[ \t\n]*", "",
-                           readChar(args$regexSampleGrouping, 1000)
-                         )
-regex_sample_grouping <- gsub("[ \t\n]*$", "",
-                           regex_sample_grouping
-                         )
-cat(regex_sample_grouping)
-cat("\n")
-
-imputed_data_file_name <- args$imputedDataFile
-imp_qn_lt_data_filenm <-  args$imputedQNLTDataFile
-report_file_name <- args$reportFile
-
-print("regex_sample_names is:")
-cat(str(regex_sample_names))
-
-print("regex_sample_grouping is:")
-cat(str(regex_sample_grouping))
+# convert string parameters that are passed in via config files:
+#  - firstDataColumn
+#  - regexSampleNames
+#  - regexSampleGrouping
+read_config_file_string <- function(fname, limit) {
+  # eliminate any leading whitespace
+  result    <- gsub("^[ \t\n]*", "", readChar(fname, limit))
+  # eliminate any trailing whitespace
+  result    <- gsub("[ \t\n]*$", "", result)
+  # substitute characters escaped by Galaxy sanitizer
+  result <- gsub("__lt__", "<",  result)
+  result <- gsub("__le__", "<=", result)
+  result <- gsub("__eq__", "==", result)
+  result <- gsub("__ne__", "!=", result)
+  result <- gsub("__gt__", ">",  result)
+  result <- gsub("__ge__", ">=", result)
+  result <- gsub("__sq__", "'",  result)
+  result <- gsub("__dq__", '"',  result)
+  result <- gsub("__ob__", "[",  result)
+  result <- gsub("__cb__", "]",  result)
+}
+cat(paste0("first_data_column file: ", args$firstDataColumn, "\n"))
+cat(paste0("regex_sample_names file: ", args$regexSampleNames, "\n"))
+cat(paste0("regex_sample_grouping file: ", args$regexSampleGrouping, "\n"))
+nc <- 1000
+regex_sample_names <- read_config_file_string(args$regexSampleNames, nc)
+regex_sample_grouping <- read_config_file_string(args$regexSampleGrouping, nc)
+first_data_column <- read_config_file_string(args$firstDataColumn,  nc)
+cat(paste0("first_data_column: ",     first_data_column,     "\n"))
+cat(paste0("regex_sample_names: ",    regex_sample_names,    "\n"))
+cat(paste0("regex_sample_grouping: ", regex_sample_grouping, "\n"))
 
 # from: https://github.com/molgenis/molgenis-pipelines/wiki/
 #   How-to-source-another_file.R-from-within-your-R-script
b
diff -r 6679616d0c18 -r 2c5f1a2fe16a mqppep_anova.xml
--- a/mqppep_anova.xml Tue Mar 22 23:12:18 2022 +0000
+++ b/mqppep_anova.xml Sat Mar 26 02:27:12 2022 +0000
[
@@ -22,7 +22,7 @@
       \${CONDA_PREFIX}/bin/Rscript \$TEMP/mqppep_anova.R
         --inputFile '$input_file'
         --alphaFile '$alpha_file'
-        --firstDataColumn $first_data_column
+        --firstDataColumn $intensity_column_regex_f
         --imputationMethod $imputation.imputation_method
         #if $imputation.imputation_method == "random"
           --meanPercentile '$imputation.meanPercentile'
@@ -45,6 +45,9 @@
       <configfile name="sample_grouping_regex_f">
         $sample_grouping_regex
       </configfile>
+      <configfile name="intensity_column_regex_f">
+        $intensity_column_regex
+      </configfile>
     </configfiles>
     <inputs>
         <param name="input_file" type="data" format="tabular" label="Filtered Phosphopeptide Intensities"
@@ -53,9 +56,9 @@
         <param name="alpha_file" type="data" format="tabular" label="alpha cutoff level"
                help="[alpha_file] List of alpha cutoff values for significance testing; text file having one column and no header"
         />
-        <param name="first_data_column" type="text" value="Intensity"
-               label="First data column"
-               help="[first_data_column] First column having intensity values (integer or PERL-compatible regular expression matching column label)"
+        <param name="intensity_column_regex" type="text" value="^Intensity[^_]"
+               label="Intensity-column pattern"
+               help="[intensity_column_regex] Pattern matching columns that have peptide intensity data (PERL-compatible regular expression matching column label)"
         />
         <!-- imputation_method <- c("group-median","median","mean","random")[1] -->
         <conditional name="imputation">
@@ -75,15 +78,15 @@
                        label="Mean percentile for random values"
                        help="[meanPercentile] Percentile center of random values; range [1,99]"
                 />
-                <param name="sdPercentile" type="float" value="0.2"
+                <param name="sdPercentile" type="float" value="1.0"
                        label="Percentile std. dev. for random values"
                        help="[sdPercentile] Standard deviation adjustment-factor for random values; real number.  (1.0 means SD equal to the SD for the entire data set.)"
                 />
             </when>
         </conditional>
         <param name="sample_names_regex" type="text" value="\.\d+[A-Z]$"
-               help="[sample_names_regex] PERL-compatible regular expression extracting sample-names from the the name of a spectrum file (without extension)"
-               label="Sample-extraction regex">
+               help="[sample_names_regex] Pattern extracting sample-names from names of columns that have peptide intensity data (PERL-compatible regular expression)"
+               label="Sample-extraction pattern">
           <sanitizer>
             <valid initial="string.printable">
               <remove value="&apos;"/>
@@ -91,8 +94,8 @@
           </sanitizer>
         </param>
         <param name="sample_grouping_regex" type="text" value="\d+"
-               help="[sample_grouping_regex] PERL-compatible regular expression extracting sample-group from each sample-name (i.e., extracted by previous regex pattern)"
-               label="Group-extraction regex">
+               help="[sample_grouping_regex] Pattern extracting sample-group from the sample-names that are extracted by 'Sample-extraction pattern' (PERL-compatible regular expression)"
+               label="Group-extraction pattern">
           <sanitizer>
             <valid initial="string.printable">
               <remove value="&apos;"/>
@@ -112,7 +115,7 @@
         <test>
             <param name="input_file" ftype="tabular" value="test_input_for_anova.tabular"/>
             <param name="alpha_file" ftype="tabular" value="alpha_levels.tabular"/>
-            <param name="first_data_column" value="10"/>
+            <param name="intensity_column_regex" value="^Intensity[^_]"/>
             <param name="imputation_method" value="group-median"/>
             <param name="sample_names_regex" value="\.\d+[A-Z]$"/>
             <param name="sample_grouping_regex" value="\d+"/>
@@ -128,10 +131,10 @@
         <test>
             <param name="input_file" ftype="tabular" value="test_input_for_anova.tabular"/>
             <param name="alpha_file" ftype="tabular" value="alpha_levels.tabular"/>
-            <param name="first_data_column" value="10"/>
+            <param name="intensity_column_regex" value="^Intensity[^_]"/>
             <param name="imputation_method" value="random"/>
             <param name="meanPercentile" value="1" />
-            <param name="sdPercentile" value="0.2" />
+            <param name="sdPercentile" value="1.0" />
             <param name="sample_names_regex" value="\.\d+[A-Z]$"/>
             <param name="sample_grouping_regex" value="\d+"/>
             <output name="imp_qn_lt_file">
@@ -167,7 +170,7 @@
 
 **Input parameters**
 
-``first_data_column``
+``intensity_column_regex``
   First column of ``input_file`` having intensity values (integer or PERL-compatible regular expression matching column label). Default: **Intensity**
 
 ``imputation_method``
b
diff -r 6679616d0c18 -r 2c5f1a2fe16a mqppep_anova_script.Rmd
--- a/mqppep_anova_script.Rmd Tue Mar 22 23:12:18 2022 +0000
+++ b/mqppep_anova_script.Rmd Sat Mar 26 02:27:12 2022 +0000
[
b'@@ -8,24 +8,24 @@\n   latex_document:\n     toc: true\n params:\n-  inputFile: "test-data/test_input_for_anova.tabular"\n   alphaFile: "test-data/alpha_levels.tabular"\n-  firstDataColumn: "Intensity"\n+  inputFile: "test-data/UT_Phospho_ST_Sites.preproc.tabular"\n+  firstDataColumn: "^Intensity[^_]"\n   imputationMethod: !r c("group-median", "median", "mean", "random")[4]\n   meanPercentile: 1\n   sdPercentile: 1.0\n   regexSampleNames: "\\\\.\\\\d+[A-Z]$"\n   regexSampleGrouping: "\\\\d+"\n-  imputedDataFilename: "test-data/imputedDataFilename.txt"\n-  imputedQNLTDataFile: "test-data/imputedQNLTDataFile.txt"\n+  imputedDataFilename: "test-data/limbo/imputedDataFilename.txt"\n+  imputedQNLTDataFile: "test-data/limbo/imputedQNLTDataFile.txt"\n   show_toc: true\n ---\n <!--\n-  latex_document: default\n+  alphaFile: "test-data/alpha_levels.tabular"\n   inputFile: "test-data/test_input_for_anova.tabular"\n+  inputFile: "test-data/UT_Phospho_ST_Sites.preproc.tabular"\n   inputFile: "test-data/density_failure.preproc_tab.tabular"\n-  inputFile: "test-data/UT_Phospho_STY_Sites.preproc_tab"\n-date: "May 28, 2018; Mar 16, 2022"\n+  latex_document: default\n -->\n ```{r setup, include = FALSE}\n # ref for parameterizing Rmd document: https://stackoverflow.com/a/37940285\n@@ -44,6 +44,7 @@\n   sqrt(const_stripchart_cex * const_stripchart_cex / 2)\n const_stripchart_jitter <- 0.3\n const_write_debug_files <- FALSE\n+const_table_anchor <- "tbp"\n \n ### FUNCTIONS\n \n@@ -103,7 +104,7 @@\n }\n \n # Use this like print.data.frame, from which it is adapted:\n-print_data_frame_latex <-\n+data_frame_latex <-\n   function(\n     x,\n     ...,\n@@ -116,7 +117,7 @@\n     # string with justification of each column\n     justification = NULL,\n     # TRUE to center on page\n-    centered = FALSE,\n+    centered = TRUE,\n     # optional capttion\n     caption = NULL,\n     # h(inline); b(bottom); t (top) or p (separate page)\n@@ -200,13 +201,10 @@\n \n ```\n \n-## Purpose:\n+## Purpose\n \n Perform imputation of missing values, quantile normalization, and ANOVA.\n \n-<!--\n-## Variables to change for each input file\n--->\n ```{r include = FALSE}\n # Input Filename\n input_file <- params$inputFile\n@@ -214,19 +212,25 @@\n # First data column - ideally, this could be detected via regexSampleNames,\n #   but for now leave it as is.\n first_data_column <- params$firstDataColumn\n-fdc_is_integer <- TRUE\n-first_data_column <- withCallingHandlers(\n-    as.integer(first_data_column)\n-  , warning = function(w) fdc_is_integer <<- FALSE\n-  )\n-if (FALSE == fdc_is_integer) {\n-  first_data_column <- params$firstDataColumn\n+fdc_is_integer <- is.integer(first_data_column)\n+if (fdc_is_integer) {\n+  first_data_column <- as.integer(params$firstDataColumn)\n }\n \n # False discovery rate adjustment for ANOVA\n #  Since pY abundance is low, set to 0.10 and 0.20 in addition to 0.05\n val_fdr <-\n-  read.table(file = params$alphaFile, sep = "\\t", header = F, quote = "")[, 1]\n+  read.table(file = params$alphaFile, sep = "\\t", header = F, quote = "")\n+\n+if (\n+  ncol(val_fdr) != 1 ||\n+  sum(!is.numeric(val_fdr[, 1])) ||\n+  sum(val_fdr[, 1] < 0) ||\n+  sum(val_fdr[, 1] > 1)\n+) {\n+  stop("alphaFile should be one column of numbers within the range [0.0,1.0]")\n+}\n+val_fdr <- val_fdr[, 1]\n \n #Imputed Data filename\n imputed_data_filename <- params$imputedDataFilename\n@@ -274,32 +278,15 @@\n   )\n ```\n \n-### Parse column names, sample names, and factor levels from input file\n+## Extract Sample Names and Factor Levels\n+\n+Column names parsed from input file are shown in Table 1; sample names and factor levels, in Table 2.\n \n ```{r echo = FALSE, results = \'asis\'}\n-# Write column naames as an enumerated list.\n-column_name_df <- data.frame(\n-  column = seq_len(length(colnames(full_data))),\n-  name = colnames(full_data)\n-  )\n-print_data_frame_latex(\n-  x = column_name_df,\n-  justification = "l l",\n-  centered = TRUE,\n-  caption = "Input data column name",\n-  anchor = "h"\n-  )\n \n data_column_indices <- grep(first_data_column, names(full_data), perl = TRUE)\n-cat(\n-  sprintf(\n-'..b'  stripchart(\n+      red_dots,                   # Data\n+      method = "jitter",          # Random noise\n+      jitter = const_stripchart_jitter,\n+      pch = 19,                   # Pch symbols\n+      cex = const_stripsmall_cex, # Size of symbols reduced\n+      col = "red",                # Color of the symbol\n+      vertical = TRUE,            # Vertical mode\n+      add = TRUE                  # Add it over\n+      )\n+\n+  } else {\n+    # violin plot\n+    cat("\\\\leavevmode\\n\\\\quad\\n\\n\\\\quad\\n\\n")\n+    vioplot::vioplot(\n+      x = lapply(blue_dots, function(x) x[!is.na(x)]),\n+      col = "lightblue1",\n+      side = "left",\n+      plotCentre = "line",\n+      ylim = ylim_save,\n+      main = "Distributions of observed and imputed data",\n+      sub = "Light blue = observed data; Pink = imputed data",\n+      xlab = "Sample",\n+      ylab = latex2exp::TeX("$log_{10}$(peptide intensity)")\n+      )\n+    vioplot::vioplot(\n+      x = lapply(red_dots, function(x) x[!is.na(x)]),\n+      col = "lightpink1",\n+      side = "right",\n+      plotCentre = "line",\n+      add = T\n+      )\n+  }\n+\n   par(old_par)\n \n   # density plot\n@@ -738,7 +784,7 @@\n           "Black = combined"\n           ),\n       main = "Density of peptide intensity before and after imputation",\n-      xlab = "log10(peptide intensity)",\n+      xlab = latex2exp::TeX("$log_{10}$(peptide intensity)"),\n       ylab = "Probability density"\n     )\n     lines(d_original, col = "blue")\n@@ -909,18 +955,9 @@\n     quant_data_log\n   , las = 1\n   , col = const_boxplot_fill\n+  , ylab = latex2exp::TeX("$log_{10}$(peptide intensity)")\n+  , xlab = "Sample"\n   )\n-  # Points\n-  stripchart(\n-    quant_data_log, # Data\n-    method = "jitter",          # Random noise\n-    jitter = const_stripchart_jitter,\n-    pch = 19,                   # Pch symbols\n-    cex = const_stripchart_cex, # Size of symbols reduced\n-    col = "goldenrod",          # Color of the symbol\n-    vertical = TRUE,            # Vertical mode\n-    add = TRUE                  # Add it over\n-    )\n   par(old_par)\n } else {\n   cat("There are no peptides to plot\\n")\n@@ -936,7 +973,8 @@\n   ggplot(\n     quant_data_log_stack,\n     aes(x = values)\n-    ) +\n+    ) + xlab(latex2exp::TeX("$log_{10}$(peptide intensity)")) +\n+    ylab("Probability density") +\n     geom_density(\n       aes(group = ind, colour = ind),\n       na.rm = TRUE\n@@ -949,7 +987,7 @@\n cat("\\\\leavevmode\\\\newpage\\n")\n ```\n \n-## Perform ANOVA filters\n+## Perform ANOVA Filters\n \n ```{r, echo = FALSE}\n # Make new data frame containing only Phosphopeptides\n@@ -1125,24 +1163,13 @@\n         main = "Imputed, normalized intensities", # no line plot\n         las = 1,\n         col = const_boxplot_fill,\n-        ylab = expression(log[10](intensity))\n+        ylab = latex2exp::TeX("$log_{10}$(peptide intensity)")\n       )\n-      # Points\n-      stripchart(\n-        filtered_data_filtered,     # Data\n-        method = "jitter",          # Random noise\n-        jitter = const_stripchart_jitter,\n-        pch = 19,                   # Pch symbols\n-        cex = const_stripchart_cex, # Size of symbols reduced\n-        col = "goldenrod",          # Color of the symbol\n-        vertical = TRUE,            # Vertical mode\n-        add = TRUE                  # Add it over\n-        )\n       par(old_par)\n     } else {\n       cat(sprintf(\n         "%s < %0.2f\\n\\n\\n\\n\\n",\n-        "No peptides were found to have cutoff adjusted p-value <",\n+        "No peptides were found to have cutoff adjusted p-value",\n         cutoff\n       ))\n     }\n@@ -1229,11 +1256,12 @@\n           )\n         } else {\n           if (nrow(m) == 1) {\n+            next\n+          } else {\n             cat(\n               sprintf("Heatmap for %d usable peptides whose", nrow(m)),\n               sprintf("adjusted p-value < %0.2f\\n", cutoff)\n             )\n-            next\n           }\n         }\n         cat("\\n\\n\\n")\n@@ -1263,9 +1291,3 @@\n }\n cat("\\\\leavevmode\\n\\n\\n")\n ```\n-\n-<!--\n-## Peptide IDs, etc.\n-\n-See output files.\n--->\n'
b
diff -r 6679616d0c18 -r 2c5f1a2fe16a workflow/ppenrich_suite_wf.ga
--- a/workflow/ppenrich_suite_wf.ga Tue Mar 22 23:12:18 2022 +0000
+++ b/workflow/ppenrich_suite_wf.ga Sat Mar 26 02:27:12 2022 +0000
[
b'@@ -28,27 +28,155 @@\n             "name": "Input dataset",\n             "outputs": [],\n             "position": {\n-                "bottom": 346.3999938964844,\n-                "height": 81.89999389648438,\n-                "left": 495,\n-                "right": 695,\n-                "top": 264.5,\n-                "width": 200,\n-                "x": 495,\n-                "y": 264.5\n+                "bottom": 336.19168853759766,\n+                "height": 82.20000457763672,\n+                "left": 482.5333557128906,\n+                "right": 682.5333709716797,\n+                "top": 253.99168395996094,\n+                "width": 200.00001525878906,\n+                "x": 482.5333557128906,\n+                "y": 253.99168395996094\n             },\n             "tool_id": null,\n-            "tool_state": "{\\"optional\\": false, \\"format\\": [\\"tabular\\"]}",\n+            "tool_state": "{\\"optional\\": false, \\"format\\": [\\"tabular\\"], \\"tag\\": \\"\\"}",\n             "tool_version": null,\n             "type": "data_input",\n-            "uuid": "21c3c29d-9e8c-4ece-b585-9e68fed7a93f",\n+            "uuid": "78170155-4d6c-461b-a289-bcf0196b87db",\n             "workflow_outputs": []\n         },\n         "1": {\n+            "annotation": "Pattern matching columns that have peptide intensity data (PERL-compatible regular expression matching column label)",\n+            "content_id": null,\n+            "errors": null,\n+            "id": 1,\n+            "input_connections": {},\n+            "inputs": [\n+                {\n+                    "description": "Pattern matching columns that have peptide intensity data (PERL-compatible regular expression matching column label)",\n+                    "name": "Intensity-column pattern"\n+                }\n+            ],\n+            "label": "Intensity-column pattern",\n+            "name": "Input parameter",\n+            "outputs": [],\n+            "position": {\n+                "bottom": 443.9083480834961,\n+                "height": 82.20000457763672,\n+                "left": 510.5917053222656,\n+                "right": 710.5917205810547,\n+                "top": 361.7083435058594,\n+                "width": 200.00001525878906,\n+                "x": 510.5917053222656,\n+                "y": 361.7083435058594\n+            },\n+            "tool_id": null,\n+            "tool_state": "{\\"default\\": \\"^Intensity[^_]\\", \\"parameter_type\\": \\"text\\", \\"optional\\": true}",\n+            "tool_version": null,\n+            "type": "parameter_input",\n+            "uuid": "b1a27840-417c-4e81-9fc3-7d3e3dee6753",\n+            "workflow_outputs": []\n+        },\n+        "2": {\n+            "annotation": "Pattern extracting sample-names from names of columns that have peptide intensity data (PERL-compatible regular expression)",\n+            "content_id": null,\n+            "errors": null,\n+            "id": 2,\n+            "input_connections": {},\n+            "inputs": [\n+                {\n+                    "description": "Pattern extracting sample-names from names of columns that have peptide intensity data (PERL-compatible regular expression)",\n+                    "name": "Sample-extraction pattern"\n+                }\n+            ],\n+            "label": "Sample-extraction pattern",\n+            "name": "Input parameter",\n+            "outputs": [],\n+            "position": {\n+                "bottom": 555.9083480834961,\n+                "height": 82.20000457763672,\n+                "left": 526.6583862304688,\n+                "right": 726.6584014892578,\n+                "top": 473.7083435058594,\n+                "width": 200.00001525878906,\n+                "x": 526.6583862304688,\n+                "y": 473.7083435058594\n+            },\n+            "tool_id": null,\n+            "tool_state": "{\\"default\\": \\"\\\\\\\\.\\\\\\\\d+[A-Z]$\\", \\"parameter_type\\": \\"text\\", \\"optional\\": true}",\n+            "tool_version": null,\n+            "type": "parameter_input",\n+            "uuid": "05fe662c-b0a9-4ae7-8232-1b0a09261ac7",'..b'utput"\n                 }\n             },\n             "inputs": [],\n@@ -627,17 +773,17 @@\n                 }\n             ],\n             "position": {\n-                "bottom": 1609.6000061035156,\n-                "height": 255.60000610351562,\n-                "left": 1617,\n-                "right": 1817,\n-                "top": 1354,\n-                "width": 200,\n-                "x": 1617,\n-                "y": 1354\n+                "bottom": 1994.1084289550781,\n+                "height": 367.6000061035156,\n+                "left": 1319.6083984375,\n+                "right": 1519.608413696289,\n+                "top": 1626.5084228515625,\n+                "width": 200.00001525878906,\n+                "x": 1319.6083984375,\n+                "y": 1626.5084228515625\n             },\n             "post_job_actions": {\n-                "RenameDatasetActionimputed_data_file": {\n+                "RenameDatasetActionimp_qn_lt_file": {\n                     "action_arguments": {\n                         "newname": "#{input_file}.intensities_randomly-imputed_QN_LT"\n                     },\n@@ -653,31 +799,32 @@\n                 },\n                 "RenameDatasetActionreport_file": {\n                     "action_arguments": {\n-                        "newname": "#{input_file}.intensities_randomly-imputed_report (download/unzip to view)"\n+                        "newname": "#{input_file}.intensities_randomly-imputed_report"\n                     },\n                     "action_type": "RenameDatasetAction",\n                     "output_name": "report_file"\n                 }\n             },\n             "tool_id": "mqppep_anova",\n-            "tool_state": "{\\"alpha_file\\": {\\"__class__\\": \\"ConnectedValue\\"}, \\"first_data_column\\": \\"Intensity\\", \\"imputation\\": {\\"imputation_method\\": \\"random\\", \\"__current_case__\\": 3, \\"meanPercentile\\": \\"1\\", \\"sdPercentile\\": \\"0.2\\"}, \\"input_file\\": {\\"__class__\\": \\"ConnectedValue\\"}, \\"sample_grouping_regex\\": \\"(\\\\\\\\d+)\\", \\"sample_names_regex\\": \\"\\\\\\\\.(\\\\\\\\d+)[A-Z]$\\", \\"__page__\\": null, \\"__rerun_remap_job_id__\\": null}",\n+            "tool_state": "{\\"alpha_file\\": {\\"__class__\\": \\"ConnectedValue\\"}, \\"imputation\\": {\\"imputation_method\\": \\"random\\", \\"__current_case__\\": 3, \\"meanPercentile\\": \\"1\\", \\"sdPercentile\\": \\"1.0\\"}, \\"input_file\\": {\\"__class__\\": \\"ConnectedValue\\"}, \\"intensity_column_regex\\": \\"^Intensity[^_]\\", \\"sample_grouping_regex\\": {\\"__class__\\": \\"ConnectedValue\\"}, \\"sample_names_regex\\": {\\"__class__\\": \\"ConnectedValue\\"}, \\"__page__\\": null, \\"__rerun_remap_job_id__\\": null}",\n+            "tool_version": null,\n             "type": "tool",\n-            "uuid": "f1f2bdf9-fbc0-4205-b834-9a8af5814dc9",\n+            "uuid": "b239a226-854c-4fbc-8955-cadd968f0704",\n             "workflow_outputs": [\n                 {\n-                    "label": "intensities_randomly-imputed_QN_LT",\n+                    "label": "intensities_randomly-imputed",\n                     "output_name": "imputed_data_file",\n-                    "uuid": "d70a3476-fb42-4533-831b-4fcb2bda74fc"\n+                    "uuid": "8e403d6c-8f47-4f78-addd-da8923695135"\n                 },\n                 {\n                     "label": "intensities_randomly-imputed_report",\n                     "output_name": "report_file",\n-                    "uuid": "d6701a61-357b-4a27-8154-ca41eb16d8a6"\n+                    "uuid": "2c54a01e-ca12-4769-b370-cf137fe4b3f4"\n                 },\n                 {\n                     "label": "intensities_randomly-imputed_QN_LT",\n                     "output_name": "imp_qn_lt_file",\n-                    "uuid": "637faf12-0d52-45b3-a318-40bfc7fcd4cb"\n+                    "uuid": "5fa4acc2-b82f-41e8-aedc-6efdc73f3d58"\n                 }\n             ]\n         }\n@@ -685,6 +832,6 @@\n     "tags": [\n         "ppenrich"\n     ],\n-    "uuid": "445a0eb0-25c7-44c0-8259-a3346b01cbf3",\n-    "version": 3\n+    "uuid": "23c8a0f0-218f-4ba7-9470-ec826d16243a",\n+    "version": 19\n }\n'