diff xcms_summary.r @ 29:2a2850fdf29e draft default tip

planemo upload for repository https://github.com/workflow4metabolomics/tools-metabolomics/ commit 2cb157bd9a8701a3d6874e084032cbd050b8953e
author workflow4metabolomics
date Mon, 11 Sep 2023 09:23:36 +0000
parents 018a9771de28
children
line wrap: on
line diff
--- a/xcms_summary.r	Wed Apr 07 16:46:50 2021 +0000
+++ b/xcms_summary.r	Mon Sep 11 09:23:36 2023 +0000
@@ -14,13 +14,15 @@
 
 #Import the different functions
 source_local <- function(fname) {
-  argv <- commandArgs(trailingOnly = FALSE); base_dir <- dirname(substring(argv[grep("--file=", argv)], 8)); source(paste(base_dir, fname, sep = "/"))
+  argv <- commandArgs(trailingOnly = FALSE)
+  base_dir <- dirname(substring(argv[grep("--file=", argv)], 8))
+  source(paste(base_dir, fname, sep = "/"))
 }
 source_local("lib.r")
 
 pkgs <- c("CAMERA", "batch")
 loadAndDisplayPackages(pkgs)
-cat("\n\n");
+cat("\n\n")
 
 
 # ----- FUNCTION -----
@@ -28,29 +30,29 @@
   cat(..., "\n", file = htmlOutput, append = TRUE, sep = "")
 }
 writeraw <- function(htmlOutput, object, open = "at") {
-    log_file <- file(htmlOutput, open = open)
-    sink(log_file)
-    sink(log_file, type = "output")
-        print(object)
-    sink()
-    close(log_file)
+  log_file <- file(htmlOutput, open = open)
+  sink(log_file)
+  sink(log_file, type = "output")
+  print(object)
+  sink()
+  close(log_file)
 }
 getSampleNames <- function(xobject) {
-    if (class(xobject) == "xcmsSet")
-        return(sampnames(xobject))
-    if (class(xobject) == "XCMSnExp")
-        return(xobject@phenoData@data$sample_name)
+  if (class(xobject) == "xcmsSet")
+    return(sampnames(xobject))
+  if (class(xobject) == "XCMSnExp")
+    return(xobject@phenoData@data$sample_name)
 }
 getFilePaths <- function(xobject) {
-    if (class(xobject) == "xcmsSet")
-        return(xobject@filepaths)
-    if (class(xobject) == "XCMSnExp")
-        return(fileNames(xobject))
+  if (class(xobject) == "xcmsSet")
+    return(xobject@filepaths)
+  if (class(xobject) == "XCMSnExp")
+    return(fileNames(xobject))
 }
 equalParams <- function(param1, param2) {
-    writeraw("param1.txt", param1, open = "wt")
-    writeraw("param2.txt", param2, open = "wt")
-    return(tools::md5sum("param1.txt") == tools::md5sum("param2.txt"))
+  writeraw("param1.txt", param1, open = "wt")
+  writeraw("param2.txt", param2, open = "wt")
+  return(tools::md5sum("param1.txt") == tools::md5sum("param2.txt"))
 }
 
 
@@ -62,29 +64,29 @@
 # ----- ARGUMENTS PROCESSING -----
 
 #image is an .RData file necessary to use xset variable given by previous tools
-load(args$image);
+load(args$image)
 
 htmlOutput <- "summary.html"
-if (!is.null(args$htmlOutput)) htmlOutput <- args$htmlOutput;
+if (!is.null(args$htmlOutput)) htmlOutput <- args$htmlOutput
 
 user_email <- NULL
-if (!is.null(args$user_email)) user_email <- args$user_email;
+if (!is.null(args$user_email)) user_email <- args$user_email
 
 # if the RData come from XCMS 1.x
 if (exists("xset")) {
-    xobject <- xset
-    # retrocompatability
-    if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(sampnames(xobject)))
+  xobject <- xset
+  # retrocompatability
+  if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(sampnames(xobject)))
 }
 # if the RData come from CAMERA
 if (exists("xa")) {
-    xobject <- xa@xcmsSet
-    if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(xa@xcmsSet@phenoData$sample_name))
+  xobject <- xa@xcmsSet
+  if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(xa@xcmsSet@phenoData$sample_name))
 }
 # if the RData come from XCMS 3.x
 if (exists("xdata")) {
-    xobject <- xdata
-    if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(xdata@phenoData@data$sample_name))
+  xobject <- xdata
+  if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(xdata@phenoData@data$sample_name))
 }
 
 if (!exists("xobject")) stop("You need at least a xdata, a xset or a xa object.")
