comparison xcms_summary.r @ 31:1ae878634ab3 draft default tip

planemo upload for repository https://github.com/workflow4metabolomics/tools-metabolomics/ commit 95721ced8347c09e79340e6d67ecb41c5cc64163
author workflow4metabolomics
date Mon, 03 Feb 2025 14:48:46 +0000
parents 2a2850fdf29e
children
comparison
equal deleted inserted replaced
30:444e3ed135e3 31:1ae878634ab3
1 #!/usr/bin/env Rscript 1 #!/usr/bin/env Rscript
2 2
3 3
4 4
5 # ----- ARGUMENTS BLACKLIST ----- 5 # ----- ARGUMENTS BLACKLIST -----
6 #xcms.r 6 # xcms.r
7 argBlacklist <- c("zipfile", "singlefile_galaxyPath", "singlefile_sampleName", "xfunction", "xsetRdataOutput", "sampleMetadataOutput", "ticspdf", "bicspdf", "rplotspdf") 7 argBlacklist <- c("zipfile", "singlefile_galaxyPath", "singlefile_sampleName", "xfunction", "xsetRdataOutput", "sampleMetadataOutput", "ticspdf", "bicspdf", "rplotspdf")
8 #CAMERA.r 8 # CAMERA.r
9 argBlacklist <- c(argBlacklist, "dataMatrixOutput", "variableMetadataOutput", "new_file_path") 9 argBlacklist <- c(argBlacklist, "dataMatrixOutput", "variableMetadataOutput", "new_file_path")
10 10
11 11
12 # ----- PACKAGE ----- 12 # ----- PACKAGE -----
13 cat("\tSESSION INFO\n") 13 cat("\tSESSION INFO\n")
14 14
15 #Import the different functions 15 # Import the different functions
16 source_local <- function(fname) { 16 source_local <- function(fname) {
17 argv <- commandArgs(trailingOnly = FALSE) 17 argv <- commandArgs(trailingOnly = FALSE)
18 base_dir <- dirname(substring(argv[grep("--file=", argv)], 8)) 18 base_dir <- dirname(substring(argv[grep("--file=", argv)], 8))
19 source(paste(base_dir, fname, sep = "/")) 19 source(paste(base_dir, fname, sep = "/"))
20 } 20 }
21 source_local("lib.r") 21 source_local("lib.r")
22 22
23 pkgs <- c("CAMERA", "batch") 23 pkgs <- c("CAMERA", "batch")
24 loadAndDisplayPackages(pkgs) 24 loadAndDisplayPackages(pkgs)
25 cat("\n\n") 25 cat("\n\n")
26 26
27 27
28 # ----- FUNCTION ----- 28 # ----- FUNCTION -----
29 writehtml <- function(...) { 29 writehtml <- function(...) {
30 cat(..., "\n", file = htmlOutput, append = TRUE, sep = "") 30 cat(..., "\n", file = htmlOutput, append = TRUE, sep = "")
31 } 31 }
32 writeraw <- function(htmlOutput, object, open = "at") { 32 writeraw <- function(htmlOutput, object, open = "at") {
33 log_file <- file(htmlOutput, open = open) 33 log_file <- file(htmlOutput, open = open)
34 sink(log_file) 34 sink(log_file)
35 sink(log_file, type = "output") 35 sink(log_file, type = "output")
36 print(object) 36 print(object)
37 sink() 37 sink()
38 close(log_file) 38 close(log_file)
39 } 39 }
40 getSampleNames <- function(xobject) { 40 getSampleNames <- function(xobject) {
41 if (class(xobject) == "xcmsSet") 41 if (class(xobject) == "xcmsSet") {
42 return(sampnames(xobject)) 42 return(sampnames(xobject))
43 if (class(xobject) == "XCMSnExp") 43 }
44 return(xobject@phenoData@data$sample_name) 44 if (class(xobject) == "XCMSnExp") {
45 return(xobject@phenoData@data$sample_name)
46 }
45 } 47 }
46 getFilePaths <- function(xobject) { 48 getFilePaths <- function(xobject) {
47 if (class(xobject) == "xcmsSet") 49 if (class(xobject) == "xcmsSet") {
48 return(xobject@filepaths) 50 return(xobject@filepaths)
49 if (class(xobject) == "XCMSnExp") 51 }
50 return(fileNames(xobject)) 52 if (class(xobject) == "XCMSnExp") {
53 return(fileNames(xobject))
54 }
51 } 55 }
52 equalParams <- function(param1, param2) { 56 equalParams <- function(param1, param2) {
53 writeraw("param1.txt", param1, open = "wt") 57 writeraw("param1.txt", param1, open = "wt")
54 writeraw("param2.txt", param2, open = "wt") 58 writeraw("param2.txt", param2, open = "wt")
55 return(tools::md5sum("param1.txt") == tools::md5sum("param2.txt")) 59 return(tools::md5sum("param1.txt") == tools::md5sum("param2.txt"))
56 } 60 }
57 61
58 62
59 # ----- ARGUMENTS ----- 63 # ----- ARGUMENTS -----
60 64
61 args <- parseCommandArgs(evaluate = FALSE) #interpretation of arguments given in command line as an R list of objects 65 args <- parseCommandArgs(evaluate = FALSE) # interpretation of arguments given in command line as an R list of objects
62 66
63 67
64 # ----- ARGUMENTS PROCESSING ----- 68 # ----- ARGUMENTS PROCESSING -----
65 69
66 #image is an .RData file necessary to use xset variable given by previous tools 70 # image is an .RData file necessary to use xset variable given by previous tools
67 load(args$image) 71 load(args$image)
68 72
69 htmlOutput <- "summary.html" 73 htmlOutput <- "summary.html"
70 if (!is.null(args$htmlOutput)) htmlOutput <- args$htmlOutput 74 if (!is.null(args$htmlOutput)) htmlOutput <- args$htmlOutput
71 75
72 user_email <- NULL 76 user_email <- NULL
73 if (!is.null(args$user_email)) user_email <- args$user_email 77 if (!is.null(args$user_email)) user_email <- args$user_email
74 78
75 # if the RData come from XCMS 1.x 79 # if the RData come from XCMS 1.x
76 if (exists("xset")) { 80 if (exists("xset")) {
77 xobject <- xset 81 xobject <- xset
78 # retrocompatability 82 # retrocompatability
79 if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(sampnames(xobject))) 83 if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(sampnames(xobject)))
80 } 84 }
81 # if the RData come from CAMERA 85 # if the RData come from CAMERA
82 if (exists("xa")) { 86 if (exists("xa")) {
83 xobject <- xa@xcmsSet 87 xobject <- xa@xcmsSet
84 if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(xa@xcmsSet@phenoData$sample_name)) 88 if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(xa@xcmsSet@phenoData$sample_name))
85 } 89 }
86 # if the RData come from XCMS 3.x 90 # if the RData come from XCMS 3.x
87 if (exists("xdata")) { 91 if (exists("xdata")) {
88 xobject <- xdata 92 xobject <- xdata
89 if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(xdata@phenoData@data$sample_name)) 93 if (!exists("sampleNamesList")) sampleNamesList <- list("sampleNamesMakeNames" = make.names(xdata@phenoData@data$sample_name))
90 } 94 }
91 95
92 if (!exists("xobject")) stop("You need at least a xdata, a xset or a xa object.") 96 if (!exists("xobject")) stop("You need at least a xdata, a xset or a xa object.")
93 97
94 98
112 116
113 writehtml("<BODY>") 117 writehtml("<BODY>")
114 writehtml("<div><h1>___ XCMS analysis summary using Workflow4Metabolomics ___</h1>") 118 writehtml("<div><h1>___ XCMS analysis summary using Workflow4Metabolomics ___</h1>")
115 # to pass the planemo shed_test 119 # to pass the planemo shed_test
116 if (user_email != "test@bx.psu.edu") { 120 if (user_email != "test@bx.psu.edu") {
117 if (!is.null(user_email)) writehtml("By: ", user_email, " - ") 121 if (!is.null(user_email)) writehtml("By: ", user_email, " - ")
118 writehtml("Date: ", format(Sys.time(), "%y%m%d-%H:%M:%S")) 122 writehtml("Date: ", format(Sys.time(), "%y%m%d-%H:%M:%S"))
119 } 123 }
120 writehtml("</div>") 124 writehtml("</div>")
121 125
122 writehtml("<h2>Samples used:</h2>") 126 writehtml("<h2>Samples used:</h2>")
123 writehtml("<div><table>") 127 writehtml("<div><table>")
124 if (all(getSampleNames(xobject) == sampleNamesList$sampleNamesMakeNames)) { 128 if (all(getSampleNames(xobject) == sampleNamesList$sampleNamesMakeNames)) {
125 sampleNameHeaderHtml <- paste0("<th>sample</th>") 129 sampleNameHeaderHtml <- paste0("<th>sample</th>")
126 sampleNameHtml <- paste0("<td>", getSampleNames(xobject), "</td>") 130 sampleNameHtml <- paste0("<td>", getSampleNames(xobject), "</td>")
127 } else { 131 } else {
128 sampleNameHeaderHtml <- paste0("<th>sample</th><th>sample renamed</th>") 132 sampleNameHeaderHtml <- paste0("<th>sample</th><th>sample renamed</th>")
129 sampleNameHtml <- paste0("<td>", getSampleNames(xobject), "</td><td>", sampleNamesList$sampleNamesMakeNames, "</td>") 133 sampleNameHtml <- paste0("<td>", getSampleNames(xobject), "</td><td>", sampleNamesList$sampleNamesMakeNames, "</td>")
130 } 134 }
131 135
132 if (!exists("md5sumList")) { 136 if (!exists("md5sumList")) {
133 md5sumHeaderHtml <- "" 137 md5sumHeaderHtml <- ""
134 md5sumHtml <- "" 138 md5sumHtml <- ""
135 md5sumLegend <- "" 139 md5sumLegend <- ""
136 } else if (is.null(md5sumList$removalBadCharacters)) { 140 } else if (is.null(md5sumList$removalBadCharacters)) {
137 md5sumHeaderHtml <- paste0("<th>md5sum<sup>*</sup></th>") 141 md5sumHeaderHtml <- paste0("<th>md5sum<sup>*</sup></th>")
138 md5sumHtml <- paste0("<td>", md5sumList$origin, "</td>") 142 md5sumHtml <- paste0("<td>", md5sumList$origin, "</td>")
139 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." 143 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."
140 } else { 144 } else {
141 md5sumHeaderHtml <- paste0("<th>md5sum<sup>*</sup></th><th>md5sum<sup>**</sup> after bad characters removal</th>") 145 md5sumHeaderHtml <- paste0("<th>md5sum<sup>*</sup></th><th>md5sum<sup>**</sup> after bad characters removal</th>")
142 md5sumHtml <- paste0("<td>", md5sumList$origin, "</td><td>", md5sumList$removalBadCharacters, "</td>") 146 md5sumHtml <- paste0("<td>", md5sumList$origin, "</td><td>", md5sumList$removalBadCharacters, "</td>")
143 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/>" 147 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/>"
144 } 148 }
145 149
146 writehtml("<tr>", sampleNameHeaderHtml, "<th>filename</th>", md5sumHeaderHtml, "</tr>") 150 writehtml("<tr>", sampleNameHeaderHtml, "<th>filename</th>", md5sumHeaderHtml, "</tr>")
147 writehtml(paste0("<tr>", sampleNameHtml, "<td>", getFilePaths(xobject), "</td>", md5sumHtml, "</tr>")) 151 writehtml(paste0("<tr>", sampleNameHtml, "<td>", getFilePaths(xobject), "</td>", md5sumHtml, "</tr>"))
148 152
153 writehtml("<h2>Function launched:</h2>") 157 writehtml("<h2>Function launched:</h2>")
154 writehtml("<div><table>") 158 writehtml("<div><table>")
155 writehtml("<tr><th>timestamp<sup>***</sup></th><th>function</th><th>argument</th><th>value</th></tr>") 159 writehtml("<tr><th>timestamp<sup>***</sup></th><th>function</th><th>argument</th><th>value</th></tr>")
156 # XCMS 3.x 160 # XCMS 3.x
157 if (class(xobject) == "XCMSnExp") { 161 if (class(xobject) == "XCMSnExp") {
158 xcmsFunction <- NULL 162 xcmsFunction <- NULL
159 params <- NULL 163 params <- NULL
160 for (processHistoryItem in processHistory(xobject)) { 164 for (processHistoryItem in processHistory(xobject)) {
161 if ((xcmsFunction == processType(processHistoryItem)) && equalParams(params, processParam(processHistoryItem))) 165 if ((xcmsFunction == processType(processHistoryItem)) && equalParams(params, processParam(processHistoryItem))) {
162 next 166 next
163 timestamp <- processDate(processHistoryItem) 167 }
164 xcmsFunction <- processType(processHistoryItem) 168 timestamp <- processDate(processHistoryItem)
165 params <- processParam(processHistoryItem) 169 xcmsFunction <- processType(processHistoryItem)
166 writehtml("<tr><td>", timestamp, "</td><td>", xcmsFunction, "</td><td colspan='2'><pre>") 170 params <- processParam(processHistoryItem)
167 writeraw(htmlOutput, params) 171 writehtml("<tr><td>", timestamp, "</td><td>", xcmsFunction, "</td><td colspan='2'><pre>")
168 writehtml("</pre></td></tr>") 172 writeraw(htmlOutput, params)
169 } 173 writehtml("</pre></td></tr>")
174 }
170 } 175 }
171 # CAMERA and retrocompatability XCMS 1.x 176 # CAMERA and retrocompatability XCMS 1.x
172 if (exists("listOFlistArguments")) { 177 if (exists("listOFlistArguments")) {
173 for (tool in names(listOFlistArguments)) { 178 for (tool in names(listOFlistArguments)) {
174 listOFlistArgumentsDisplay <- listOFlistArguments[[tool]][!(names(listOFlistArguments[[tool]]) %in% argBlacklist)] 179 listOFlistArgumentsDisplay <- listOFlistArguments[[tool]][!(names(listOFlistArguments[[tool]]) %in% argBlacklist)]
175 180
176 timestamp <- strsplit(tool, "_")[[1]][1] 181 timestamp <- strsplit(tool, "_")[[1]][1]
177 xcmsFunction <- strsplit(tool, "_")[[1]][2] 182 xcmsFunction <- strsplit(tool, "_")[[1]][2]
178 writehtml("<tr><td rowspan='", length(listOFlistArgumentsDisplay), "'>", timestamp, "</td><td rowspan='", length(listOFlistArgumentsDisplay), "'>", xcmsFunction, "</td>") 183 writehtml("<tr><td rowspan='", length(listOFlistArgumentsDisplay), "'>", timestamp, "</td><td rowspan='", length(listOFlistArgumentsDisplay), "'>", xcmsFunction, "</td>")
179 line_begin <- "" 184 line_begin <- ""
180 for (arg in names(listOFlistArgumentsDisplay)) { 185 for (arg in names(listOFlistArgumentsDisplay)) {
181 writehtml(line_begin, "<td>", arg, "</td><td>", unlist(listOFlistArgumentsDisplay[arg][1]), "</td></tr>") 186 writehtml(line_begin, "<td>", arg, "</td><td>", unlist(listOFlistArgumentsDisplay[arg][1]), "</td></tr>")
182 line_begin <- "<tr>" 187 line_begin <- "<tr>"
183 } 188 }
184 } 189 }
185 } 190 }
186 writehtml("</table>") 191 writehtml("</table>")
187 writehtml("<br/><sup>***</sup>timestamp format: DD MM dd hh:mm:ss YYYY or yymmdd-hh:mm:ss") 192 writehtml("<br/><sup>***</sup>timestamp format: DD MM dd hh:mm:ss YYYY or yymmdd-hh:mm:ss")
188 writehtml("</div>") 193 writehtml("</div>")
189 194
190 if (class(xobject) == "XCMSnExp") { 195 if (class(xobject) == "XCMSnExp") {
191 writehtml("<h2>Informations about the XCMSnExp object:</h2>") 196 writehtml("<h2>Informations about the XCMSnExp object:</h2>")
192 writehtml("<div><pre>") 197 writehtml("<div><pre>")
193 writeraw(htmlOutput, xobject) 198 writeraw(htmlOutput, xobject)
194 writehtml("</pre></div>") 199 writehtml("</pre></div>")
195 } 200 }
196 201
197 writehtml("<h2>Informations about the xcmsSet object:</h2>") 202 writehtml("<h2>Informations about the xcmsSet object:</h2>")
198 203
199 writehtml("<div><pre>") 204 writehtml("<div><pre>")
202 writeraw(htmlOutput, xset) 207 writeraw(htmlOutput, xset)
203 writehtml("</pre></div>") 208 writehtml("</pre></div>")
204 209
205 # CAMERA 210 # CAMERA
206 if (exists("xa")) { 211 if (exists("xa")) {
207 writehtml("<h2>Informations about the CAMERA object:</h2>") 212 writehtml("<h2>Informations about the CAMERA object:</h2>")
208 writehtml("<div>") 213 writehtml("<div>")
209 writehtml("Number of pcgroup: ", length(xa@pspectra)) 214 writehtml("Number of pcgroup: ", length(xa@pspectra))
210 writehtml("</div>") 215 writehtml("</div>")
211 } 216 }
212 217
213 writehtml("<h2>Citations:</h2>") 218 writehtml("<h2>Citations:</h2>")
214 writehtml("<div><ul>") 219 writehtml("<div><ul>")
215 writehtml("<li>To cite the <b>XCMS</b> package in publications use:") 220 writehtml("<li>To cite the <b>XCMS</b> package in publications use:")