comparison NmrPreprocessing_wrapper.R @ 2:5e64657b4fe5 draft

planemo upload for repository https://github.com/workflow4metabolomics/nmr_preprocessing commit 22ca8782d7c4c0211e13c95b425d4f29f53f995e
author lecorguille
date Wed, 28 Mar 2018 08:05:12 -0400
parents
children
comparison
equal deleted inserted replaced
1:cbea5e9fd0b4 2:5e64657b4fe5
1 #!/usr/local/public/bin/Rscript --vanilla --slave --no-site-file
2
3 ## 170116_NmrPreprocessing.R
4 ## Manon Martin and Marie Tremblay-Franco
5
6 ##======================================================
7 ##======================================================
8 # Preamble
9 ##======================================================
10 ##======================================================
11
12 runExampleL <- FALSE
13
14
15 ##------------------------------
16 ## Options
17 ##------------------------------
18 strAsFacL <- options()$stringsAsFactors
19 options(stringsAsFactors = FALSE)
20
21 ##------------------------------
22 ## Libraries laoding
23 ##------------------------------
24 library(batch)
25 library(ptw)
26 library(Matrix)
27 library(ggplot2)
28 library(gridExtra)
29 library(reshape2)
30
31
32 # R script call
33 source_local <- function(fname)
34 {
35 argv <- commandArgs(trailingOnly = FALSE)
36 base_dir <- dirname(substring(argv[grep("--file=", argv)], 8))
37 source(paste(base_dir, fname, sep="/"))
38 }
39 #Import the different functions
40 source_local("NmrPreprocessing_script.R")
41 source_local("DrawFunctions.R")
42
43 ##------------------------------
44 ## Script
45 ##------------------------------
46 runExampleL <- FALSE
47
48
49 if(!runExampleL)
50 argLs <- parseCommandArgs(evaluate=FALSE)
51
52 sink(argLs$logOut)
53
54
55 ##------------------------------
56 ## Errors ?????????????????????
57 ##------------------------------
58
59
60 ##------------------------------
61 ## Constants
62 ##------------------------------
63 topEnvC <- environment()
64 flagC <- "\n"
65
66
67
68
69 # log file
70 # print(argLs[["logOut"]])
71
72 ## Starting
73 cat("\nStart of 'Preprocessing' Galaxy module call: ", as.character(Sys.time()), "\n", sep = "")
74
75
76 ##======================================================
77 ##======================================================
78 ## Parameters Loading
79 ##======================================================
80 ##======================================================
81
82 # graphical inputs
83 FirstOPCGraph <- argLs[["FirstOPCGraph"]]
84 SSGraph <- argLs[["SSGraph"]]
85 ApodGraph <- argLs[["ApodGraph"]]
86 FTGraph <- argLs[["FTGraph"]]
87 SRGraph <- argLs[["SRGraph"]]
88 ZeroOPCGraph <- argLs[["ZeroOPCGraph"]]
89 BCGraph <- argLs[["BCGraph"]]
90 FinalGraph <- argLs[["FinalGraph"]]
91
92
93 # 1rst order phase correction ------------------------
94 # Inputs
95 ## Data matrix
96 Fid_data0 <- read.table(argLs[["dataMatrixFid"]],header=TRUE, check.names=FALSE, sep='\t')
97 # Fid_data0 <- Fid_data0[,-1]
98 Fid_data0 <- as.matrix(Fid_data0)
99
100 ## Samplemetadata
101 samplemetadataFid <- read.table(argLs[["sampleMetadataFid"]],check.names=FALSE,header=TRUE,sep="\t")
102 samplemetadataFid <- as.matrix(samplemetadataFid)
103
104
105 # water and solvent(s) correction ------------------------
106 # Inputs
107 lambda <- argLs[["lambda"]]
108
109
110
111 # apodization -----------------------------------------
112 # Inputs
113 phase=0
114 rectRatio=1/2
115 gaussLB=1
116 expLB=1
117 apodization <- argLs[["apodizationMethod"]]
118
119 if (apodization=='exp'){
120 expLB <- argLs[["expLB"]]
121 } else if (apodization=='cos2'){
122 phase <- argLs[["phase"]]
123 } else if (apodization=='hanning'){
124 phase <- argLs[["phase"]]
125 } else if (apodization=='hamming'){
126 phase <- argLs[["phase"]]
127 } else if (apodization=='blockexp'){
128 rectRatio <- argLs[["rectRatio"]]
129 expLB <- argLs[["expLB"]]
130 } else if (apodization=='blockcos2'){
131 rectRatio <- argLs[["rectRatio"]]
132 } else if (apodization=='gauss'){
133 rectRatio <- argLs[["rectRatio"]]
134 gaussLB <- argLs[["gaussLB"]]
135 }
136
137
138 # Fourier transform ----------------------------------
139 # Inputs
140
141
142 # Internal referencering ----------------------------------
143 # Inputs
144 shiftTreshold = 2 # c
145 ppm = TRUE
146 shiftReferencingRangeList = NULL # fromto.RC
147 pctNearValue = 0.02 # pc
148 rowindex_graph = NULL
149 ppm_ref = 0 # ppm.ref
150
151 #
152 # shiftReferencing <- argLs[["shiftReferencing"]]
153 # print(shiftReferencing)
154 #
155 # if (shiftReferencing=="YES")
156 # {
157 #
158 # shiftReferencingMethod <- argLs[["shiftReferencingMethod"]]
159 #
160 # if (shiftReferencingMethod == "thres") {
161 # shiftTreshold <- argLs[["shiftTreshold"]]
162 # }
163
164 shiftReferencingRange <- argLs[["shiftReferencingRange"]]
165
166 if (shiftReferencingRange == "near0"){
167 pctNearValue <- argLs[["pctNearValue"]]
168 }
169
170 if (shiftReferencingRange == "window"){
171 shiftReferencingRangeList <- list()
172 for(i in which(names(argLs)=="shiftReferencingRangeLeft"))
173 {
174 shiftReferencingRangeLeft <- argLs[[i]]
175 shiftReferencingRangeRight <- argLs[[i+1]]
176 shiftReferencingRangeList <- c(shiftReferencingRangeList,list(c(shiftReferencingRangeLeft,shiftReferencingRangeRight)))
177 }
178 }
179
180 shiftHandling <- argLs[["shiftHandling"]]
181
182 ppmvalue <- argLs[["ppmvalue"]]
183
184
185
186 # }
187
188
189 # Zero Order Phase Correction -------------------------------
190 # Inputs
191
192 angle = NULL
193 excludeZOPC = NULL
194
195
196 zeroOrderPhaseMethod <- argLs[["zeroOrderPhaseMethod"]]
197
198 if (zeroOrderPhaseMethod=='manual'){
199 angle <- argLs[["angle"]]
200 }
201
202 excludeZoneZeroPhase <- argLs[["excludeZoneZeroPhase.choice"]]
203 if (excludeZoneZeroPhase == 'YES') {
204 excludeZoneZeroPhaseList <- list()
205 for(i in which(names(argLs)=="excludeZoneZeroPhase_left")) {
206 excludeZoneZeroPhaseLeft <- argLs[[i]]
207 excludeZoneZeroPhaseRight <- argLs[[i+1]]
208 excludeZoneZeroPhaseList <- c(excludeZoneZeroPhaseList,list(c(excludeZoneZeroPhaseLeft,excludeZoneZeroPhaseRight)))
209 }
210 excludeZOPC <- excludeZoneZeroPhaseList
211 }
212
213
214 # Baseline Correction -------------------------------
215 # Inputs
216 lambdaBc <- argLs[["lambdaBc"]]
217 pBc <- argLs[["pBc"]]
218 epsilon <- argLs[["epsilon"]]
219
220 excludeBC = NULL
221
222 excludeZoneBC <- argLs[["excludeZoneBC.choice"]]
223 if (excludeZoneBC == 'YES') {
224 excludeZoneBCList <- list()
225 for(i in which(names(argLs)=="excludeZoneBC_left")) {
226 excludeZoneBCLeft <- argLs[[i]]
227 excludeZoneBCRight <- argLs[[i+1]]
228 excludeZoneBCList <- c(excludeZoneBCList,list(c(excludeZoneBCLeft,excludeZoneBCRight)))
229 }
230 excludeBC <- excludeZoneBCList
231 }
232
233 # transformation of negative values -------------------------------
234 # Inputs
235 NegativetoZero <- argLs[["NegativetoZero"]]
236
237
238 # Outputs
239 nomGraphe <- argLs[["graphOut"]]
240 # dataMatrixOut <- argLs[["dataMatrixOut"]]
241 log <- argLs[["logOut"]]
242
243
244
245 ## Checking arguments
246 ##-------------------
247 error.stock <- "\n"
248
249 if(length(error.stock) > 1)
250 stop(error.stock)
251
252
253 ##======================================================
254 ##======================================================
255 ## Computation
256 ##======================================================
257 ##======================================================
258
259 pdf(nomGraphe, onefile = TRUE, width = 13, height = 13)
260
261 # FirstOrderPhaseCorrection ---------------------------------
262 Fid_data <- GroupDelayCorrection(Fid_data0, Fid_info = samplemetadataFid, group_delay = NULL)
263
264 if (FirstOPCGraph == "YES") {
265 title = "FIDs after Group Delay Correction"
266 DrawSignal(Fid_data, subtype = "stacked",
267 ReImModArg = c(TRUE, FALSE, FALSE, FALSE), vertical = T,
268 xlab = "Frequency", num.stacked = 4,
269 main = title, createWindow=FALSE)
270 }
271
272 # SolventSuppression ---------------------------------
273 Fid_data <- SolventSuppression(Fid_data, lambda.ss = lambda, ptw.ss = TRUE, plotSolvent = F, returnSolvent = F)
274
275 if (SSGraph == "YES") {
276 title = "FIDs after Solvent Suppression "
277 DrawSignal(Fid_data, subtype = "stacked",
278 ReImModArg = c(TRUE, FALSE, FALSE, FALSE), vertical = T,
279 xlab = "Frequency", num.stacked = 4,
280 main = title, createWindow=FALSE)
281 }
282
283
284 # Apodization ---------------------------------
285 Fid_data <- Apodization(Fid_data, Fid_info = samplemetadataFid, DT = NULL,
286 type.apod = apodization, phase = phase, rectRatio = rectRatio, gaussLB = gaussLB, expLB = expLB, plotWindow = F, returnFactor = F)
287
288 if (ApodGraph == "YES") {
289 title = "FIDs after Apodization"
290 DrawSignal(Fid_data, subtype = "stacked",
291 ReImModArg = c(TRUE, FALSE, FALSE, FALSE), vertical = T,
292 xlab = "Frequency", num.stacked = 4,
293 main = title, createWindow=FALSE)
294 }
295
296
297 # FourierTransform ---------------------------------
298 Spectrum_data <- FourierTransform(Fid_data, Fid_info = samplemetadataFid, reverse.axis = TRUE)
299
300
301 if (FTGraph == "YES") {
302 title = "Fourier transformed spectra"
303 DrawSignal(Spectrum_data, subtype = "stacked",
304 ReImModArg = c(TRUE, FALSE, FALSE, FALSE), vertical = T,
305 xlab = "Frequency", num.stacked = 4,
306 main = title, createWindow=FALSE)
307 }
308
309
310
311 # ZeroOrderPhaseCorrection ---------------------------------
312 Spectrum_data <- ZeroOrderPhaseCorrection(Spectrum_data, type.zopc = zeroOrderPhaseMethod,
313 plot_rms = NULL, returnAngle = FALSE,
314 createWindow = TRUE,angle = angle,
315 plot_spectra = FALSE,
316 ppm.zopc = TRUE, exclude.zopc = excludeZOPC)
317
318
319 # InternalReferencing ---------------------------------
320 # if (shiftReferencing=="YES") {
321 Spectrum_data <- InternalReferencing(Spectrum_data, samplemetadataFid, method = "max", range = shiftReferencingRange,
322 ppm.value = ppmvalue, shiftHandling = shiftHandling, ppm.ir = TRUE,
323 fromto.RC = shiftReferencingRangeList, pc = pctNearValue)
324
325 if (SRGraph == "YES") {
326 title = "Spectra after Shift Referencing"
327 DrawSignal(Spectrum_data, subtype = "stacked",
328 ReImModArg = c(TRUE, FALSE, FALSE, FALSE), vertical = T,
329 xlab = "Frequency", num.stacked = 4,
330 main = title, createWindow=FALSE)
331 }
332
333 # }
334
335 if (ZeroOPCGraph == "YES") {
336 title = "Spectra after Zero Order Phase Correction"
337 DrawSignal(Spectrum_data, subtype = "stacked",
338 ReImModArg = c(TRUE, FALSE, FALSE, FALSE), vertical = T,
339 xlab = "Frequency", num.stacked = 4,
340 main = title, createWindow=FALSE)
341 }
342
343
344 # BaselineCorrection ---------------------------------
345 Spectrum_data <- BaselineCorrection(Spectrum_data, ptw.bc = TRUE, lambda.bc = lambdaBc,
346 p.bc = pBc, eps = epsilon, ppm.bc = TRUE,
347 exclude.bc = excludeBC,
348 returnBaseline = F)
349
350
351
352 if (BCGraph == "YES") {
353 title = "Spectra after Baseline Correction"
354 DrawSignal(Spectrum_data, subtype = "stacked",
355 ReImModArg = c(TRUE, FALSE, FALSE, FALSE), vertical = T,
356 xlab = "Frequency", num.stacked = 4,
357 main = title, createWindow=FALSE)
358 }
359
360
361 # NegativeValuesZeroing ---------------------------------
362 if (NegativetoZero=="YES") {
363 Spectrum_data <- NegativeValuesZeroing(Spectrum_data)
364 }
365
366 if (FinalGraph == "YES") {
367 title = "Final preprocessed spectra"
368 DrawSignal(Spectrum_data, subtype = "stacked",
369 ReImModArg = c(TRUE, FALSE, FALSE, FALSE), vertical = T,
370 xlab = "Frequency", num.stacked = 4,
371 main = title, createWindow=FALSE)
372 }
373
374 invisible(dev.off())
375
376
377 data_variable <- matrix(NA, nrow = 1, ncol = dim(Spectrum_data)[2], dimnames = list("ID", NULL))
378 colnames(data_variable) <- colnames(Spectrum_data)
379 data_variable[1,] <- colnames(data_variable)
380
381
382 ##======================================================
383 ##======================================================
384 ## Saving
385 ##======================================================
386 ##======================================================
387
388 # Data Matrix
389 write.table(round(t(Re(Spectrum_data)),6), file=argLs$dataMatrix, quote=FALSE, row.names=TRUE, sep="\t", col.names=TRUE)
390
391 # Variable metadata
392 write.table(data_variable,file=argLs$variableMetadata, quote=FALSE, row.names=TRUE, sep="\t", col.names=TRUE)
393
394 # log file
395 # write.table(t(data.frame(argLs)), file = argLs$logOut, col.names = FALSE, quote=FALSE)
396
397 # input arguments
398 cat("\n INPUT and OUTPUT ARGUMENTS :\n")
399
400 argLs
401
402
403 ## Ending
404
405 cat("\nEnd of 'Preprocessing' Galaxy module call: ", as.character(Sys.time()), sep = "")
406
407 sink()
408
409 options(stringsAsFactors = strAsFacL)
410
411 rm(list = ls())