@@ -95,143 +97,141 @@
 writehtml("<HTML lang='en'>")
 
 writehtml("<HEAD>")
-    writehtml("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />")
+writehtml("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />")
 
-    writehtml("<title>[W4M] XCMS analysis summary</title>")
+writehtml("<title>[W4M] XCMS analysis summary</title>")
 
-    writehtml("<style>")
-        writehtml("table, tr, td, th { border: 1px solid #000000; border-collapse:collapse; }")
-        writehtml("td, th { padding: 5px; padding-right: 12px; }")
-        writehtml("th { background: #898989; text-align:left;color: white;}")
-        writehtml("h2 { color: #FFA212; }")
-        writehtml("ul li { margin-bottom:10px; }")
-    writehtml("</style>")
+writehtml("<style>")
+writehtml("table, tr, td, th { border: 1px solid #000000; border-collapse:collapse; }")
+writehtml("td, th { padding: 5px; padding-right: 12px; }")
+writehtml("th { background: #898989; text-align:left;color: white;}")
+writehtml("h2 { color: #FFA212; }")
+writehtml("ul li { margin-bottom:10px; }")
+writehtml("</style>")
 writehtml("</HEAD>")
 
 writehtml("<BODY>")
-    writehtml("<div><h1>___ XCMS analysis summary using Workflow4Metabolomics ___</h1>")
-    # to pass the planemo shed_test
-    if (user_email != "test@bx.psu.edu") {
-        if (!is.null(user_email)) writehtml("By: ", user_email, " - ")
-        writehtml("Date: ", format(Sys.time(), "%y%m%d-%H:%M:%S"))
-    }
-    writehtml("</div>")
+writehtml("<div><h1>___ XCMS analysis summary using Workflow4Metabolomics ___</h1>")
+# to pass the planemo shed_test
+if (user_email != "test@bx.psu.edu") {
+  if (!is.null(user_email)) writehtml("By: ", user_email, " - ")
+  writehtml("Date: ", format(Sys.time(), "%y%m%d-%H:%M:%S"))
+}
+writehtml("</div>")
 
-    writehtml("<h2>Samples used:</h2>")
-    writehtml("<div><table>")
-        if (all(getSampleNames(xobject) == sampleNamesList$sampleNamesMakeNames)) {
-            sampleNameHeaderHtml <- paste0("<th>sample</th>")
-            sampleNameHtml <- paste0("<td>", getSampleNames(xobject), "</td>")
-        } else {
-            sampleNameHeaderHtml <- paste0("<th>sample</th><th>sample renamed</th>")
-            sampleNameHtml <- paste0("<td>", getSampleNames(xobject), "</td><td>", sampleNamesList$sampleNamesMakeNames, "</td>")
-        }
+writehtml("<h2>Samples used:</h2>")
+writehtml("<div><table>")
+if (all(getSampleNames(xobject) == sampleNamesList$sampleNamesMakeNames)) {
+  sampleNameHeaderHtml <- paste0("<th>sample</th>")
+  sampleNameHtml <- paste0("<td>", getSampleNames(xobject), "</td>")
+} else {
+  sampleNameHeaderHtml <- paste0("<th>sample</th><th>sample renamed</th>")
+  sampleNameHtml <- paste0("<td>", getSampleNames(xobject), "</td><td>", sampleNamesList$sampleNamesMakeNames, "</td>")
+}
 
