Next changeset 1:28c842dce1db (2018-09-19) |
Commit message:
planemo upload for repository https://github.com/workflow4metabolomics/xcms commit 9f72e947d9c241d11221cad561f3525d27231857 |
added:
README.rst lib-xcms3.x.x.r lib.r macros.xml macros_xcms.xml repository_dependencies.xml static/images/xcms_plot_chromatogram_workflow.png test-data/BPIs.pdf test-data/TICs.pdf test-data/faahKO-single.xset.merged.group.retcor.RData test-data/ko15.CDF test-data/ko16.CDF test-data/sampleMetadata.tab test-data/wt15.CDF test-data/wt16.CDF xcms_plot_chromatogram.r xcms_plot_chromatogram.xml |
b |
diff -r 000000000000 -r c749bfd3410e README.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.rst Tue Sep 18 16:06:05 2018 -0400 |
b |
@@ -0,0 +1,6 @@ +Changelog/News +-------------- + +**Version 3.0.0.0 - 07/03/2018** + +- NEW: This new tool will plot base peak intensity chromatogram (BPI) and total ion chromatogram (TIC) from xcms experience. It will replace the one created by xcmsSet and retcor tools. |
b |
diff -r 000000000000 -r c749bfd3410e lib-xcms3.x.x.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib-xcms3.x.x.r Tue Sep 18 16:06:05 2018 -0400 |
[ |
@@ -0,0 +1,152 @@ + + +#@TODO: remove this function as soon as we can use xcms 3.x.x from Bioconductor 3.7 +# https://github.com/sneumann/xcms/issues/250 +groupnamesW4M <- function(xdata, mzdec = 0, rtdec = 0) { + mzfmt <- paste("%.", mzdec, "f", sep = "") + rtfmt <- paste("%.", rtdec, "f", sep = "") + + gnames <- paste("M", sprintf(mzfmt, featureDefinitions(xdata)[,"mzmed"]), "T", + sprintf(rtfmt, featureDefinitions(xdata)[,"rtmed"]), sep = "") + + if (any(dup <- duplicated(gnames))) + for (dupname in unique(gnames[dup])) { + dupidx <- which(gnames == dupname) + gnames[dupidx] <- paste(gnames[dupidx], seq(along = dupidx), sep = "_") + } + + return (gnames) +} + +#@TODO: remove this function as soon as we can use xcms 3.x.x from Bioconductor 3.7 +# https://github.com/sneumann/xcms/issues/247 +.concatenate_XCMSnExp <- function(...) { + x <- list(...) + if (length(x) == 0) + return(NULL) + if (length(x) == 1) + return(x[[1]]) + ## Check that all are XCMSnExp objects. + if (!all(unlist(lapply(x, function(z) is(z, "XCMSnExp"))))) + stop("All passed objects should be 'XCMSnExp' objects") + new_x <- as(.concatenate_OnDiskMSnExp(...), "XCMSnExp") + ## If any of the XCMSnExp has alignment results or detected features drop + ## them! + x <- lapply(x, function(z) { + if (hasAdjustedRtime(z)) { + z <- dropAdjustedRtime(z) + warning("Adjusted retention times found, had to drop them.") + } + if (hasFeatures(z)) { + z <- dropFeatureDefinitions(z) + warning("Feature definitions found, had to drop them.") + } + z + }) + ## Combine peaks + fls <- lapply(x, fileNames) + startidx <- cumsum(lengths(fls)) + pks <- lapply(x, chromPeaks) + procH <- lapply(x, processHistory) + for (i in 2:length(fls)) { + pks[[i]][, "sample"] <- pks[[i]][, "sample"] + startidx[i - 1] + procH[[i]] <- lapply(procH[[i]], function(z) { + z@fileIndex <- as.integer(z@fileIndex + startidx[i - 1]) + z + }) + } + pks <- do.call(rbind, pks) + new_x@.processHistory <- unlist(procH) + chromPeaks(new_x) <- pks + if (validObject(new_x)) + new_x +} + +#@TODO: remove this function as soon as we can use xcms 3.x.x from Bioconductor 3.7 +# https://github.com/sneumann/xcms/issues/247 +.concatenate_OnDiskMSnExp <- function(...) { + x <- list(...) + if (length(x) == 0) + return(NULL) + if (length(x) == 1) + return(x[[1]]) + ## Check that all are XCMSnExp objects. + if (!all(unlist(lapply(x, function(z) is(z, "OnDiskMSnExp"))))) + stop("All passed objects should be 'OnDiskMSnExp' objects") + ## Check processingQueue + procQ <- lapply(x, function(z) z@spectraProcessingQueue) + new_procQ <- procQ[[1]] + is_ok <- unlist(lapply(procQ, function(z) + !is.character(all.equal(new_procQ, z)) + )) + if (any(!is_ok)) { + warning("Processing queues from the submitted objects differ! ", + "Dropping the processing queue.") + new_procQ <- list() + } + ## processingData + fls <- lapply(x, function(z) z@processingData@files) + startidx <- cumsum(lengths(fls)) + ## featureData + featd <- lapply(x, fData) + ## Have to update the file index and the spectrum names. + for (i in 2:length(featd)) { + featd[[i]]$fileIdx <- featd[[i]]$fileIdx + startidx[i - 1] + rownames(featd[[i]]) <- MSnbase:::formatFileSpectrumNames( + fileIds = featd[[i]]$fileIdx, + spectrumIds = featd[[i]]$spIdx, + nSpectra = nrow(featd[[i]]), + nFiles = length(unlist(fls)) + ) + } + featd <- do.call(rbind, featd) + featd$spectrum <- 1:nrow(featd) + ## experimentData + expdata <- lapply(x, function(z) { + ed <- z@experimentData + data.frame(instrumentManufacturer = ed@instrumentManufacturer, + instrumentModel = ed@instrumentModel, + ionSource = ed@ionSource, + analyser = ed@analyser, + detectorType = ed@detectorType, + stringsAsFactors = FALSE) + }) + expdata <- do.call(rbind, expdata) + expdata <- new("MIAPE", + instrumentManufacturer = expdata$instrumentManufacturer, + instrumentModel = expdata$instrumentModel, + ionSource = expdata$ionSource, + analyser = expdata$analyser, + detectorType = expdata$detectorType) + + ## protocolData + protodata <- lapply(x, function(z) z@protocolData) + if (any(unlist(lapply(protodata, nrow)) > 0)) + warning("Found non-empty protocol data, but merging protocol data is", + " currently not supported. Skipped.") + ## phenoData + pdata <- do.call(rbind, lapply(x, pData)) + res <- new( + "OnDiskMSnExp", + phenoData = new("NAnnotatedDataFrame", data = pdata), + featureData = new("AnnotatedDataFrame", featd), + processingData = new("MSnProcess", + processing = paste0("Concatenated [", date(), "]"), + files = unlist(fls), smoothed = NA), + experimentData = expdata, + spectraProcessingQueue = new_procQ) + if (validObject(res)) + res +} + +#@TODO: remove this function as soon as we can use xcms 3.x.x from Bioconductor 3.7 +# https://github.com/sneumann/xcms/issues/247 +c.XCMSnExp <- function(...) { + .concatenate_XCMSnExp(...) +} + +#@TODO: remove this function as soon as we can use xcms 3.x.x from Bioconductor 3.7 +# https://github.com/sneumann/xcms/issues/247 +c.MSnbase <- function(...) { + .concatenate_OnDiskMSnExp(...) +} |
b |
diff -r 000000000000 -r c749bfd3410e lib.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib.r Tue Sep 18 16:06:05 2018 -0400 |
[ |
b'@@ -0,0 +1,510 @@\n+#@authors ABiMS TEAM, Y. Guitton\n+# lib.r for Galaxy Workflow4Metabolomics xcms tools\n+\n+#@author G. Le Corguille\n+# solve an issue with batch if arguments are logical TRUE/FALSE\n+parseCommandArgs <- function(...) {\n+ args <- batch::parseCommandArgs(...)\n+ for (key in names(args)) {\n+ if (args[key] %in% c("TRUE","FALSE"))\n+ args[key] = as.logical(args[key])\n+ }\n+ return(args)\n+}\n+\n+#@author G. Le Corguille\n+# This function will\n+# - load the packages\n+# - display the sessionInfo\n+loadAndDisplayPackages <- function(pkgs) {\n+ for(pkg in pkgs) suppressPackageStartupMessages( stopifnot( library(pkg, quietly=TRUE, logical.return=TRUE, character.only=TRUE)))\n+\n+ sessioninfo = sessionInfo()\n+ cat(sessioninfo$R.version$version.string,"\\n")\n+ cat("Main packages:\\n")\n+ for (pkg in names(sessioninfo$otherPkgs)) { cat(paste(pkg,packageVersion(pkg)),"\\t") }; cat("\\n")\n+ cat("Other loaded packages:\\n")\n+ for (pkg in names(sessioninfo$loadedOnly)) { cat(paste(pkg,packageVersion(pkg)),"\\t") }; cat("\\n")\n+}\n+\n+#@author G. Le Corguille\n+# This function merge several chromBPI or chromTIC into one.\n+mergeChrom <- function(chrom_merged, chrom) {\n+ if (is.null(chrom_merged)) return(NULL)\n+ chrom_merged@.Data <- cbind(chrom_merged@.Data, chrom@.Data)\n+ return(chrom_merged)\n+}\n+\n+#@author G. Le Corguille\n+# This function merge several xdata into one.\n+mergeXData <- function(args) {\n+ chromTIC <- NULL\n+ chromBPI <- NULL\n+ chromTIC_adjusted <- NULL\n+ chromBPI_adjusted <- NULL\n+ for(image in args$images) {\n+\n+ load(image)\n+ # Handle infiles\n+ if (!exists("singlefile")) singlefile <- NULL\n+ if (!exists("zipfile")) zipfile <- NULL\n+ rawFilePath <- getRawfilePathFromArguments(singlefile, zipfile, args)\n+ zipfile <- rawFilePath$zipfile\n+ singlefile <- rawFilePath$singlefile\n+ retrieveRawfileInTheWorkingDirectory(singlefile, zipfile)\n+\n+ if (exists("raw_data")) xdata <- raw_data\n+ if (!exists("xdata")) stop("\\n\\nERROR: The RData doesn\'t contain any object called \'xdata\'. This RData should have been created by an old version of XMCS 2.*")\n+\n+ cat(sampleNamesList$sampleNamesOrigin,"\\n")\n+\n+ if (!exists("xdata_merged")) {\n+ xdata_merged <- xdata\n+ singlefile_merged <- singlefile\n+ md5sumList_merged <- md5sumList\n+ sampleNamesList_merged <- sampleNamesList\n+ chromTIC_merged <- chromTIC\n+ chromBPI_merged <- chromBPI\n+ chromTIC_adjusted_merged <- chromTIC_adjusted\n+ chromBPI_adjusted_merged <- chromBPI_adjusted\n+ } else {\n+ if (is(xdata, "XCMSnExp")) xdata_merged <- c(xdata_merged,xdata)\n+ else if (is(xdata, "OnDiskMSnExp")) xdata_merged <- .concatenate_OnDiskMSnExp(xdata_merged,xdata)\n+ else stop("\\n\\nERROR: The RData either a OnDiskMSnExp object called raw_data or a XCMSnExp object called xdata")\n+\n+ singlefile_merged <- c(singlefile_merged,singlefile)\n+ md5sumList_merged$origin <- rbind(md5sumList_merged$origin,md5sumList$origin)\n+ sampleNamesList_merged$sampleNamesOrigin <- c(sampleNamesList_merged$sampleNamesOrigin,sampleNamesList$sampleNamesOrigin)\n+ sampleNamesList_merged$sampleNamesMakeNames <- c(sampleNamesList_merged$sampleNamesMakeNames,sampleNamesList$sampleNamesMakeNames)\n+ chromTIC_merged <- mergeChrom(chromTIC_merged, chromTIC)\n+ chromBPI_merged <- mergeChrom(chromBPI_merged, chromBPI)\n+ chromTIC_adjusted_merged <- mergeChrom(chromTIC_adjusted_merged, chromTIC_adjusted)\n+ chromBPI_adjusted_merged <- mergeChrom(chromBPI_adjusted_merged, chromBPI_adjusted)\n+ }\n+ }\n+ rm(image)\n+ xdata <- xdata_merged; rm(xdata_merged)\n+ singlefile <- singlefile_merged; rm(singlefile_merged)\n+ md5sumList <- md5sumList_merged; rm(md5sumList_merged)\n+ sampleNa'..b'(files)))\n+}\n+\n+\n+# This function get the raw file path from the arguments\n+#@author Gildas Le Corguille lecorguille@sb-roscoff.fr\n+getRawfilePathFromArguments <- function(singlefile, zipfile, args, prefix="") {\n+ if (!(prefix %in% c("","Positive","Negative","MS1","MS2"))) stop("prefix must be either \'\', \'Positive\', \'Negative\', \'MS1\' or \'MS2\'")\n+\n+ if (!is.null(args[[paste0("zipfile",prefix)]])) zipfile <- args[[paste0("zipfile",prefix)]]\n+\n+ if (!is.null(args[[paste0("singlefile_galaxyPath",prefix)]])) {\n+ singlefile_galaxyPaths <- args[[paste0("singlefile_galaxyPath",prefix)]]\n+ singlefile_sampleNames <- args[[paste0("singlefile_sampleName",prefix)]]\n+ }\n+ if (exists("singlefile_galaxyPaths")){\n+ singlefile_galaxyPaths <- unlist(strsplit(singlefile_galaxyPaths,"\\\\|"))\n+ singlefile_sampleNames <- unlist(strsplit(singlefile_sampleNames,"\\\\|"))\n+\n+ singlefile <- NULL\n+ for (singlefile_galaxyPath_i in seq(1:length(singlefile_galaxyPaths))) {\n+ singlefile_galaxyPath <- singlefile_galaxyPaths[singlefile_galaxyPath_i]\n+ singlefile_sampleName <- singlefile_sampleNames[singlefile_galaxyPath_i]\n+ # In case, an url is used to import data within Galaxy\n+ singlefile_sampleName <- tail(unlist(strsplit(singlefile_sampleName,"/")), n=1)\n+ singlefile[[singlefile_sampleName]] <- singlefile_galaxyPath\n+ }\n+ }\n+ return(list(zipfile=zipfile, singlefile=singlefile))\n+}\n+\n+# This function retrieve the raw file in the working directory\n+# - if zipfile: unzip the file with its directory tree\n+# - if singlefiles: set symlink with the good filename\n+#@author Gildas Le Corguille lecorguille@sb-roscoff.fr\n+retrieveRawfileInTheWorkingDirectory <- function(singlefile, zipfile) {\n+ if(!is.null(singlefile) && (length("singlefile")>0)) {\n+ for (singlefile_sampleName in names(singlefile)) {\n+ singlefile_galaxyPath <- singlefile[[singlefile_sampleName]]\n+ if(!file.exists(singlefile_galaxyPath)){\n+ error_message <- paste("Cannot access the sample:",singlefile_sampleName,"located:",singlefile_galaxyPath,". Please, contact your administrator ... if you have one!")\n+ print(error_message); stop(error_message)\n+ }\n+\n+ if (!suppressWarnings( try (file.link(singlefile_galaxyPath, singlefile_sampleName), silent=T)))\n+ file.copy(singlefile_galaxyPath, singlefile_sampleName)\n+\n+ }\n+ directory <- "."\n+\n+ }\n+ if(!is.null(zipfile) && (zipfile != "")) {\n+ if(!file.exists(zipfile)){\n+ error_message <- paste("Cannot access the Zip file:",zipfile,". Please, contact your administrator ... if you have one!")\n+ print(error_message)\n+ stop(error_message)\n+ }\n+\n+ #list all file in the zip file\n+ #zip_files <- unzip(zipfile,list=T)[,"Name"]\n+\n+ #unzip\n+ suppressWarnings(unzip(zipfile, unzip="unzip"))\n+\n+ #get the directory name\n+ suppressWarnings(filesInZip <- unzip(zipfile, list=T))\n+ directories <- unique(unlist(lapply(strsplit(filesInZip$Name,"/"), function(x) x[1])))\n+ directories <- directories[!(directories %in% c("__MACOSX")) & file.info(directories)$isdir]\n+ directory <- "."\n+ if (length(directories) == 1) directory <- directories\n+\n+ cat("files_root_directory\\t",directory,"\\n")\n+\n+ }\n+ return (directory)\n+}\n+\n+\n+# This function retrieve a xset like object\n+#@author Gildas Le Corguille lecorguille@sb-roscoff.fr\n+getxcmsSetObject <- function(xobject) {\n+ # XCMS 1.x\n+ if (class(xobject) == "xcmsSet")\n+ return (xobject)\n+ # XCMS 3.x\n+ if (class(xobject) == "XCMSnExp") {\n+ # Get the legacy xcmsSet object\n+ suppressWarnings(xset <- as(xobject, \'xcmsSet\'))\n+ if (!is.null(xset@phenoData$sample_group))\n+ sampclass(xset) <- xset@phenoData$sample_group\n+ else\n+ sampclass(xset) <- "."\n+ return (xset)\n+ }\n+}\n' |
b |
diff -r 000000000000 -r c749bfd3410e macros.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/macros.xml Tue Sep 18 16:06:05 2018 -0400 |
[ |
@@ -0,0 +1,52 @@ +<?xml version="1.0"?> +<macros> + <xml name="stdio"> + <stdio> + <exit_code range="1" level="fatal" /> + </stdio> + </xml> + + <!-- COMMAND --> + <token name="@COMMAND_RSCRIPT@">LC_ALL=C Rscript $__tool_directory__/</token> + + <token name="@COMMAND_LOG_EXIT@"> + ; + return=\$?; + cat 'log.txt'; + sh -c "exit \$return" + </token> + + <!-- INPUT_VALIDATORS --> + <xml name="input_validator_range_integer"> + <validator type="regex" message="The format is 'min,max'" >[0-9]+ *, *[0-9]+</validator> + </xml> + + <xml name="input_validator_range_float"> + <validator type="regex" message="The format is 'min,max'" >[0-9]+\.?[0-9]* *, *[0-9]+\.?[0-9]*</validator> + </xml> + + <xml name="input_validator_list_integer"> + <validator type="regex" message="The format is '1,2,4,6'" >[0-9, ]+</validator> + </xml> + + + <token name="@INPUT_IMAGE_LABEL@">RData file</token> + <token name="@INPUT_IMAGE_HELP@">It contains a xcms3::XCMSnExp object (named xdata)</token> + + + <!-- MISC --> + <token name="@HELP_AUTHORS_WRAPPERS@"> + +.. class:: infomark + +**Galaxy integration** ABiMS TEAM - SU/CNRS - Station biologique de Roscoff and Yann Guitton - LABERCA +Part of Workflow4Metabolomics.org [W4M] + + | Contact support@workflow4metabolomics.org for any questions or concerns about the Galaxy implementation of this tool. + + </token> + + <xml name="citation_w4m"> + <citation type="doi">10.1093/bioinformatics/btu813</citation> + </xml> +</macros> |
b |
diff -r 000000000000 -r c749bfd3410e macros_xcms.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/macros_xcms.xml Tue Sep 18 16:06:05 2018 -0400 |
[ |
b'@@ -0,0 +1,244 @@\n+<?xml version="1.0"?>\n+<macros>\n+\n+ <token name="@WRAPPER_VERSION@">3.0.0</token>\n+ <xml name="requirements">\n+ <requirements>\n+ <requirement type="package" version="@WRAPPER_VERSION@">bioconductor-xcms</requirement>\n+ <requirement type="package" version="1.1_4">r-batch</requirement>\n+ <requirement type="package" version="1.1_2">r-rcolorbrewer</requirement>\n+ <requirement type="package" version="6.0">unzip</requirement>\n+ <yield />\n+ </requirements>\n+ </xml>\n+\n+ <!-- FILE_LOAD for planemo test -->\n+ <token name="@COMMAND_FILE_LOAD@">\n+ #if $file_load_section.file_load_conditional.file_load_select == "yes":\n+ #if $file_load_section.file_load_conditional.input[0].is_of_type("mzxml") or $file_load_section.file_load_conditional.input[0].is_of_type("mzml") or $file_load_section.file_load_conditional.input[0].is_of_type("mzdata") or $file_load_section.file_load_conditional.input[0].is_of_type("netcdf"):\n+ #set singlefile_galaxyPath = \'|\'.join( [ str( $single_file ) for $single_file in $file_load_section.file_load_conditional.input ] )\n+ #set singlefile_sampleName = \'|\'.join( [ str( $single_file.name ) for $single_file in $file_load_section.file_load_conditional.input ] )\n+\n+ singlefile_galaxyPath \'$singlefile_galaxyPath\' singlefile_sampleName \'$singlefile_sampleName\'\n+ #else\n+ zipfile \'$file_load_section.file_load_conditional.input\'\n+ #end if\n+ #end if\n+ </token>\n+\n+ <xml name="input_file_load">\n+ <section name="file_load_section" title="Resubmit your raw dataset or your zip file">\n+ <conditional name="file_load_conditional">\n+ <param name="file_load_select" type="select" label="Resubmit your dataset or your zip file" help="Use only if you get a message saying that your original dataset or zip file have been deleted on the server." >\n+ <option value="no" >no need</option>\n+ <option value="yes" >yes</option>\n+ </param>\n+ <when value="no">\n+ </when>\n+ <when value="yes">\n+ <param name="input" type="data" format="mzxml,mzml,mzdata,netcdf,no_unzip.zip,zip" multiple="true" label="File(s) from your history containing your chromatograms" help="Single file mode for the format: mzxml, mzml, mzdata and netcdf. Zip file mode for the format: no_unzip.zip, zip. See the help section below." />\n+ </when>\n+ </conditional>\n+ </section>\n+ </xml>\n+\n+ <xml name="test_file_load_zip">\n+ <section name="file_load_section">\n+ <conditional name="file_load_conditional">\n+ <param name="file_load_select" value="yes" />\n+ <param name="input" value="faahKO_reduce.zip" ftype="zip" />\n+ </conditional>\n+ </section>\n+ </xml>\n+\n+ <xml name="test_file_load_zip_sacuri">\n+ <section name="file_load_section">\n+ <conditional name="file_load_conditional">\n+ <param name="file_load_select" value="yes" />\n+ <param name="input" value="sacuri_dir_root.zip" ftype="zip" />\n+ </conditional>\n+ </section>\n+ </xml>\n+\n+ <xml name="test_file_load_single">\n+ <section name="file_load_section">\n+ <conditional name="file_load_conditional">\n+ <param name="file_load_select" value="yes" />\n+ <param name="input" value="wt15.CDF,ko16.CDF,ko15.CDF,wt16.CDF" ftype="netcdf" />\n+ </conditional>\n+ </section>\n+ </xml>\n+\n+ <xml name="test_file_load_single_ko15">\n+ <section name="file_load_section">\n+ <conditional name="file_load_conditional">\n+ <param name="file_load_select" value="yes" />\n+ <param name="input" value="ko15.CDF" ftype="netcdf" />\n+'..b'the m/z value at the peak apex and the m/z values left and right of it</option>\n+ <option value="meanApex3">mean of the m/z value of the peak apex and the m/z values left and right of it</option>\n+ </param>\n+ <param argument="integrate" type="select" label="Integration method" >\n+ <option value="1">peak limits are found through descent on the mexican hat filtered data (more robust, but less exact)</option>\n+ <option value="2">peak limits based on real data (more accurate but prone to noise)</option>\n+ </param>\n+ <param argument="mzdiff" type="float" value="-0.001" label="Minimum difference in m/z for peaks with overlapping retention times" help="can be negative to allow overlap" />\n+ <param argument="fitgauss" type="boolean" checked="false" truevalue="TRUE" falsevalue="FALSE" label="fitgauss" help="whether or not a Gaussian should be fitted to each peak" />\n+ <param argument="noise" type="integer" value="0" label="Noise filter" help="allowing to set a minimum intensity required for centroids to be considered in the first analysis step (centroids with intensity lower than \xe2\x80\x98noise\xe2\x80\x99 are omitted from ROI detection)." />\n+ <param argument="verboseColumns" type="boolean" checked="false" truevalue="TRUE" falsevalue="FALSE" label="verbose Columns" help="whether additional peak meta data columns should be returned" />\n+ </xml>\n+\n+ <token name="@COMMAND_CENTWAVEADVROI@">\n+ #if $sectionROI.roiList:\n+ roiList \'$sectionROI.roiList\'\n+ firstBaselineCheck $sectionROI.firstBaselineCheck\n+ #if $sectionROI.roiScales != "":\n+ roiScales "c($sectionROI.roiScales)"\n+ #end if\n+ #end if\n+ </token>\n+\n+ <xml name="input_centwaveAdvROI" token_optional="true">\n+ <param argument="roiList" type="data" format="tabular" optional="@OPTIONAL@" label="List of regions-of-interest (ROI) representing detected mass traces" help="If ROIs are submitted the first analysis step is omitted and chromatographic peak detection is performed on the submitted ROIs. Each ROI is expected to have the following elements specified: \xe2\x80\x98scmin\xe2\x80\x99 (start scan index), \xe2\x80\x98scmax\xe2\x80\x99 (end scan index), \xe2\x80\x98mzmin\xe2\x80\x99 (minimum m/z), \xe2\x80\x98mzmax\xe2\x80\x99 (maximum m/z), \xe2\x80\x98length\xe2\x80\x99 (number of scans), \xe2\x80\x98intensity\xe2\x80\x99 (summed intensity)." />\n+ <param argument="firstBaselineCheck" type="boolean" checked="true" truevalue="TRUE" falsevalue="FALSE" label="Is continuous data within regions of interest is checked to be above the first baseline." />\n+ <param argument="roiScales" type="text" value="" optional="true" label="Numeric vector defining the scale for each region of interest in \xe2\x80\x98roiList\xe2\x80\x99" help="Length equal to \xe2\x80\x98roiList\xe2\x80\x99 - Should be used for the centWave-wavelets (format 0.9,1,0.2)">\n+ <expand macro="input_validator_range_float"/>\n+ </param>\n+ </xml>\n+\n+ <!-- MISC -->\n+ <token name="@HELP_AUTHORS@">\n+.. class:: infomark\n+\n+**Authors** Colin A. Smith csmith@scripps.edu, Ralf Tautenhahn rtautenh@gmail.com, Steffen Neumann sneumann@ipb-halle.de, Paul Benton hpaul.benton08@imperial.ac.uk and Christopher Conley cjconley@ucdavis.edu\n+\n+@HELP_AUTHORS_WRAPPERS@\n+\n+---------------------------------------------------\n+\n+ </token>\n+\n+ <token name="@HELP_XCMS_MANUAL@">\n+\n+For details and explanations concerning all the parameters and workflow of xcms_ package, see its manual_ and this example_\n+\n+.. _xcms: https://bioconductor.org/packages/release/bioc/html/xcms.html\n+.. _manual: http://www.bioconductor.org/packages/release/bioc/manuals/xcms/man/xcms.pdf\n+.. _example: https://bioconductor.org/packages/release/bioc/vignettes/xcms/inst/doc/xcms.html\n+\n+ </token>\n+\n+ <xml name="citation">\n+ <citations>\n+ <citation type="doi">10.1021/ac051437y</citation>\n+ <expand macro="citation_w4m"/>\n+ </citations>\n+ </xml>\n+</macros>\n' |
b |
diff -r 000000000000 -r c749bfd3410e repository_dependencies.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/repository_dependencies.xml Tue Sep 18 16:06:05 2018 -0400 |
b |
@@ -0,0 +1,5 @@ +<?xml version="1.0"?> +<repositories> + <repository changeset_revision="7800ba9a4c1e" name="no_unzip_datatype" owner="lecorguille" toolshed="https://toolshed.g2.bx.psu.edu" /> + <repository changeset_revision="d64562a4ebb3" name="rdata_xcms_datatypes" owner="lecorguille" toolshed="https://toolshed.g2.bx.psu.edu" /> +</repositories> |
b |
diff -r 000000000000 -r c749bfd3410e static/images/xcms_plot_chromatogram_workflow.png |
b |
Binary file static/images/xcms_plot_chromatogram_workflow.png has changed |
b |
diff -r 000000000000 -r c749bfd3410e test-data/BPIs.pdf |
b |
Binary file test-data/BPIs.pdf has changed |
b |
diff -r 000000000000 -r c749bfd3410e test-data/TICs.pdf |
b |
Binary file test-data/TICs.pdf has changed |
b |
diff -r 000000000000 -r c749bfd3410e test-data/faahKO-single.xset.merged.group.retcor.RData |
b |
Binary file test-data/faahKO-single.xset.merged.group.retcor.RData has changed |
b |
diff -r 000000000000 -r c749bfd3410e test-data/ko15.CDF |
b |
Binary file test-data/ko15.CDF has changed |
b |
diff -r 000000000000 -r c749bfd3410e test-data/ko16.CDF |
b |
Binary file test-data/ko16.CDF has changed |
b |
diff -r 000000000000 -r c749bfd3410e test-data/sampleMetadata.tab --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/sampleMetadata.tab Tue Sep 18 16:06:05 2018 -0400 |
b |
@@ -0,0 +1,6 @@ +wt16 WT +ko16 KO +wt15 WT +ko15 KO +ko10 KO +foobar01 FOOBAR |
b |
diff -r 000000000000 -r c749bfd3410e test-data/wt15.CDF |
b |
Binary file test-data/wt15.CDF has changed |
b |
diff -r 000000000000 -r c749bfd3410e test-data/wt16.CDF |
b |
Binary file test-data/wt16.CDF has changed |
b |
diff -r 000000000000 -r c749bfd3410e xcms_plot_chromatogram.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xcms_plot_chromatogram.r Tue Sep 18 16:06:05 2018 -0400 |
[ |
@@ -0,0 +1,76 @@ +#!/usr/bin/env Rscript + + +# ----- PACKAGE ----- +cat("\tSESSION INFO\n") + +#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="/")) } +source_local("lib.r") +source_local("lib-xcms3.x.x.r") + +pkgs <- c("xcms","batch","RColorBrewer") +loadAndDisplayPackages(pkgs) +cat("\n\n"); + + +# ----- ARGUMENTS ----- +cat("\tARGUMENTS INFO\n") +args = parseCommandArgs(evaluate=FALSE) #interpretation of arguments given in command line as an R list of objects +write.table(as.matrix(args), col.names=F, quote=F, sep='\t') + +cat("\n\n") + +# ----- PROCESSING INFILE ----- +cat("\tARGUMENTS PROCESSING INFO\n") + +cat("\n\n") + + +# ----- ARGUMENTS PROCESSING ----- +cat("\tINFILE PROCESSING INFO\n") + +mergeXDataReturn <- mergeXData(args) +xdata <- mergeXDataReturn$xdata +singlefile <- mergeXDataReturn$singlefile +md5sumList <- mergeXDataReturn$md5sumList +sampleNamesList <- mergeXDataReturn$sampleNamesList +chromTIC <- mergeXDataReturn$chromTIC +chromBPI <- mergeXDataReturn$chromBPI +chromTIC_adjusted <- mergeXDataReturn$chromTIC_adjusted +chromBPI_adjusted <- mergeXDataReturn$chromBPI_adjusted + +cat("\n\n") + + +# ----- MAIN PROCESSING INFO ----- +cat("\tMAIN PROCESSING INFO\n") + + +cat("\t\tDRAW GRAPHICS\n") + +if (!is.null(chromTIC) || is.null(chromTIC)) { cat("\t\t\tCompute TIC\n"); chromTIC <- chromatogram(xdata, aggregationFun = "sum") } +if (!is.null(chromBPI) || is.null(chromBPI)) { cat("\t\t\tCompute BPI\n"); chromBPI <- chromatogram(xdata, aggregationFun = "max") } + +if (!is.null(chromTIC_adjusted)) chromTIC <- chromTIC_adjusted +if (!is.null(chromBPI_adjusted)) chromBPI <- chromBPI_adjusted + +getPlotChromatogram(chromTIC, xdata, pdfname="TICs.pdf", aggregationFun = "sum") +getPlotChromatogram(chromBPI, xdata, pdfname="BPIs.pdf", aggregationFun = "max") + +cat("\n\n") + +# ----- EXPORT ----- + +cat("\tXCMSnExp OBJECT INFO\n") +print(xdata) +cat("\n\n") + +cat("\txcmsSet OBJECT INFO\n") +# Get the legacy xcmsSet object +xset <- getxcmsSetObject(xdata) +print(xset) +cat("\n\n") + + +cat("\tDONE\n") |
b |
diff -r 000000000000 -r c749bfd3410e xcms_plot_chromatogram.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xcms_plot_chromatogram.xml Tue Sep 18 16:06:05 2018 -0400 |
[ |
@@ -0,0 +1,113 @@ +<tool id="xcms_plot_chromatogram" name="xcms plot chromatogram" version="@WRAPPER_VERSION@.0"> + <description>Plots base peak intensity chromatogram (BPI) and total ion current chromatogram (TIC) from MSnbase or xcms experiment(s)</description> + + <macros> + <import>macros.xml</import> + <import>macros_xcms.xml</import> + </macros> + + <expand macro="requirements"/> + <expand macro="stdio"/> + + <command><![CDATA[ + @COMMAND_RSCRIPT@//xcms_plot_chromatogram.r + + images 'c("${"\",\"".join(map(str, $images))}")' + + #if str($sampleMetadata) != 'None': + sampleMetadata '$sampleMetadata' + #end if + + @COMMAND_FILE_LOAD@ + ]]></command> + + <inputs> + <param name="images" type="data" format="rdata.msnbase.raw,rdata.xcms.findchrompeaks,rdata.xcms.group,rdata.xcms.retcor,rdata.xcms.fillpeaks,rdata" label="@INPUT_IMAGE_LABEL@" help="@INPUT_IMAGE_HELP@ from: findChromPeaks, groupChromPeaks or adjustRtime" multiple="true" /> + <param name="sampleMetadata" label="Sample metadata file " format="tabular" type="data" optional="true" help="Must contain at least one column with the sample id and one column with the sample class"/> + + <expand macro="input_file_load"/> + </inputs> + + <outputs> + <data name="ticsPdf" format="pdf" label="TICs.pdf" from_work_dir="TICs.pdf"/> + <data name="bpisPdf" format="pdf" label="BPIs.pdf" from_work_dir="BPIs.pdf" /> + </outputs> + + <tests> + <test> + <param name="images" value="faahKO-single.xset.merged.group.retcor.RData" ftype="rdata"/> + <expand macro="test_file_load_single"/> + <param name="sampleMetadata" value="sampleMetadata.tab" ftype="tabular"/> + <output name="ticsPdf" value="TICs.pdf" ftype="pdf" compare="sim_size" delta="600" /> + <output name="bpisPdf" value="BPIs.pdf" ftype="pdf" compare="sim_size" delta="600" /> + </test> + <!-- DISABLE FOR TRAVIS + <test> + <param name="images" value="ko15-raw.RData,ko16-raw.RData,wt15-raw.RData,wt16-raw.RData" ftype="rdata"/> + <expand macro="test_file_load_single"/> + <output name="ticsPdf" value="TICs.pdf" ftype="pdf" compare="sim_size" delta="600" /> + <output name="bpisPdf" value="BPIs.pdf" ftype="pdf" compare="sim_size" delta="600" /> + </test> + --> + </tests> + + <help><![CDATA[ + +@HELP_AUTHORS@ + +====================== +xcms plot chromatogram +====================== + +----------- +Description +----------- + +This tool will plot Base Peak Intensity chromatogram (BPI) and Total Ion Current chromatogram (TIC) from xcms experiments. + + +----------------- +Workflow position +----------------- + +**Upstream tools** + +=========================== ======================== ============================== +Name Output file Format +=========================== ======================== ============================== +MSnbase.readMSData ``*``.raw.RData rdata.msnbase.raw +--------------------------- ------------------------ ------------------------------ +xcms.findChromPeaks ``*``.raw.xset.RData rdata.xcms.findchrompeaks +--------------------------- ------------------------ ------------------------------ +xcms.findChromPeaks Merger xset.merged.RData rdata.xcms.retcor +--------------------------- ------------------------ ------------------------------ +xcms.adjustRtime ``*``.adjustRtime.RData rdata.xcms.retcor +=========================== ======================== ============================== + +.. image:: xcms_plot_chromatogram_workflow.png + +--------------------------------------------------- + +------------ +Output files +------------ + +**Total Ion Current (TIC) chromatogram** + | Sum of intensity (Y) of all ions detected at each retention time (X) + +**Base Peak Intensity Chromatogram (BPI)** + | Sum of intensity (Y) of the most intense peaks at each retention time (X) + +--------------------------------------------------- + +Changelog/News +-------------- + +**Version 3.0.0.0 - 07/03/2018** + +- NEW: This new tool will plot base peak intensity chromatogram (BPI) and total ion chromatogram (TIC) from xcms experience. It will replace those created by xcmsSet and retcor tools. + + ]]></help> + + <expand macro="citation" /> +</tool> |