annotate xcms_summary.r @ 0:fdc068daa4a8 draft

planemo upload
author lecorguille
date Sat, 20 Feb 2016 05:15:38 -0500
parents
children 0692b03eeddc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
1 #!/usr/local/public/bin/Rscript --vanilla --slave --no-site-file
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
2 # version="0.1.0"
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
3 #@author Gildas Le Corguille lecorguille@sb-roscoff.fr ABIMS TEAM
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
4
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
5
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
6
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
7 # ----- ARGUMENTS BLACKLIST -----
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
8 #xcms.r
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
9 argBlacklist=c("zipfile","xfunction","xsetRdataOutput","sampleMetadataOutput","ticspdf","bicspdf","rplotspdf")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
10 #CAMERA.r
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
11 argBlacklist=c(argBlacklist,"dataMatrixOutput","variableMetadataOutput","new_file_path")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
12
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
13 # ----- PACKAGE -----
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
14
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
15 pkgs=c("parallel","BiocGenerics", "Biobase", "Rcpp", "mzR", "tcltk","igraph", "xcms","snow","CAMERA","multtest","batch")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
16 for(pkg in pkgs) {
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
17 suppressPackageStartupMessages( stopifnot( library(pkg, quietly=TRUE, logical.return=TRUE, character.only=TRUE)))
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
18 }
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
19
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
20
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
21 # ----- FUNCTION -----
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
22 writehtml = function(...) { cat(...,"\n", file=htmlOutput,append = TRUE,sep="") }
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
23
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
24
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
25 # ----- ARGUMENTS -----
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
26
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
27 listArguments = parseCommandArgs(evaluate=FALSE) #interpretation of arguments given in command line as an R list of objects
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
28
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
29
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
30 # ----- ARGUMENTS PROCESSING -----
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
31
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
32 #image is an .RData file necessary to use xset variable given by previous tools
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
33 load(listArguments[["image"]]);
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
34
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
35 htmlOutput = "summary.html"
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
36 if (!is.null(listArguments[["htmlOutput"]])) htmlOutput = listArguments[["htmlOutput"]];
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
37
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
38 user_email = NULL
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
39 if (!is.null(listArguments[["user_email"]])) user_email = listArguments[["user_email"]];
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
40
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
41 # if the RData come from CAMERA
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
42 if (!exists("xset") & exists("xa")) xset=xa@xcmsSet
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
43
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
44 # retrocompatability
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
45 if (!exists("sampleNamesList")) sampleNamesList=list("sampleNamesMakeNames"=make.names(sampnames(xset)))
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
46
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
47 if (!exists("xset")) stop("You need at least a xset or a xa object.")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
48
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
49
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
50
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
51 # ----- MAIN PROCESSING INFO -----
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
52 writehtml("<!DOCTYPE html>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
53 writehtml("<HTML lang='en'>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
54
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
55 writehtml("<HEAD>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
56 writehtml("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
57
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
58 writehtml("<title>[W4M] XCMS analysis summary</title>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
59
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
60 writehtml("<style>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
61 writehtml("table, tr, td, th { border: 1px solid #000000; border-collapse:collapse; }")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
62 writehtml("td,th { padding: 5px; padding-right: 12px; }")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
63 writehtml("th { background: #898989; text-align:left;color: white;}")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
64 writehtml("h2 { color: #FFA212; }")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
65 writehtml("ul li { margin-bottom:10px; }")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
66 writehtml("</style>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
67 writehtml("</HEAD>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
68
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
69 writehtml("<BODY>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
70 writehtml("<div><h1>___ XCMS analysis summary using Workflow4Metabolomics ___</h1>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
71 # to pass the planemo shed_test
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
72 if (user_email != "test@bx.psu.edu") {
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
73 if (!is.null(user_email)) writehtml("By: ",user_email," - ")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
74 writehtml("Date: ",format(Sys.time(), "%y%m%d-%H:%M:%S"))
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
75 }
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
76 writehtml("</div>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
77
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
78 writehtml("<h2>Samples used:</h2>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
79 writehtml("<div><table>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
80 if (all(sampnames(xset) == sampleNamesList$sampleNamesMakeNames)) {
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
81 sampleNameHeaderHtml = paste("<th>sample</th>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
82 sampleNameHtml = paste("<td>",sampnames(xset),"</td>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
83 } else {
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
84 sampleNameHeaderHtml = paste("<th>sample</th><th>sample renamed</th>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
85 sampleNameHtml = paste("<td>",sampnames(xset),"</td><td>",sampleNamesList$sampleNamesMakeNames,"</td>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
86 }
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
87
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
88 if (!exists("md5sumList")) {
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
89 md5sumHeaderHtml = ""
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
90 md5sumHtml = ""
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
91 md5sumLegend=""
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
92 } else if (is.null(md5sumList$removalBadCharacters)) {
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
93 md5sumHeaderHtml = paste("<th>md5sum<sup>*</sup></th>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
94 md5sumHtml = paste("<td>",md5sumList$origin,"</td>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
95 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 chancged during the process."
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
96 } else {
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
97 md5sumHeaderHtml = paste("<th>md5sum<sup>*</sup></th><th>md5sum<sup>**</sup> after bad characters removal</th>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
98 md5sumHtml = paste("<td>",md5sumList$origin,"</td><td>",md5sumList$removalBadCharacters,"</td>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
99 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 chancged during the process.<br/><sup>**</sup>Because some bad characters (eg: accent) were removed from your original file, the checksum have changed too.<br/>"
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
100 }
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
101
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
102 writehtml("<tr>",sampleNameHeaderHtml,"<th>filename</th>",md5sumHeaderHtml,"</tr>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
103 writehtml(paste("<tr>",sampleNameHtml,"<td>",xset@filepaths,"</td>",md5sumHtml,"</tr>"))
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
104
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
105 writehtml("</table>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
106 writehtml(md5sumLegend)
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
107 writehtml("</div>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
108
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
109 writehtml("<h2>Function launched:</h2>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
110 writehtml("<div><table>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
111 writehtml("<tr><th>timestamp<sup>***</sup></th><th>function</th><th>argument</th><th>value</th></tr>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
112 for(tool in names(listOFlistArguments)) {
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
113 listOFlistArgumentsDisplay=listOFlistArguments[[tool]][!(names(listOFlistArguments[[tool]]) %in% argBlacklist)]
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
114
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
115 timestamp = strsplit(tool,"_")[[1]][1]
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
116 xcmsFunction = strsplit(tool,"_")[[1]][2]
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
117 writehtml("<tr><td rowspan='",length(listOFlistArgumentsDisplay),"'>",timestamp,"</td><td rowspan='",length(listOFlistArgumentsDisplay),"'>",xcmsFunction,"</td>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
118 line_begin=""
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
119 for (arg in names(listOFlistArgumentsDisplay)) {
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
120 writehtml(line_begin,"<td>",arg,"</td><td>",unlist(listOFlistArgumentsDisplay[arg][1]),"</td></tr>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
121 line_begin="<tr>"
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
122 }
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
123 }
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
124 writehtml("</table>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
125 writehtml("<br/><sup>***</sup>timestamp format: yymmdd-hh:mm:ss")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
126 writehtml("</div>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
127
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
128 writehtml("<h2>Informations about the xcmsSet object:</h2>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
129
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
130 writehtml("<div><pre>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
131 log_file=file(htmlOutput, open = "at")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
132 sink(log_file)
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
133 sink(log_file, type = "output")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
134 xset
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
135 sink()
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
136 writehtml("</pre></div>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
137
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
138 if (exists("xa")) {
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
139 writehtml("<h2>Informations about the CAMERA object:</h2>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
140
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
141 writehtml("<div>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
142 writehtml("Number of pcgroup:",length(xa@pspectra))
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
143 writehtml("</div>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
144 }
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
145
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
146 writehtml("<h2>Citations:</h2>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
147 writehtml("<div><ul>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
148 writehtml("<li>To cite the <b>XCMS</b> package in publications use:")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
149 writehtml("<ul>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
150 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>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
151 writehtml("<li>","Ralf Tautenhahn, Christoph Boettcher, Steffen Neumann: Highly sensitive feature detection for high resolution LC/MS BMC Bioinformatics, 9:504 (2008)","</li>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
152 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>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
153 writehtml("</ul>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
154 writehtml("</li>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
155
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
156 writehtml("<li>To cite the <b>CAMERA</b> package in publications use:")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
157 writehtml("<ul>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
158 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>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
159 writehtml("</ul>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
160 writehtml("</li>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
161
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
162 writehtml("<li>To cite the <b>Workflow4Metabolimics (W4M)</b> project in publications use:")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
163 writehtml("<ul>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
164 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>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
165 writehtml("</ul>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
166 writehtml("</li>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
167 writehtml("</ul></div>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
168
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
169 writehtml("</BODY>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
170
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
171 writehtml("</HTML>")
fdc068daa4a8 planemo upload
lecorguille
parents:
diff changeset
172