-        if (!exists("md5sumList")) {
-            md5sumHeaderHtml <- ""
-            md5sumHtml <- ""
-            md5sumLegend <- ""
-        } else if (is.null(md5sumList$removalBadCharacters)) {
-            md5sumHeaderHtml <- paste0("<th>md5sum<sup>*</sup></th>")
-            md5sumHtml <- paste0("<td>", md5sumList$origin, "</td>")
-            md5sumLegend <- "<br/><sup>*</sup>The program md5sum is designed to verify data integrity. So you can check if the data were uploaded correctly or if the data were changed during the process."
-        } else {
-            md5sumHeaderHtml <- paste0("<th>md5sum<sup>*</sup></th><th>md5sum<sup>**</sup> after bad characters removal</th>")
-            md5sumHtml <- paste0("<td>", md5sumList$origin, "</td><td>", md5sumList$removalBadCharacters, "</td>")
-            md5sumLegend <- "<br/><sup>*</sup>The program md5sum is designed to verify data integrity. So you can check if the data were uploaded correctly or if the data were changed during the process.<br/><sup>**</sup>Because some bad characters (eg: accent) were removed from your original file, the checksum have changed too.<br/>"
-        }
-
-        writehtml("<tr>", sampleNameHeaderHtml, "<th>filename</th>", md5sumHeaderHtml, "</tr>")
-        writehtml(paste0("<tr>", sampleNameHtml, "<td>", getFilePaths(xobject), "</td>", md5sumHtml, "</tr>"))
-
-    writehtml("</table>")
-    writehtml(md5sumLegend)
-    writehtml("</div>")
+if (!exists("md5sumList")) {
+  md5sumHeaderHtml <- ""
+  md5sumHtml <- ""
+  md5sumLegend <- ""
+} else if (is.null(md5sumList$removalBadCharacters)) {
+  md5sumHeaderHtml <- paste0("<th>md5sum<sup>*</sup></th>")
+  md5sumHtml <- paste0("<td>", md5sumList$origin, "</td>")
+  md5sumLegend <- "<br/><sup>*</sup>The program md5sum is designed to verify data integrity. So you can check if the data were uploaded correctly or if the data were changed during the process."
+} else {
+  md5sumHeaderHtml <- paste0("<th>md5sum<sup>*</sup></th><th>md5sum<sup>**</sup> after bad characters removal</th>")
+  md5sumHtml <- paste0("<td>", md5sumList$origin, "</td><td>", md5sumList$removalBadCharacters, "</td>")
+  md5sumLegend <- "<br/><sup>*</sup>The program md5sum is designed to verify data integrity. So you can check if the data were uploaded correctly or if the data were changed during the process.<br/><sup>**</sup>Because some bad characters (eg: accent) were removed from your original file, the checksum have changed too.<br/>"
+}
 
