6
+ − 1 ## read args:
+ − 2 args <- commandArgs(TRUE)
+ − 3 # xset data:
+ − 4 args.xsetData <- args[1]
+ − 5
+ − 6 args.rtStart <- strtoi(args[2])
+ − 7 args.rtEnd <- strtoi(args[3])
+ − 8
+ − 9 args.mzStart <- as.double(args[4])
+ − 10 args.mzEnd <- as.double(args[5])
+ − 11 # there are 2 options: specify a mz range or a mz list:
+ − 12 if (args.mzStart < 0)
+ − 13 {
+ − 14 args.mzList <- as.double(strsplit(args[6], ",")[[1]])
+ − 15 cat(typeof(as.double(strsplit(args[6], ",")[[1]])))
+ − 16 args.mzTolPpm <- as.double(args[7])
+ − 17 # calculate mzends based on ppm tol:
+ − 18 mzListEnd <- c()
+ − 19 mzListStart <- c()
+ − 20 for (i in 1:length(args.mzList))
+ − 21 {
+ − 22 mzEnd <- args.mzList[i] + args.mzList[i]*args.mzTolPpm/1000000.0
+ − 23 mzStart <- args.mzList[i] - args.mzList[i]*args.mzTolPpm/1000000.0
+ − 24 mzListEnd <- c(mzListEnd, mzEnd)
+ − 25 mzListStart <- c(mzListStart, mzStart)
+ − 26 }
+ − 27 str(mzListStart)
+ − 28 str(mzListEnd)
+ − 29 } else {
+ − 30 mzListEnd <- c(args.mzEnd)
+ − 31 mzListStart <- c(args.mzStart)
+ − 32 }
+ − 33
+ − 34 args.sampleNames <- strsplit(args[8], ",")[[1]]
+ − 35 # trim leading and trailing spaces:
+ − 36 args.sampleNames <- gsub("^\\s+|\\s+$", "", args.sampleNames)
+ − 37
+ − 38 args.combineSamples <- args[9]
+ − 39 args.rtPlotMode <- args[10]
+ − 40
+ − 41 ## report files
+ − 42 args.htmlReportFile <- args[11]
+ − 43 args.htmlReportFile.files_path <- args[12]
+ − 44
+ − 45
+ − 46 if (length(args) == 13)
+ − 47 {
+ − 48 args.outLogFile <- args[13]
+ − 49 # suppress messages:
+ − 50 # Send all STDERR to STDOUT using sink() see http://mazamascience.com/WorkingWithData/?p=888
+ − 51 msg <- file(args.outLogFile, open="wt")
+ − 52 sink(msg, type="message")
+ − 53 sink(msg, type="output")
+ − 54 }
+ − 55
+ − 56 # TODO - add option to do masses in same plot (if given in same line oid) or in separate plots
+ − 57 # TODO2 - let it run in parallel
+ − 58
+ − 59 tryCatch(
+ − 60 {
+ − 61 library(metaMS)
+ − 62
+ − 63 # load the xset data :
+ − 64 xsetData <- readRDS(args.xsetData)
+ − 65 # if here to support both scenarios:
+ − 66 if ("xcmsSet" %in% slotNames(xsetData) )
+ − 67 {
+ − 68 xsetData <- xsetData@xcmsSet
+ − 69 }
+ − 70
+ − 71 # report
+ − 72 dir.create(file.path(args.htmlReportFile.files_path), showWarnings = FALSE, recursive = TRUE)
+ − 73 message(paste("\nGenerating report.........in ", args.htmlReportFile.files_path))
+ − 74
+ − 75 html <- "<html><body><h1>Extracted Ion Chromatograms (EIC) matching criteria</h1>"
+ − 76
+ − 77 if (args.combineSamples == "No")
+ − 78 {
+ − 79 if (length(args.sampleNames) > 1 && length(mzListStart) > 1 && length(args.sampleNames) != length(mzListStart))
+ − 80 stop(paste("The number of sample names should match the number of m/z values in the list. Found ", length(mzListStart),
+ − 81 " masses while ", length(args.sampleNames), " sample names were given."))
+ − 82
+ − 83 iterSize <- length(args.sampleNames)
+ − 84 # these can be set to 1 or 0 just as a trick to iterate OR not over the items. If the respective list is of length 1, only the first item should be used
+ − 85 fixSampleIdx <- 1
+ − 86 fixMzListIdx <- 1
+ − 87 if (length(args.sampleNames) == 1)
+ − 88 {
+ − 89 fixSampleIdx <- 0
+ − 90 iterSize <- length(mzListStart)
+ − 91 }
+ − 92 if (length(mzListStart) == 1)
+ − 93 {
+ − 94 fixMzListIdx <- 0
+ − 95 }
+ − 96 lineColors <- rainbow(iterSize)
+ − 97 for (i in 0:(iterSize-1))
+ − 98 {
+ − 99 message("\nGetting EIC... ")
+ − 100 eiccor <- getEIC(xsetData,
+ − 101 mzrange=matrix(c(mzListStart[i*fixMzListIdx+1],mzListEnd[i*fixMzListIdx+1]),nrow=1,ncol=2,byrow=TRUE),
+ − 102 rtrange=matrix(c(args.rtStart,args.rtEnd),nrow=1,ncol=2,byrow=TRUE),
+ − 103 sampleidx=c(args.sampleNames[i*fixSampleIdx+1]), rt=args.rtPlotMode)
+ − 104
+ − 105 message("\nPlotting figures... ")
+ − 106 figureName <- paste(args.htmlReportFile.files_path, "/figure", i,".png", sep="")
+ − 107 html <- paste(html,"<img src='", "figure", i,".png' /><br/>", sep="")
+ − 108 png( figureName, type="cairo", width=1100,height=250 )
+ − 109 #plot(eiccor, col=lineColors[i+1])
+ − 110 # black is better in this case:
+ − 111 plot(eiccor)
+ − 112 legend('topright', # places a legend at the appropriate place
+ − 113 legend=c(args.sampleNames[i*fixSampleIdx+1]), # puts text in the legend
+ − 114 lty=c(1,1), # gives the legend appropriate symbols (lines)
+ − 115 lwd=c(2.5,2.5))
+ − 116
+ − 117 devname = dev.off()
+ − 118 }
+ − 119
+ − 120 } else {
+ − 121 for (i in 1:length(mzListStart))
+ − 122 {
+ − 123 message("\nGetting EIC... ")
+ − 124 eiccor <- getEIC(xsetData,
+ − 125 mzrange=matrix(c(mzListStart[i],mzListEnd[i]),nrow=1,ncol=2,byrow=TRUE),
+ − 126 rtrange=matrix(c(args.rtStart,args.rtEnd),nrow=1,ncol=2,byrow=TRUE),
+ − 127 sampleidx=args.sampleNames, rt = args.rtPlotMode)
+ − 128
+ − 129 #set size, set option (plot per sample, plot per mass)
+ − 130
+ − 131 message("\nPlotting figures... ")
+ − 132 figureName <- paste(args.htmlReportFile.files_path, "/figure", i,".png", sep="")
+ − 133 html <- paste(html,"<img src='", "figure", i,".png' />", sep="")
+ − 134 png( figureName, type="cairo", width=1100,height=450 )
+ − 135 lineColors <- rainbow(length(args.sampleNames))
+ − 136 plot(eiccor, col=lineColors)
+ − 137 legend('topright', # places a legend at the appropriate place
+ − 138 legend=args.sampleNames, # puts text in the legend
+ − 139 lty=c(1,1), # gives the legend appropriate symbols (lines)
+ − 140 lwd=c(2.5,2.5),
+ − 141 col=lineColors)
+ − 142 devname = dev.off()
+ − 143 }
+ − 144 }
+ − 145 if (args.rtPlotMode == "corrected")
+ − 146 {
+ − 147 html <- paste(html,"<p>*rt values are corrected ones</p></body><html>")
+ − 148 }
+ − 149 html <- paste(html,"</body><html>")
+ − 150 message("finished generating report")
+ − 151 write(html,file=args.htmlReportFile)
+ − 152 # unlink(args.htmlReportFile)
+ − 153 cat("\nWarnings================:\n")
+ − 154 str( warnings() )
+ − 155 },
+ − 156 error=function(cond) {
+ − 157 sink(NULL, type="message") # default setting
+ − 158 sink(stderr(), type="output")
+ − 159 message("\nERROR: ===========\n")
+ − 160 print(cond)
+ − 161 }
+ − 162 )