-    writehtml("<h2>Function launched:</h2>")
-    writehtml("<div><table>")
-        writehtml("<tr><th>timestamp<sup>***</sup></th><th>function</th><th>argument</th><th>value</th></tr>")
-        # XCMS 3.x
-        if (class(xobject) == "XCMSnExp") {
-            xcmsFunction <- NULL
-            params <- NULL
-            for (processHistoryItem in processHistory(xobject)) {
-                if ((xcmsFunction == processType(processHistoryItem)) && equalParams(params, processParam(processHistoryItem)))
-                    next
-                timestamp <- processDate(processHistoryItem)
-                xcmsFunction <- processType(processHistoryItem)
-                params <- processParam(processHistoryItem)
-                writehtml("<tr><td>", timestamp, "</td><td>", xcmsFunction, "</td><td colspan='2'><pre>")
-                writeraw(htmlOutput, params)
-                writehtml("</pre></td></tr>")
-            }
-        }
-        # CAMERA and retrocompatability XCMS 1.x
-        if (exists("listOFlistArguments")) {
-            for (tool in names(listOFlistArguments)) {
-                listOFlistArgumentsDisplay <- listOFlistArguments[[tool]][!(names(listOFlistArguments[[tool]]) %in% argBlacklist)]
+writehtml("<tr>", sampleNameHeaderHtml, "<th>filename</th>", md5sumHeaderHtml, "</tr>")
+writehtml(paste0("<tr>", sampleNameHtml, "<td>", getFilePaths(xobject), "</td>", md5sumHtml, "</tr>"))
+
+writehtml("</table>")
+writehtml(md5sumLegend)
+writehtml("</div>")
 
-                timestamp <- strsplit(tool, "_")[[1]][1]
-                xcmsFunction <- strsplit(tool, "_")[[1]][2]
-                writehtml("<tr><td rowspan='", length(listOFlistArgumentsDisplay), "'>", timestamp, "</td><td rowspan='", length(listOFlistArgumentsDisplay), "'>", xcmsFunction, "</td>")
-                line_begin <- ""
-                for (arg in names(listOFlistArgumentsDisplay)) {
-                    writehtml(line_begin, "<td>", arg, "</td><td>", unlist(listOFlistArgumentsDisplay[arg][1]), "</td></tr>")
-                    line_begin <- "<tr>"
-                }
-            }
-        }
-    writehtml("</table>")
-    writehtml("<br/><sup>***</sup>timestamp format: DD MM dd hh:mm:ss YYYY or yymmdd-hh:mm:ss")
-    writehtml("</div>")
+writehtml("<h2>Function launched:</h2>")
+writehtml("<div><table>")
+writehtml("<tr><th>timestamp<sup>***</sup></th><th>function</th><th>argument</th><th>value</th></tr>")
+# XCMS 3.x
+if (class(xobject) == "XCMSnExp") {
+  xcmsFunction <- NULL
+  params <- NULL
+  for (processHistoryItem in processHistory(xobject)) {
+    if ((xcmsFunction == processType(processHistoryItem)) && equalParams(params, processParam(processHistoryItem)))
+      next
+    timestamp <- processDate(processHistoryItem)
+    xcmsFunction <- processType(processHistoryItem)
+    params <- processParam(processHistoryItem)
+    writehtml("<tr><td>", timestamp, "</td><td>", xcmsFunction, "</td><td colspan='2'><pre>")
+    writeraw(htmlOutput, params)
+    writehtml("</pre></td></tr>")
+  }
+}
+# CAMERA and retrocompatability XCMS 1.x
+if (exists("listOFlistArguments")) {
+  for (tool in names(listOFlistArguments)) {
+    listOFlistArgumentsDisplay <- listOFlistArguments[[tool]][!(names(listOFlistArguments[[tool]]) %in% argBlacklist)]
 
-    if (class(xobject) == "XCMSnExp") {
-        writehtml("<h2>Informations about the XCMSnExp object:</h2>")
-
-        writehtml("<div><pre>")
-            writeraw(htmlOutput, xobject)
-        writehtml("</pre></div>")
+    timestamp <- strsplit(tool, "_")[[1]][1]
+    xcmsFunction <- strsplit(tool, "_")[[1]][2]
+    writehtml("<tr><td rowspan='", length(listOFlistArgumentsDisplay), "'>", timestamp, "</td><td rowspan='", length(listOFlistArgumentsDisplay), "'>", xcmsFunction, "</td>")
+    line_begin <- ""
+    for (arg in names(listOFlistArgumentsDisplay)) {
+      writehtml(line_begin, "<td>", arg, "</td><td>", unlist(listOFlistArgumentsDisplay[arg][1]), "</td></tr>")
+      line_begin <- "<tr>"
     }
-
-    writehtml("<h2>Informations about the xcmsSet object:</h2>")
-
-    writehtml("<div><pre>")
-        # Get the legacy xcmsSet object
-        xset <- getxcmsSetObject(xobject)
-        writeraw(htmlOutput, xset)
-    writehtml("</pre></div>")
+  }
+}
+writehtml("</table>")
+writehtml("<br/><sup>***</sup>timestamp format: DD MM dd hh:mm:ss YYYY or yymmdd-hh:mm:ss")
+writehtml("</div>")
 
-    # CAMERA
-    if (exists("xa")) {
-        writehtml("<h2>Informations about the CAMERA object:</h2>")
+if (class(xobject) == "XCMSnExp") {
+  writehtml("<h2>Informations about the XCMSnExp object:</h2>")
+  writehtml("<div><pre>")
+  writeraw(htmlOutput, xobject)
+  writehtml("</pre></div>")
+}
+
+writehtml("<h2>Informations about the xcmsSet object:</h2>")
 
-        writehtml("<div>")
-            writehtml("Number of pcgroup: ", length(xa@pspectra))
-        writehtml("</div>")
-    }
+writehtml("<div><pre>")
+# Get the legacy xcmsSet object
+xset <- getxcmsSetObject(xobject)
+writeraw(htmlOutput, xset)
+writehtml("</pre></div>")
+
+# CAMERA
+if (exists("xa")) {
+  writehtml("<h2>Informations about the CAMERA object:</h2>")
+  writehtml("<div>")
+  writehtml("Number of pcgroup: ", length(xa@pspectra))
+  writehtml("</div>")
+}
 
-    writehtml("<h2>Citations:</h2>")
-    writehtml("<div><ul>")
-        writehtml("<li>To cite the <b>XCMS</b> package in publications use:")
-            writehtml("<ul>")
-            writehtml("<li>", "Smith, C.A. and Want, E.J. and O'Maille, G. and Abagyan,R. and Siuzdak, G.XCMS: Processing mass spectrometry data for metabolite profiling using nonlinear peak alignment, matching and identification, Analytical Chemistry, 78:779-787 (2006)", "</li>")
-            writehtml("<li>", "Ralf Tautenhahn, Christoph Boettcher, Steffen Neumann: Highly sensitive feature detection for high resolution LC/MS BMC Bioinformatics, 9:504 (2008)", "</li>")
-            writehtml("<li>", "H. Paul Benton, Elizabeth J. Want and Timothy M. D. Ebbels Correction of mass calibration gaps in liquid chromatography-mass spectrometry metabolomics data Bioinformatics, 26:2488 (2010)", "</li>")
-            writehtml("</ul>")
-        writehtml("</li>")
+writehtml("<h2>Citations:</h2>")
+writehtml("<div><ul>")
+writehtml("<li>To cite the <b>XCMS</b> package in publications use:")
+writehtml("<ul>")
+writehtml("<li>", "Smith, C.A. and Want, E.J. and O'Maille, G. and Abagyan,R. and Siuzdak, G.XCMS: Processing mass spectrometry data for metabolite profiling using nonlinear peak alignment, matching and identification, Analytical Chemistry, 78:779-787 (2006)", "</li>")
+writehtml("<li>", "Ralf Tautenhahn, Christoph Boettcher, Steffen Neumann: Highly sensitive feature detection for high resolution LC/MS BMC Bioinformatics, 9:504 (2008)", "</li>")
+writehtml("<li>", "H. Paul Benton, Elizabeth J. Want and Timothy M. D. Ebbels Correction of mass calibration gaps in liquid chromatography-mass spectrometry metabolomics data Bioinformatics, 26:2488 (2010)", "</li>")
+writehtml("</ul>")
+writehtml("</li>")
 
-        writehtml("<li>To cite the <b>CAMERA</b> package in publications use:")
-            writehtml("<ul>")
-            writehtml("<li>", "Kuhl, C., Tautenhahn, R., Boettcher, C., Larson, T. R. and Neumann,S. CAMERA: an integrated strategy for compound spectra extraction and annotation of liquid chromatography/mass spectrometry data sets. Analytical Chemistry, 84:283-289 (2012)", "</li>")
-            writehtml("</ul>")
-        writehtml("</li>")
+writehtml("<li>To cite the <b>CAMERA</b> package in publications use:")
+writehtml("<ul>")
+writehtml("<li>", "Kuhl, C., Tautenhahn, R., Boettcher, C., Larson, T. R. and Neumann,S. CAMERA: an integrated strategy for compound spectra extraction and annotation of liquid chromatography/mass spectrometry data sets. Analytical Chemistry, 84:283-289 (2012)", "</li>")
+writehtml("</ul>")
+writehtml("</li>")
 
-        writehtml("<li>To cite the <b>Workflow4Metabolimics (W4M)</b> project in publications use:")
-            writehtml("<ul>")
-            writehtml("<li>", "Franck Giacomoni, Gildas Le Corguillé, Misharl Monsoor, Marion Landi, Pierre Pericard, Mélanie Pétéra, Christophe Duperier, Marie Tremblay-Franco, Jean-François Martin, Daniel Jacob, Sophie Goulitquer, Etienne A. Thévenot and Christophe Caron (2014). Workflow4Metabolomics: A collaborative research infrastructure for computational metabolomics. Bioinformatics  doi:10.1093/bioinformatics/btu813", "</li>")
-            writehtml("</ul>")
-        writehtml("</li>")
-    writehtml("</ul></div>")
+writehtml("<li>To cite the <b>Workflow4Metabolimics (W4M)</b> project in publications use:")
+writehtml("<ul>")
+writehtml("<li>", "Franck Giacomoni, Gildas Le Corguillé, Misharl Monsoor, Marion Landi, Pierre Pericard, Mélanie Pétéra, Christophe Duperier, Marie Tremblay-Franco, Jean-François Martin, Daniel Jacob, Sophie Goulitquer, Etienne A. Thévenot and Christophe Caron (2014). Workflow4Metabolomics: A collaborative research infrastructure for computational metabolomics. Bioinformatics  doi:10.1093/bioinformatics/btu813", "</li>")
+writehtml("</ul>")
+writehtml("</li>")
+writehtml("</ul></div>")
 
 writehtml("</BODY>")