Repository 'xcms_xcmsset'
hg clone https://toolshed.g2.bx.psu.edu/repos/lecorguille/xcms_xcmsset

Changeset 15:b62808a2a008 (2018-09-18)
Previous changeset 14:363cce459fff (2018-02-13) Next changeset 16:d8c59fb7c821 (2018-09-19)
Commit message:
planemo upload for repository https://github.com/workflow4metabolomics/xcms commit 9f72e947d9c241d11221cad561f3525d27231857
modified:
README.rst
abims_xcms_xcmsSet.xml
destinations_input_type.py
job_conf.xml.sample
lib.r
macros.xml
static/images/xcms_xcmsset_workflow.png
added:
lib-xcms3.x.x.r
macros_xcms.xml
test-data/faahKO.raw.RData
test-data/ko15-raw.RData
test-data/ko15.CDF
test-data/roiList.txt
xcms_xcmsSet.r
removed:
test-data/HU_neg_017.mzXML
test-data/MM14.mzML
test-data/MM8.mzML
xcms.r
b
diff -r 363cce459fff -r b62808a2a008 README.rst
--- a/README.rst Tue Feb 13 04:47:50 2018 -0500
+++ b/README.rst Tue Sep 18 16:07:36 2018 -0400
b
@@ -22,27 +22,47 @@
 Changelog/News
 --------------
 
+**Version 3.0.0.0 - 08/03/2018**
+
+- UPGRADE: upgrade the xcms version from 1.46.0 to 3.0.0. So refactoring of a lot of underlying codes and methods. Some parameters may have been renamed.
+
+- NEW: a bunch of new options: Spectra Filters (previously scanrange), CentWave.(mzCenterFun, fitgauss, verboseColumns), MatchedFilter.(sigma, impute, baseValue, max), MSW.(verboseColumns), ...
+
+- UPDATE: since xcms 3.0.0, some options are no more available: scanrange (replace by filters), profmethod, MatchedFilter.step, MatchedFilter.sigma, MSW.winSize.noise, MSW.SNR.method
+
+- IMPROVEMENT: the advanced options are now in sections. It will allow you to access to all the parameters and to know their default values.
+
+- IMPROVEMENT: the tool "should" be now more flexible in term of file naming: it "should" accept space and comma. But don't be too imaginative :)
+
+- CHANGE: removing of the TIC and BPC plots. You can new use the dedicated tool "xcms plot chromatogram"
+
+
 **Version 2.1.1 - 29/11/2017**
 
 - BUGFIX: To avoid issues with accented letter in the parentFile tag of the mzXML files, we changed a hidden mechanim to LC_ALL=C
 
+
 **Version 2.1.0 - 22/02/2017**
 
 - NEW: The W4M tools will be able now to take as input a single file. It will allow to submit in parallel several files and merge them afterward using "xcms.xcmsSet Merger" before "xcms.group".
 
 - BUGFIX: the default value of "matchedFilter" -> "Step size to use for profile generation" which was of 0.01 have been changed to fix with the XMCS default values to 0.1
 
+
 **Version 2.0.11 - 22/12/2016**
 
 - BUGFIX: propose scanrange for all methods
 
+
 **Version 2.0.10 - 22/12/2016**
 
 - BUGFIX: when having only one group (i.e. one folder of raw data) the BPC and TIC pdf files do not contain any graph
 
+
 **Version 2.0.9 - 06/07/2016**
 
-- UPGRADE: upgrate the xcms version from 1.44.0 to 1.46.0
+- UPGRADE: upgrade the xcms version from 1.44.0 to 1.46.0
+
 
 **Version 2.0.8 - 06/04/2016**
 
@@ -59,7 +79,7 @@
 
 - UPDATE: refactoring of internal management of inputs/outputs
 
-- UPDATE: refactoring to feed the new report tool
+- TEST: refactoring to feed the new report tool
 
 
 **Version 2.0.2 - 18/01/2016**
b
diff -r 363cce459fff -r b62808a2a008 abims_xcms_xcmsSet.xml
--- a/abims_xcms_xcmsSet.xml Tue Feb 13 04:47:50 2018 -0500
+++ b/abims_xcms_xcmsSet.xml Tue Sep 18 16:07:36 2018 -0400
[
b'@@ -1,340 +1,404 @@\n-<tool id="abims_xcms_xcmsSet" name="xcms.xcmsSet" version="2.1.1">\n-    <description>Filtration and Peak Identification using xcmsSet function from xcms R package to preprocess LC/MS data for relative quantification and statistical analysis </description>\n+<tool id="abims_xcms_xcmsSet" name="xcms findChromPeaks (xcmsSet)" version="@WRAPPER_VERSION@.0">\n+    <description>Chromatographic peak detection</description>\n \n     <macros>\n         <import>macros.xml</import>\n+        <import>macros_xcms.xml</import>\n     </macros>\n \n     <expand macro="requirements"/>\n     <expand macro="stdio"/>\n \n     <command><![CDATA[\n-        @COMMAND_XCMS_SCRIPT@\n+        @COMMAND_RSCRIPT@/xcms_xcmsSet.r\n \n-        #if $input.is_of_type("mzxml") or $input.is_of_type("mzml") or $input.is_of_type("mzdata") or $input.is_of_type("netcdf"):\n-            singlefile_galaxyPath \'$input\' singlefile_sampleName \'$input.name\'\n-        #else\n-            zipfile \'$input\'\n-        #end if\n+        image \'$image\'\n+\n+        BPPARAM \\${GALAXY_SLOTS:-1}\n \n-        xfunction xcmsSet\n-\n-        xsetRdataOutput \'$xsetRData\'\n-        sampleMetadataOutput \'$sampleMetadata\'\n-        ticspdf \'$ticsRawPdf\'\n-        bicspdf \'$bpcsRawPdf\'\n-\n-\n-        #if $options_scanrange.option == "show":\n-            scanrange "c($options_scanrange.scanrange)"\n+        #if $filterSection.filterAcquisitionNum != "":\n+            filterAcquisitionNum "c($filterSection.filterAcquisitionNum)"\n+        #end if\n+        #if $filterSection.filterRt != "":\n+            filterRt "c($filterSection.filterRt)"\n+        #end if\n+        #if $filterSection.filterMz != "":\n+            filterMz "c($filterSection.filterMz)"\n         #end if\n \n-        ## profmethod $profmethod\n-        nSlaves \\${GALAXY_SLOTS:-1} method $methods.method\n-        #if $methods.method == "centWave":\n-            ppm $methods.ppm\n-            peakwidth "c($methods.peakwidth)"\n-            #if $methods.options_c.option == "show":\n-                mzdiff $methods.options_c.mzdiff\n-                snthresh $methods.options_c.snthresh\n-                integrate $methods.options_c.integrate\n-                noise $methods.options_c.noise\n-                prefilter "c($methods.options_c.prefilter)"\n-            #end if\n-        #elif $methods.method == "matchedFilter":\n-            step $methods.step\n+        method $methods.method\n+\n+        #if $methods.method == "CentWave":\n+            @COMMAND_CENTWAVE@\n+            ## List of regions-of-interest (ROI)\n+            #set $sectionROI = $methods.CentWaveAdv.CentWaveAdvROI\n+            @COMMAND_CENTWAVEADVROI@\n+        #elif $methods.method == "CentWavePredIso":\n+            @COMMAND_CENTWAVE@\n+            ## List of regions-of-interest (ROI)\n+            #set $sectionROI = $methods.CentWaveAdvROI\n+            @COMMAND_CENTWAVEADVROI@\n+            snthreshIsoROIs $sectionROI.snthreshIsoROIs\n+            maxCharge $sectionROI.maxCharge\n+            maxIso $sectionROI.maxIso\n+            mzIntervalExtension $sectionROI.mzIntervalExtension\n+            polarity $sectionROI.polarity\n+        #elif $methods.method == "MatchedFilter":\n             fwhm $methods.fwhm\n-            #if $methods.options_m.option == "show":\n-                ## sigma "$methods.options_m.sigma"\n-                max $methods.options_m.max\n-                snthresh $methods.options_m.snthresh\n-                steps $methods.options_m.steps\n-                mzdiff $methods.options_m.mzdiff\n+            binSize $methods.binSize\n+            ## Advanced\n+            impute $methods.MatchedFilterAdv.impute_cond.impute\n+            #if $methods.MatchedFilterAdv.impute_cond.impute == "linbase":\n+                #if $methods.MatchedFilterAdv.impute_cond.baseValue != "":\n+                    baseValue $methods.MatchedFilterAdv.impute_cond.baseValue\n+                #end if\n+                distance $methods.MatchedFilterAdv.impute_cond.distance\n             #end if\n+            #if $methods.Matc'..b'---------------------------------------\n-\n----------------\n-Working example\n----------------\n-\n-Input files\n------------\n-\n-    | zip_file -> **sacuri.zip**\n-\n-Parameters\n-----------\n+xset.RData: rdata.xcms.findchrompeaks format\n \n-    | Method -> **matchedFilter**\n-    | step   -> **0.01**\n-    | fwhm   -> **4**\n-    | Advanced option -> **show**\n-    | max: -> **50**\n-    | snthresh -> **1**\n-    | steps -> **2**\n-\n-\n-Output files\n-------------\n-\n-    | **1) xset.RData: RData file**\n-\n-    | **2) Example of a sampleMetadata.tsv  :**\n-\n-\n-+---------------------------+------------+---------+\n-| sampleMetadata            |   class    | polarity|\n-+===========================+============+=========+\n-|HU_neg_017                 |   bio      |negative |\n-+---------------------------+------------+---------+\n-|HU_neg_028                 |   bio      |negative |\n-+---------------------------+------------+---------+\n-|HU_neg_034                 |   bio      |negative |\n-+---------------------------+------------+---------+\n-|Blanc04                    |   blank    |negative |\n-+---------------------------+------------+---------+\n-|Blanc06                    |   blank    |negative |\n-+---------------------------+------------+---------+\n-|Blanc09                    |   blank    |negative |\n-+---------------------------+------------+---------+\n-\n-\n-\n-    | **3) Example of xset.TICs_raw.pdf (Total Ion Chromatograms) :**\n-\n-.. image:: xcms_tics.png\n-\n+    | (single) RData files that are necessary in the second step of the workflow "xcms.groupChromPeaks" - must be merged first using "xcms.findChromPeaks Merger"\n+    | (zip) RData file that is necessary in the second step of the workflow "xcms.groupChromPeaks".\n \n ---------------------------------------------------\n \n Changelog/News\n --------------\n \n+\n+**Version 3.0.0.0 - 08/03/2018**\n+\n+- UPGRADE: upgrade the xcms version from 1.46.0 to 3.0.0. So refactoring of a lot of underlying codes and methods. Some parameters may have been renamed.\n+\n+- CHANGE: xcms.findChromPeaks no longer read the raw data. You have to run MSnbase readMSData first.\n+\n+- NEW: a bunch of new options: Spectra Filters (previously scanrange), CentWave.(mzCenterFun, fitgauss, verboseColumns), MatchedFilter.(sigma, impute, baseValue, max), MSW.(verboseColumns), ...\n+\n+- NEW: new Filters for Spectra\n+\n+- NEW: new methods: CentWaveWithPredIsoROIs\n+\n+- UPDATE: since xcms 3.0.0, some options are no more available: scanrange (replace by filters), profmethod, MatchedFilter.step, MatchedFilter.sigma, MSW.winSize.noise, MSW.SNR.method\n+\n+- IMPROVEMENT: the advanced options are now in sections. It will allow you to access to all the parameters and to know their default values.\n+\n+- IMPROVEMENT: the tool "should" be now more flexible in term of file naming: it "should" accept space and comma. But don\'t be too imaginative :)\n+\n+- CHANGE: removing of the TIC and BPC plots. You can new use the dedicated tool "xcms plot chromatogram"\n+\n+\n **Version 2.1.1 - 29/11/2017**\n \n - BUGFIX: To avoid issues with accented letter in the parentFile tag of the mzXML files, we changed a hidden mechanim to LC_ALL=C\n \n+\n **Version 2.1.0 - 22/02/2017**\n \n - NEW: The W4M tools will be able now to take as input a single file. It will allow to submit in parallel several files and merge them afterward using "xcms.xcmsSet Merger" before "xcms.group".\n \n - BUGFIX: the default value of "matchedFilter" -> "Step size to use for profile generation" which was of 0.01 have been changed to fix with the XMCS default values to 0.1\n \n+\n **Version 2.0.11 - 22/12/2016**\n \n - BUGFIX: propose scanrange for all methods\n \n+\n **Version 2.0.10 - 22/12/2016**\n \n - BUGFIX: when having only one group (i.e. one folder of raw data) the BPC and TIC pdf files do not contain any graph\n \n+\n **Version 2.0.9 - 06/07/2016**\n \n - UPGRADE: upgrade the xcms version from 1.44.0 to 1.46.0\n \n+\n **Version 2.0.8 - 06/04/2016**\n \n - TEST: refactoring to pass planemo test using conda dependencies\n'
b
diff -r 363cce459fff -r b62808a2a008 destinations_input_type.py
--- a/destinations_input_type.py Tue Feb 13 04:47:50 2018 -0500
+++ b/destinations_input_type.py Tue Sep 18 16:07:36 2018 -0400
[
@@ -22,5 +22,4 @@
         if input_extension in ["mzxml","mzml","mzdata","netcdf"]:
             return 'thread1-mem_free8'
     # zip file
-    return 'thread9-mem_free8'
-
+    return 'thread8-mem_free16'
b
diff -r 363cce459fff -r b62808a2a008 job_conf.xml.sample
--- a/job_conf.xml.sample Tue Feb 13 04:47:50 2018 -0500
+++ b/job_conf.xml.sample Tue Sep 18 16:07:36 2018 -0400
b
@@ -15,11 +15,11 @@
              <param id="nativeSpecification">-V -w n -q galaxy.q</param>
         </destination>
 
-        <destination id="thread1-men_free10" runner="sge">
-             <param id="nativeSpecification">-V -w n -q galaxy.q -pe thread 1 -R y -l mem_free=10G </param>
+        <destination id="thread1-men_free8" runner="sge">
+             <param id="nativeSpecification">-V -w n -q galaxy.q -pe thread 1 -R y -l mem_free=8G </param>
         </destination>
-        <destination id="thread4-men_free10" runner="sge">
-            <param id="nativeSpecification">-V -w n -q galaxy.q -pe thread 4 -R y -l mem_free=10G </param>
+        <destination id="thread8-men_free12" runner="sge">
+            <param id="nativeSpecification">-V -w n -q galaxy.q -pe thread 8 -R y -l mem_free=16G </param>
         </destination>
 
         <destination id="python_destination_input_type" runner="dynamic">
b
diff -r 363cce459fff -r b62808a2a008 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:07:36 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 363cce459fff -r b62808a2a008 lib.r
--- a/lib.r Tue Feb 13 04:47:50 2018 -0500
+++ b/lib.r Tue Sep 18 16:07:36 2018 -0400
[
b'@@ -1,319 +1,269 @@\n-#Authors ABiMS TEAM\n-#Lib.r for Galaxy Workflow4Metabolomics xcms tools\n-#\n-#version 2.4: lecorguille\n-#   add getPeaklistW4M\n-#version 2.3: yguitton\n-#   correction for empty PDF when only 1 class\n-#version 2.2\n-#   correct bug in Base Peak Chromatogram (BPC) option, not only TIC when scanrange used in xcmsSet\n-#   Note if scanrange is used a warning is prompted in R console but do not stop PDF generation\n-#version 2.1: yguitton\n-#   Modifications made by Guitton Yann\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 convert if it is required the Retention Time in minutes\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$sampleNamesMakeNam'..b'ile[[singlefile_sampleName]] = singlefile_galaxyPath\n-        }\n-    }\n-    for (argument in c("zipfile","zipfilePositive","zipfileNegative","singlefile_galaxyPath","singlefile_sampleName","singlefile_galaxyPathPositive","singlefile_sampleNamePositive","singlefile_galaxyPathNegative","singlefile_sampleNameNegative")) {\n-        listArguments[[argument]]=NULL\n-    }\n-    return(list(zipfile=zipfile, singlefile=singlefile, listArguments=listArguments))\n+  }\n+  return(list(zipfile=zipfile, singlefile=singlefile))\n }\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+            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+                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-            file.symlink(singlefile_galaxyPath,singlefile_sampleName)\n+            if (!suppressWarnings( try (file.link(singlefile_galaxyPath, singlefile_sampleName), silent=T)))\n+                file.copy(singlefile_galaxyPath, singlefile_sampleName)\n+\n         }\n-        directory = "."\n+        directory <- "."\n \n     }\n-    if(!is.null(zipfile) && (zipfile!="")) {\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+            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+        #zip_files <- unzip(zipfile,list=T)[,"Name"]\n \n         #unzip\n         suppressWarnings(unzip(zipfile, unzip="unzip"))\n \n         #get the directory name\n-        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+        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 363cce459fff -r b62808a2a008 macros.xml
--- a/macros.xml Tue Feb 13 04:47:50 2018 -0500
+++ b/macros.xml Tue Sep 18 16:07:36 2018 -0400
[
@@ -1,141 +1,52 @@
 <?xml version="1.0"?>
 <macros>
-    <xml name="requirements">
-        <requirements>
-            <requirement type="package" version="0.4_1">r-snow</requirement>
-            <requirement type="package" version="1.46.0">bioconductor-xcms</requirement>
-            <requirement type="package" version="1.1_4">r-batch</requirement>
-        </requirements>
-    </xml>
-    <xml name="requirements_light">
-        <requirements>
-            <requirement type="package" version="1.46.0">bioconductor-xcms</requirement>
-        </requirements>
-    </xml>
     <xml name="stdio">
         <stdio>
             <exit_code range="1" level="fatal" />
         </stdio>
     </xml>
 
-    <token name="@COMMAND_XCMS_SCRIPT@">
-        LC_ALL=C Rscript $__tool_directory__/xcms.r
-    </token>
+    <!-- COMMAND -->
+    <token name="@COMMAND_RSCRIPT@">LC_ALL=C Rscript $__tool_directory__/</token>
 
     <token name="@COMMAND_LOG_EXIT@">
         ;
         return=\$?;
-        mv log.txt '$log';
-        cat '$log';
+        cat 'log.txt';
         sh -c "exit \$return"
     </token>
 
-    <!-- zipfile load for planemo test -->
-
-    <token name="@COMMAND_FILE_LOAD@">
-        #if $file_load_section.file_load_conditional.file_load_select == "yes":
-            #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"):
-                #set singlefile_galaxyPath = ','.join( [ str( $single_file ) for $single_file in $file_load_section.file_load_conditional.input ] )
-                #set singlefile_sampleName = ','.join( [ str( $single_file.name ) for $single_file in $file_load_section.file_load_conditional.input ] )
-
-                singlefile_galaxyPath '$singlefile_galaxyPath' singlefile_sampleName '$singlefile_sampleName'
-            #else
-                zipfile '$file_load_section.file_load_conditional.input'
-            #end if
-        #end if
-    </token>
-
-    <xml name="input_file_load">
-        <section name="file_load_section" title="Resubmit your raw dataset or your zip file">
-            <conditional name="file_load_conditional">
-                <param name="file_load_select" type="select" label="Resubmit your dataset or your zip file" help="Use only if you get a message which say that your original dataset or zip file have been deleted on the server." >
-                    <option value="no" >no need</option>
-                    <option value="yes" >yes</option>
-                </param>
-                <when value="no">
-                </when>
-                <when value="yes">
-                    <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." />
-                </when>
-            </conditional>
-        </section>
+    <!-- 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="test_file_load_zip">
-        <section name="file_load_section">
-            <conditional name="file_load_conditional">
-                <param name="file_load_select" value="yes" />
-                <param name="input" value="faahKO_reduce.zip" ftype="zip" />
-            </conditional>
-        </section>
+    <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="test_file_load_single">
-        <section name="file_load_section">
-            <conditional name="file_load_conditional">
-                <param name="file_load_select" value="yes" />
-                <param name="input" value="wt15.CDF,ko16.CDF,ko15.CDF,wt16.CDF" ftype="netcdf" />
-            </conditional>
-        </section>
+    <xml name="input_validator_list_integer">
+        <validator type="regex" message="The format is '1,2,4,6'" >[0-9, ]+</validator>
     </xml>
 
-    <token name="@COMMAND_PEAKLIST@">
-        #if $peaklist.peaklistBool
-            variableMetadataOutput '$variableMetadata'
-            dataMatrixOutput '$dataMatrix'
-            convertRTMinute $peaklist.convertRTMinute
-            numDigitsMZ $peaklist.numDigitsMZ
-            numDigitsRT $peaklist.numDigitsRT
-            intval $peaklist.intval
-        #end if
-    </token>
+
+    <token name="@INPUT_IMAGE_LABEL@">RData file</token>
+    <token name="@INPUT_IMAGE_HELP@">It contains a xcms3::XCMSnExp object (named xdata)</token>
 
-    <xml name="input_peaklist">
-        <conditional name="peaklist">
-            <param name="peaklistBool" type="boolean" label="Get a Peak List" />
-            <when value="true">
-              <param name="convertRTMinute" type="boolean" checked="false" truevalue="TRUE" falsevalue="FALSE" label="Convert retention time (seconds) into minutes" help="Convert the columns rtmed, rtmin and rtmax into minutes"/>
-              <param name="numDigitsMZ" type="integer" value="4" label="Number of decimal places for mass values reported in ions' identifiers." help="A minimum of 4 decimal places is recommended. Useful to avoid duplicates within identifiers" />
-              <param name="numDigitsRT" type="integer" value="0" label="Number of decimal places for retention time values reported in ions' identifiers." help="Useful to avoid duplicates within identifiers" />
-              <param name="intval" type="select" label="Reported intensity values" help="[intval] See the help section below">
-                  <option value="into" selected="true">into</option>
-                  <option value="maxo">maxo</option>
-                  <option value="intb">intb</option>
-              </param>
-            </when>
-            <when value="false" />
-        </conditional>
-    </xml>
 
-    <xml name="output_peaklist"  token_function="">
-        <data name="variableMetadata" format="tabular" label="${image.name[:-6]}.@FUNCTION@.variableMetadata.tsv">
-            <filter>(peaklist['peaklistBool'])</filter>
-        </data>
-        <data name="dataMatrix" format="tabular" label="${image.name[:-6]}.@FUNCTION@.dataMatrix.tsv" >
-            <filter>(peaklist['peaklistBool'])</filter>
-        </data>
-    </xml>
-
-    <token name="@HELP_AUTHORS@">
-.. class:: infomark
-
-**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
+    <!-- MISC -->
+    <token name="@HELP_AUTHORS_WRAPPERS@">
 
 .. class:: infomark
 
-**Galaxy integration** ABiMS TEAM - UPMC/CNRS - Station biologique de Roscoff and Yann Guitton yann.guitton@oniris-nantes.fr - part of Workflow4Metabolomics.org [W4M]
+**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">
-        <citations>
-            <citation type="doi">10.1021/ac051437y</citation>
+    <xml name="citation_w4m">
             <citation type="doi">10.1093/bioinformatics/btu813</citation>
-        </citations>
     </xml>
 </macros>
b
diff -r 363cce459fff -r b62808a2a008 macros_xcms.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros_xcms.xml Tue Sep 18 16:07:36 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 363cce459fff -r b62808a2a008 static/images/xcms_xcmsset_workflow.png
b
Binary file static/images/xcms_xcmsset_workflow.png has changed
b
diff -r 363cce459fff -r b62808a2a008 test-data/HU_neg_017.mzXML
--- a/test-data/HU_neg_017.mzXML Tue Feb 13 04:47:50 2018 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,40676 +0,0 @@\n-<?xml version="1.0" encoding="ISO-8859-1"?>\n-<mzXML xmlns="http://sashimi.sourceforge.net/schema_revision/mzXML_3.2"\n-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n-       xsi:schemaLocation="http://sashimi.sourceforge.net/schema_revision/mzXML_3.2 http://sashimi.sourceforge.net/schema_revision/mzXML_3.2/mzXML_idx_3.2.xsd">\n-  <msRun scanCount="2032" startTime="PT0.7297S" endTime="PT1139.62S">\n-    <parentFile fileName="file://Y:/439020_Metabolomic database/Etienne/sacuri-rawToCentroid/HU_neg_017.RAW"\n-                fileType="RAWData"\n-                fileSha1="b632da6cfb9a0c328b718b0018f2765f91f78058"/>\n-    <msInstrument id="IC1">\n-      <msManufacturer category="msManufacturer" value="Thermo Scientific"/>\n-      <msModel category="msModel" value="LTQ Orbitrap Discovery"/>\n-      <msIonisation category="msIonisation" value="electrospray ionization"/>\n-      <msMassAnalyzer category="msMassAnalyzer" value="orbitrap"/>\n-      <msDetector category="msDetector" value="inductive detector"/>\n-      <software type="acquisition" name="Xcalibur" version="2.4 SP1"/>\n-    </msInstrument>\n-    <msInstrument id="IC2">\n-      <msManufacturer category="msManufacturer" value="Thermo Scientific"/>\n-      <msModel category="msModel" value="LTQ Orbitrap Discovery"/>\n-      <msIonisation category="msIonisation" value="electrospray ionization"/>\n-      <msMassAnalyzer category="msMassAnalyzer" value="radial ejection linear ion trap"/>\n-      <msDetector category="msDetector" value="electron multiplier"/>\n-      <software type="acquisition" name="Xcalibur" version="2.4 SP1"/>\n-    </msInstrument>\n-    <dataProcessing centroided="1">\n-      <software type="conversion" name="ProteoWizard" version="2.2.3214"/>\n-      <processingOperation name="Conversion to mzML"/>\n-      <software type="processing" name="ProteoWizard" version="2.2.3214"/>\n-      <comment>Thermo/Xcalibur peak picking</comment>\n-    </dataProcessing>\n-    <scan num="1"\n-          scanEvent="1"\n-          scanType="FULL"\n-          centroided="1"\n-          msLevel="1"\n-          peaksCount="261"\n-          polarity="-"\n-          retentionTime="PT0.7297S"\n-          lowMz="50.37678527832"\n-          highMz="988.846313476563"\n-          basePeakMz="91.003402709961"\n-          basePeakIntensity="7.4043e06"\n-          totIonCurrent="1.4156879e07"\n-          msInstrumentID="IC1">\n-      <peaks compressedLen="0"\n-             precision="32"\n-             byteOrder="network"\n-             pairOrder="m/z-int">QkmB1EYkeTFCSi0tRj1WgUJPB5FGG+JOQlEhykZXbuVCUSr3RjEpEUJZZ7FGLDTdQlmQVkY+AhFCWt1RRmYqlEJh+xBGJPtqQmIVLkY/+Z9CaLTqRkYKj0JrgSVGI8c5Qm7KjUY3lcFCcOqSRjOE1UJ2VRRGKjAUQnvJs0ZICGJCfGFORi2CXUJ+e41GLvUqQoDLg0ZGmiZCgQ0/RjA2OkKFKUBGQ++BQoYzoUZgBT9CiJ8PRl5askKPv3NGYBZiQpJ0f0Y0e8VCkpOlRi2MJUKUZfhGNZdSQpl3kEZR9BBCmyHcRiIq/EKd50VGRl6+QqDXm0ZRWv9CoOsIRmIGBkKg7GxGZMj9QqDugUaStz1CoO8LR7L290Kg75tHqRKYQqDxtkaidLhCoPZMRms/DUKjEUpGTlwBQqMuIEY3xi9CpgzLRunN4UKoBKFGhwxmQqiuFUYzTDZCqUCMRi6jb0KrWTBGSLowQqvyN0bGvCdCq/LfRmpxwEKr9GZGd3RuQqv3jEZOd15Cq/omRmmFaUKr/gpHKdxxQqv+rkc7R9hCrACMRqpGnEKsCd1G9nk/QqwKfEcCmc9CrMT2Rn5uYkKxuBtGK559QrH5zUkwrExCsgxvR/x4NEKyIStGR7NuQrO4iUZdc9BCtcLGRmbZ60K10edGkc1PQrXbXUZXgttCtftORqSRV0K2AGRIBxgLQrYBvUrh9hhCtgZjRqkv30K2CGJGpgf0QrYxr0aI0UNCt4icRlCtnEK4A1tIF8MdQrgMykaMiWNCuY3LRj+lP0K6A9xHPqrSQr+gR0aKQYRCwEv7RjJbTULB62lHKaEYQsHwQ0aBw3FCw0PMRlIMQkLEcC5GMHaJQsXwikZVHqFC0Xj5RiJoa0LSD51GOGeMQtKU90Y+OLNC1pPzRlFq6kLeJiZGT3WQQt6k1EZHFTpC4fhjR0j7xkLilItG208BQuYHZkfS3FBC7JFQRlMUB0LyeQxGSQDgQvPhNEZQDCFC9DCARiVC4EL3hcRGOJCLQvwPm0avj1lC/N/fRm1pH0L9UpVGIZHHQv3C/EZflzdC/gdqRp7+0UMBiudGM/q3QwKhuUZOfrpDCTSzRkBZmUMJ8l5GTZHYQwsW0kZ4Ve1DC6m7RjJCMEMOIgNGWYw+Qw8lbUZZV1hDD+5VRnrVNUMRUxVGZqrPQxLJLEZxZQBDFQozRlcuVkMV5VRGQrr6QxkcGEZEGLhDGn7wRoBNEUMgnbtGQB6zQyDXZEaCooZDI7eJRjYK80MplqhIQtLGQyowzUZThOZDKoqERj8IZUMrbnNGXcOaQy5REEZ3RihDLlQ3RlMHY0MyDOBG4OCxQzL6JUfSjj5DMvuYRqqqXEM1pOJGSUHyQzWmY0aSbFZDONC1Rjkt30M40j9GT+d9Qzs0qUZkNmdDPRHuRkxuQEM9E79GPaWzQz0UrkaKXmVDPRXDRoG6GUM+7XpHClq'..b'>\n-    <offset id="1936">8321679</offset>\n-    <offset id="1937">8325507</offset>\n-    <offset id="1938">8329629</offset>\n-    <offset id="1939">8333778</offset>\n-    <offset id="1940">8337794</offset>\n-    <offset id="1941">8342314</offset>\n-    <offset id="1942">8346334</offset>\n-    <offset id="1943">8350164</offset>\n-    <offset id="1944">8354024</offset>\n-    <offset id="1945">8357413</offset>\n-    <offset id="1946">8361484</offset>\n-    <offset id="1947">8365619</offset>\n-    <offset id="1948">8369373</offset>\n-    <offset id="1949">8373240</offset>\n-    <offset id="1950">8376845</offset>\n-    <offset id="1951">8380832</offset>\n-    <offset id="1952">8384597</offset>\n-    <offset id="1953">8388202</offset>\n-    <offset id="1954">8392210</offset>\n-    <offset id="1955">8396218</offset>\n-    <offset id="1956">8400142</offset>\n-    <offset id="1957">8404161</offset>\n-    <offset id="1958">8408181</offset>\n-    <offset id="1959">8412275</offset>\n-    <offset id="1960">8416228</offset>\n-    <offset id="1961">8419928</offset>\n-    <offset id="1962">8423733</offset>\n-    <offset id="1963">8427883</offset>\n-    <offset id="1964">8431890</offset>\n-    <offset id="1965">8435778</offset>\n-    <offset id="1966">8439679</offset>\n-    <offset id="1967">8443540</offset>\n-    <offset id="1968">8447368</offset>\n-    <offset id="1969">8451472</offset>\n-    <offset id="1970">8455366</offset>\n-    <offset id="1971">8459482</offset>\n-    <offset id="1972">8463445</offset>\n-    <offset id="1973">8466899</offset>\n-    <offset id="1974">8470375</offset>\n-    <offset id="1975">8474329</offset>\n-    <offset id="1976">8478292</offset>\n-    <offset id="1977">8482311</offset>\n-    <offset id="1978">8486190</offset>\n-    <offset id="1979">8490282</offset>\n-    <offset id="1980">8494279</offset>\n-    <offset id="1981">8498429</offset>\n-    <offset id="1982">8502130</offset>\n-    <offset id="1983">8506138</offset>\n-    <offset id="1984">8510402</offset>\n-    <offset id="1985">8514103</offset>\n-    <offset id="1986">8518079</offset>\n-    <offset id="1987">8521959</offset>\n-    <offset id="1988">8526065</offset>\n-    <offset id="1989">8529767</offset>\n-    <offset id="1990">8533572</offset>\n-    <offset id="1991">8537549</offset>\n-    <offset id="1992">8541099</offset>\n-    <offset id="1993">8545161</offset>\n-    <offset id="1994">8549437</offset>\n-    <offset id="1995">8553554</offset>\n-    <offset id="1996">8557680</offset>\n-    <offset id="1997">8561812</offset>\n-    <offset id="1998">8565704</offset>\n-    <offset id="1999">8569458</offset>\n-    <offset id="2000">8573468</offset>\n-    <offset id="2001">8576943</offset>\n-    <offset id="2002">8580716</offset>\n-    <offset id="2003">8584521</offset>\n-    <offset id="2004">8588670</offset>\n-    <offset id="2005">8592678</offset>\n-    <offset id="2006">8596431</offset>\n-    <offset id="2007">8600504</offset>\n-    <offset id="2008">8604460</offset>\n-    <offset id="2009">8608234</offset>\n-    <offset id="2010">8611935</offset>\n-    <offset id="2011">8615872</offset>\n-    <offset id="2012">8619944</offset>\n-    <offset id="2013">8623580</offset>\n-    <offset id="2014">8627546</offset>\n-    <offset id="2015">8631632</offset>\n-    <offset id="2016">8635685</offset>\n-    <offset id="2017">8639609</offset>\n-    <offset id="2018">8643566</offset>\n-    <offset id="2019">8647116</offset>\n-    <offset id="2020">8651092</offset>\n-    <offset id="2021">8655537</offset>\n-    <offset id="2022">8659215</offset>\n-    <offset id="2023">8663287</offset>\n-    <offset id="2024">8667509</offset>\n-    <offset id="2025">8671434</offset>\n-    <offset id="2026">8675303</offset>\n-    <offset id="2027">8679292</offset>\n-    <offset id="2028">8683321</offset>\n-    <offset id="2029">8686894</offset>\n-    <offset id="2030">8690755</offset>\n-    <offset id="2031">8694679</offset>\n-    <offset id="2032">8698507</offset>\n-  </index>\n-  <indexOffset>8702736</indexOffset>\n-  <sha1>f1abac9e079de2df593083d41093052be5696a06</sha1>\n-</mzXML>\n'
b
diff -r 363cce459fff -r b62808a2a008 test-data/MM14.mzML
--- a/test-data/MM14.mzML Tue Feb 13 04:47:50 2018 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,3667 +0,0 @@\n-<?xml version="1.0" encoding="ISO-8859-1"?>\n-<mzML xmlns="http://psi.hupo.org/ms/mzml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd" accession="" version="1.1">\n-\t<cvList count="2">\n-\t\t<cv id="MS" fullName="Proteomics Standards Initiative Mass Spectrometry Ontology" URI="http://psidev.cvs.sourceforge.net/*checkout*/psidev/psi/psi-ms/mzML/controlledVocabulary/psi-ms.obo"/>\n-\t\t<cv id="UO" fullName="Unit Ontology" URI="http://obo.cvs.sourceforge.net/obo/obo/ontology/phenotype/unit.obo"/>\n-\t</cvList>\n-\t<fileDescription>\n-\t\t<fileContent>\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000294" name="mass spectrum" />\n-\t\t</fileContent>\n-\t\t<sourceFileList count="1">\n-\t\t\t<sourceFile id="sf_ru_0" name="analysis.baf" location="MM14_20uM_2-A%2c4_01_1745.d/">\n-\t\t\t\t<cvParam cvRef="MS" accession="MS:1000569" name="SHA-1" value="" />\n-\t\t\t\t<cvParam cvRef="MS" accession="MS:1000564" name="PSI mzData file" />\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000824" name="no nativeID format" />\n-\t\t\t</sourceFile>\n-\t\t</sourceFileList>\n-\t\t<contact>\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000586" name="contact name" value="Customer, Bruker" />\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000590" name="contact organization" value="" />\n-\t\t</contact>\n-\t</fileDescription>\n-\t<sampleList count="1">\n-\t\t<sample id="sa_0" name="MM14_20uM">\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000004" name="sample mass" value="0"  unitAccession="UO:0000021" unitName="gram" unitCvRef="UO" />\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000005" name="sample volume" value="0" unitAccession="UO:0000098" unitName="milliliter" unitCvRef="UO" />\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000006" name="sample concentration" value="0" unitAccession="UO:0000175" unitName="gram per liter" unitCvRef="UO" />\n-\t\t</sample>\n-\t</sampleList>\n-\t<softwareList count="3">\n-\t\t<software id="so_in_0" version="" >\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000799" name="custom unreleased software tool" value="" />\n-\t\t</software>\n-\t\t<software id="so_dp_0" version="1.3.3" >\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000717" name="CompassXport" />\n-\t\t</software>\n-\t\t<software id="so_dp_1" version="1.4" >\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000756" name="FileConverter" />\n-\t\t</software>\n-\t</softwareList>\n-\t<instrumentConfigurationList count="1">\n-\t\t<instrumentConfiguration id="ic_0">\n-\t\t\t<cvParam cvRef="MS" accession="MS:1000031" name="instrument model" />\n-\t\t\t<componentList count="3">\n-\t\t\t\t<source order="0">\n-\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000073" name="electrospray ionization" />\n-\t\t\t\t</source>\n-\t\t\t\t<analyzer order="0">\n-\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000014" name="accuracy" value="0" unitAccession="UO:0000169" unitName="parts per million" unitCvRef="UO" />\n-\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000022" name="TOF Total Path Length" value="0" unitAccession="UO:0000008" unitName="meter" unitCvRef="UO" />\n-\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000024" name="final MS exponent" value="0" />\n-\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000025" name="magnetic field strength" value="0" unitAccession="UO:0000228" unitName="tesla" unitCvRef="UO" />\n-\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000443" name="mass analyzer type" />\n-\t\t\t\t</analyzer>\n-\t\t\t\t<detector order="0">\n-\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000028" name="detector resolution" value="0" />\n-\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000029" name="sampling frequency" value="0" unitAccession="UO:0000106" unitName="hertz" unitCvRef="UO" />\n-\t\t\t\t\t<cvParam cvRef="MS" accession="MS:1000026" name="detector type" />\n-\t\t\t\t</detector>\n-\t\t\t</componentList>\n-\t\t\t<softwareRef ref="so_in_0" />\n-\t\t</instrumentConfiguration>\n-\t</instrumentConfigurationList>\n-\t<dataProcessingList count="1">\n-\t\t<dataProcessing id="dp_ru_0">\n-\t\t\t<processingMethod order="0" softwareRef="so_dp_0">\n-\t\t\t\t<cvParam cvRef="MS" accession="MS:1000034" name="charge deconvolution" />\n-\t\t\t\t<cvP'..b'IBUQAAAAAAAAENAAAAAAAAAOUAAAAAAAAA6QAAAAAAAwFNAAAAAAACAQUAAAAAAAAA8QAAAAAAAADVAAAAAAAAAPkAAAAAAAABEQAAAAAAAAD9AAAAAAAAANkAAAAAAAAA8QAAAAAAAgEdAAAAAAAAAO0AAAAAAAABJQAAAAAAAADhAAAAAAAAAN0AAAAAAAAA5QAAAAAAAADVAAAAAAACAREAAAAAAAABFQAAAAAAAgEhAAAAAAAAAOkAAAAAAAAA1QAAAAAAAAEJAAAAAAAAANkAAAAAAAAA9QAAAAAAAADdAAAAAAAAAU0AAAAAAAAA8QAAAAAAAADtAAAAAAAAAP0AAAAAAAABFQAAAAAAAADVAAAAAAAAAP0AAAAAAAABDQAAAAAAAADtAAAAAAAAAOEAAAAAAAIBAQAAAAAAAADhAAAAAAAAAPUAAAAAAAAA3QAAAAAAAAD9AAAAAAAAAP0AAAAAAAAA4QAAAAAAAAEhAAAAAAAAAP0AAAAAAAABMQAAAAAAAAD1AAAAAAAAAP0AAAAAAAABCQAAAAAAAADZAAAAAAACAR0AAAAAAAAA+QAAAAAAAAE1AAAAAAAAAO0AAAAAAAAA+QAAAAAAAADlAAAAAAACAQEAAAAAAAAA4QAAAAAAAAEFAAAAAAAAAOkAAAAAAAABDQAAAAAAAADdAAAAAAAAANUAAAAAAAIBJQAAAAAAAgENAAAAAAACAQ0AAAAAAAIBCQAAAAAAAAEJAAAAAAAAAP0AAAAAAAEBTQAAAAAAAgEhAAAAAAAAAQUAAAAAAAEBQQAAAAAAAADdAAAAAAACAQkAAAAAAAAA8QAAAAAAAAD5AAAAAAAAAPkAAAAAAAABFQAAAAAAAAD9AAAAAAAAANUAAAAAAAIBPQAAAAAAAAD5AAAAAAAAAQEAAAAAAAAA/QAAAAAAAAENAAAAAAAAAO0AAAAAAAAA+QAAAAAAAAEBAAAAAAACAQEAAAAAAAIBIQAAAAAAAADZAAAAAAAAAPUAAAAAAAAA3QAAAAAAAAEZAAAAAAACAQ0AAAAAAAABDQAAAAAAAgEBAAAAAAAAANkAAAAAAAIBAQAAAAAAAADlAAAAAAAAAP0AAAAAAAAA9QAAAAAAAAD1AAAAAAACAUkAAAAAAAIBAQAAAAAAAgEJAAAAAAAAAPkAAAAAAAAA/QAAAAAAAAFBAAAAAAAAAOUAAAAAAAIBGQAAAAAAAgERAAAAAAACATEAAAAAAAABDQAAAAAAAAEFAAAAAAAAATkAAAAAAAIBGQAAAAAAAAD5AAAAAAAAAPUAAAAAAAAA4QAAAAAAAAEZAAAAAAAAAQEAAAAAAAABBQAAAAAAAgENAAAAAAAAAO0AAAAAAAAA9QAAAAAAAAD9AAAAAAAAAQEAAAAAAAIBAQAAAAAAAADhAAAAAAAAASEAAAAAAAAA6QAAAAAAAADlAAAAAAAAANUAAAAAAAABDQAAAAAAAADhAAAAAAAAAQ0AAAAAAAAA+QAAAAAAAAD5AAAAAAACATEAAAAAAAAA5QAAAAAAAgENAAAAAAAAAOkAAAAAAAAA1QAAAAAAAADxAAAAAAAAAOEAAAAAAAIBCQAAAAAAAAEBAAAAAAACAQkAAAAAAAABCQAAAAAAAgE1AAAAAAACAQUAAAAAAAIBFQAAAAAAAgEBAAAAAAAAAPkAAAAAAAABBQAAAAAAAADhAAAAAAAAANkAAAAAAAIBCQAAAAAAAAD5AAAAAAAAANkAAAAAAAAA6QAAAAAAAADpAAAAAAAAAPkAAAAAAAABHQAAAAAAAADlAAAAAAAAARUAAAAAAAAA2QAAAAAAAADVAAAAAAAAAQEAAAAAAAAA6QAAAAAAAADVAAAAAAAAAPEAAAAAAAAA5QAAAAAAAAD5AAAAAAACAREAAAAAAAAA9QAAAAAAAADlAAAAAAAAAPUAAAAAAAIBEQAAAAAAAAD9AAAAAAAAAOkAAAAAAAABFQAAAAAAAAD5AAAAAAAAAPkAAAAAAAAA9QAAAAAAAAEpAAAAAAAAAQ0AAAAAAAABLQAAAAAAAADhAAAAAAAAAOEAAAAAAAAA2QAAAAAAAAD1AAAAAAAAAO0AAAAAAAAA9QAAAAAAAgEFAAAAAAAAAOEAAAAAAAAA/QAAAAAAAADtAAAAAAAAAO0AAAAAAAAA3QAAAAAAAgE1AAAAAAAAAN0AAAAAAAAA2QAAAAAAAAD5AAAAAAAAAN0AAAAAAAABEQAAAAAAAADdAAAAAAAAANUAAAAAAAAA3QAAAAAAAADZAAAAAAAAAOUAAAAAAAAA4QAAAAAAAADhAAAAAAAAAQUAAAAAAAIBDQAAAAAAAAE1AAAAAAAAAOUAAAAAAAAA5QAAAAAAAAD5AAAAAAAAAPUAAAAAAAAA/QAAAAAAAAEBAAAAAAAAAN0AAAAAAAIBDQAAAAAAAADdAAAAAAACASUAAAAAAAABFQAAAAAAAAEJAAAAAAAAAPkAAAAAAAAA4QAAAAAAAAEJAAAAAAAAAP0AAAAAAAAA8QAAAAAAAADlAAAAAAACAQUAAAAAAAAA8QAAAAAAAADtAAAAAAAAAPEAAAAAAAABBQAAAAAAAADVAAAAAAAAARUAAAAAAAAA6QAAAAAAAAEdAAAAAAACAS0AAAAAAAIBMQAAAAAAAgEZAAAAAAAAAOUAAAAAAAAA4QAAAAAAAADpAAAAAAAAAN0AAAAAAAAA/QAAAAAAAgEJAAAAAAAAARkAAAAAAAAA4QAAAAAAAADhAAAAAAAAAOkAAAAAAAAA/QAAAAAAAgENAAAAAAAAAQEAAAAAAAAA4QAAAAAAAAExAAAAAAAAAPkAAAAAAAAA1QAAAAAAAgEdAAAAAAACAR0AAAAAAAIBCQAAAAAAAAExAAAAAAAAAOUAAAAAAAAA9QAAAAAAAAEdAAAAAAAAAP0AAAAAAAABDQAAAAAAAAENAAAAAAACAQ0AAAAAAAAA9QAAAAAAAAEBAAAAAAAAAQUAAAAAAAAA1QAAAAAAAAD1AAAAAAAAAPkAAAAAAAABCQAAAAAAAAEtAAAAAAAAAOUAAAAAAAAA1QAAAAAAAADVAAAAAAACAQ0AAAAAAAIBIQAAAAAAAAD9AAAAAAAAAOkAAAAAAAAA2QAAAAAAAAD1AAAAAAAAAOUAAAAAAAABEQAAAAAAAADpAAAAAAAAAOkAAAAAAAABCQAAAAAAAgEFAAAAAAAAANkAAAAAAAAA8QAAAAAAAAEFAAAAAAAAANkAAAAAAAABIQAAAAAAAADlAAAAAAAAAOkAAAAAAAAA5QAAAAAAAAEpAAAAAAAAAN0AAAAAAAAA7QAAAAAAAADxAAAAAAAAAQ0AAAAAAAAA5QAAAAAAAADtAAAAAAAAAN0AAAAAAAAA5QAAAAAAAAD5AAAAAAAAANkAAAAAAAAA3QAAAAAAAADpAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADlAAAAAAAAAOkAAAAAAAABCQAAAAAAAADZAAAAAAAAAO0AAAAAAAABCQAAAAAAAAD9AAAAAAAAAOEAAAAAAAAA4QAAAAAAAAEVAAAAAAAAAN0AAAAAAAABEQAAAAAAAgEFAAAAAAAAAPUAAAAAAAAA9QAAAAAAAADxAAAAAAACAQEAAAAAAAAA3QAAAAAAAADVAAAAAAAAAQUAAAAAAAAA9QAAAAAAAAEFAAAAAAACAQ0AAAAAAAIBAQAAAAAAAgEFAAAAAAAAAREAAAAAAAAA3QAAAAAAAADxAAAAAAAAAN0AAAAAAAAA4QAAAAAAAADxAAAAAAAAAPUAAAAAAAAA8QAAAAAAAADlAAAAAAAAAOUAAAAAAAAA3QAAAAAAAgEBA</binary>\n-\t\t\t\t\t</binaryDataArray>\n-\t\t\t\t</binaryDataArrayList>\n-\t\t\t</spectrum>\n-\t\t</spectrumList>\n-\t</run>\n-</mzML>\n\\ No newline at end of file\n'
b
diff -r 363cce459fff -r b62808a2a008 test-data/MM8.mzML
--- a/test-data/MM8.mzML Tue Feb 13 04:47:50 2018 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
b'@@ -1,6207 +0,0 @@\n-<?xml version="1.0" encoding="ISO-8859-1"?>\r\n-<mzML xmlns="http://psi.hupo.org/ms/mzml" xsi:schemaLocation="http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd" version="1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r\n-<cvList count="2">\r\n-<cv id="MS" fullName="Proteomics Standards Initiative Mass Spectrometry Vocabularies" version="2.26.0" URI="http://psidev.cvs.sourceforge.net/*checkout*/psidev/psi/psi-ms/mzML/controlledVocabulary/psi-ms.obo"/>\r\n-<cv id="UO" fullName="unit" version="1.20" URI="http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/phenotype/unit.obo?revision=1.20"/>\r\n-</cvList>\r\n-<fileDescription>\r\n-<fileContent>\r\n-<cvParam cvRef="MS" accession="MS:1000579" name="MS1 spectrum"/>\r\n-<cvParam cvRef="MS" accession="MS:1000127" name="centroid spectrum"/>\r\n-</fileContent>\r\n-<sourceFileList count="1">\r\n-<sourceFile id="sourceFile" location="Z:/tmp/bruker/MM8_2-F%2c1_01_5950.d" name="analysis.baf">\r\n-<cvParam cvRef="MS" accession="MS:1000772" name="Bruker BAF nativeID format"/>\r\n-<cvParam cvRef="MS" accession="MS:1000815" name="Bruker BAF file"/>\r\n-<cvParam cvRef="MS" accession="MS:1000569" name="SHA-1" value="7ade07ca5f336a6e8378bd0ba9992528b1c766b5"/>\r\n-</sourceFile>\r\n-</sourceFileList>\r\n-<contact>\r\n-<cvParam cvRef="MS" accession="MS:1000586" name="contact name" value="Bruker Customer"/>\r\n-<cvParam cvRef="MS" accession="MS:1000590" name="contact organization" value=""/>\r\n-</contact>\r\n-</fileDescription>\r\n-<sampleList count="1">\r\n-<sample id="sample" name="MM8">\r\n-</sample>\r\n-</sampleList>\r\n-<softwareList count="2">\r\n-<software id="exportSoftware" version="3.0.0">\r\n-<cvParam cvRef="MS" accession="MS:1000717" name="CompassXport"/>\r\n-</software>\r\n-<software id="instrumentSoftware" version="2.3.40.0">\r\n-<cvParam cvRef="MS" accession="MS:1000692" name="Bruker software"/>\r\n-<userParam name="AcquisitionProgram" value="micrOTOFcontrol"/>\r\n-</software>\r\n-</softwareList>\r\n-<instrumentConfigurationList count="1">\r\n-<instrumentConfiguration id="instrument">\r\n-<cvParam cvRef="MS" accession="MS:1000703" name="micrOTOF-Q"/>\r\n-<componentList count="3">\r\n-<source order="1">\r\n-<cvParam cvRef="MS" accession="MS:1000073" name="electrospray ionization"/>\r\n-</source>\r\n-<analyzer order="2">\r\n-<cvParam cvRef="MS" accession="MS:1000081" name="quadrupole"/>\r\n-</analyzer>\r\n-<detector order="3">\r\n-<cvParam cvRef="MS" accession="MS:1000253" name="electron multiplier"/>\r\n-</detector>\r\n-</componentList>\r\n-<softwareRef ref="instrumentSoftware"/>\r\n-</instrumentConfiguration>\r\n-</instrumentConfigurationList>\r\n-<dataProcessingList count="1">\r\n-<dataProcessing id="exportation">\r\n-<processingMethod order="1" softwareRef="instrumentSoftware">\r\n-<cvParam cvRef="MS" accession="MS:1000035" name="peak picking"/>\r\n-</processingMethod>\r\n-<processingMethod order="2" softwareRef="exportSoftware">\r\n-<cvParam cvRef="MS" accession="MS:1000544" name="Conversion to mzML"/>\r\n-<cvParam cvRef="MS" accession="MS:1000747" name="completion time" value="2010-12-14T14:45:43"/>\r\n-</processingMethod>\r\n-</dataProcessing>\r\n-</dataProcessingList>\r\n-<run id="run" defaultInstrumentConfigurationRef="instrument" startTimeStamp="2008-09-01T09:48:37.296+01:00">\r\n-<spectrumList count="198" defaultDataProcessingRef="exportation">\r\n-<spectrum index="0" id="scan=1" defaultArrayLength="1743">\r\n-<cvParam cvRef="MS" accession="MS:1000130" name="positive scan"/>\r\n-<cvParam cvRef="MS" accession="MS:1000579" name="MS1 spectrum"/>\r\n-<cvParam cvRef="MS" accession="MS:1000127" name="centroid spectrum"/>\r\n-<cvParam cvRef="MS" accession="MS:1000285" name="total ion current" value="97322.00000000"/>\r\n-<cvParam cvRef="MS" accession="MS:1000504" name="base peak m/z" value="144.04999210" unitCvRef="MS" unitAccession="MS:1000040" unitName="m/z"/>\r\n-<cvParam cvRef="MS" accession="MS:1000505" name="base peak intensity" value="7250.00000000" unitCvRef="MS" unitAccession="MS:1000131" unitName="number of counts"/>\r\n-<cvParam cvRef="MS" acces'..b'27lBEZSzm8cBlFrq/i5UWr+WzNWqZHrWVD6lpuK1nHhpNBtN0WTNcbwdw2eCv/B3BSEJQ=</binary>\r\n-</binaryDataArray>\r\n-<binaryDataArray encodedLength="3452">\r\n-<cvParam cvRef="MS" accession="MS:1000574" name="zlib compression"/>\r\n-<cvParam cvRef="MS" accession="MS:1000515" name="intensity array" value="" unitCvRef="MS" unitAccession="MS:1000131" unitName="number of counts"/>\r\n-<cvParam cvRef="MS" accession="MS:1000521" name="32-bit float"/>\r\n-<binary>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</binary>\r\n-</binaryDataArray>\r\n-</binaryDataArrayList>\r\n-</spectrum>\r\n-</spectrumList>\r\n-</run>\r\n-</mzML>\r\n'
b
diff -r 363cce459fff -r b62808a2a008 test-data/faahKO.raw.RData
b
Binary file test-data/faahKO.raw.RData has changed
b
diff -r 363cce459fff -r b62808a2a008 test-data/ko15-raw.RData
b
Binary file test-data/ko15-raw.RData has changed
b
diff -r 363cce459fff -r b62808a2a008 test-data/ko15.CDF
b
Binary file test-data/ko15.CDF has changed
b
diff -r 363cce459fff -r b62808a2a008 test-data/roiList.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/roiList.txt Tue Sep 18 16:07:36 2018 -0400
b
@@ -0,0 +1,2 @@
+scmin scmax mzmin mzmax length intensity
+200 300 300 350 100 5000
b
diff -r 363cce459fff -r b62808a2a008 xcms.r
--- a/xcms.r Tue Feb 13 04:47:50 2018 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,229 +0,0 @@
-#!/usr/bin/env Rscript
-# xcms.r version="2.2.0"
-#Authors ABIMS TEAM
-#BPC Addition from Y.guitton
-
-
-# ----- LOG FILE -----
-log_file=file("log.txt", open = "wt")
-sink(log_file)
-sink(log_file, type = "output")
-
-
-# ----- PACKAGE -----
-cat("\tPACKAGE INFO\n")
-#pkgs=c("xcms","batch")
-pkgs=c("parallel","BiocGenerics", "Biobase", "Rcpp", "mzR", "xcms","snow","batch")
-for(pkg in pkgs) {
-    suppressPackageStartupMessages( stopifnot( library(pkg, quietly=TRUE, logical.return=TRUE, character.only=TRUE)))
-    cat(pkg,"\t",as.character(packageVersion(pkg)),"\n",sep="")
-}
-source_local <- function(fname){ argv <- commandArgs(trailingOnly = FALSE); base_dir <- dirname(substring(argv[grep("--file=", argv)], 8)); source(paste(base_dir, fname, sep="/")) }
-cat("\n\n");
-
-
-
-
-
-# ----- ARGUMENTS -----
-cat("\tARGUMENTS INFO\n")
-listArguments = parseCommandArgs(evaluate=FALSE) #interpretation of arguments given in command line as an R list of objects
-write.table(as.matrix(listArguments), col.names=F, quote=F, sep='\t')
-
-cat("\n\n");
-
-
-# ----- ARGUMENTS PROCESSING -----
-cat("\tINFILE PROCESSING INFO\n")
-
-#image is an .RData file necessary to use xset variable given by previous tools
-if (!is.null(listArguments[["image"]])){
-    load(listArguments[["image"]]); listArguments[["image"]]=NULL
-}
-
-#Import the different functions
-source_local("lib.r")
-
-cat("\n\n")
-
-#Import the different functions
-
-# ----- PROCESSING INFILE -----
-cat("\tARGUMENTS PROCESSING INFO\n")
-
-# Save arguments to generate a report
-if (!exists("listOFlistArguments")) listOFlistArguments=list()
-listOFlistArguments[[paste(format(Sys.time(), "%y%m%d-%H:%M:%S_"),listArguments[["xfunction"]],sep="")]] = listArguments
-
-
-#saving the commun parameters
-thefunction = listArguments[["xfunction"]]; listArguments[["xfunction"]]=NULL #delete from the list of arguments
-
-xsetRdataOutput = paste(thefunction,"RData",sep=".")
-if (!is.null(listArguments[["xsetRdataOutput"]])){
-    xsetRdataOutput = listArguments[["xsetRdataOutput"]]; listArguments[["xsetRdataOutput"]]=NULL
-}
-
-#saving the specific parameters
-rplotspdf = "Rplots.pdf"
-if (!is.null(listArguments[["rplotspdf"]])){
-    rplotspdf = listArguments[["rplotspdf"]]; listArguments[["rplotspdf"]]=NULL
-}
-sampleMetadataOutput = "sampleMetadata.tsv"
-if (!is.null(listArguments[["sampleMetadataOutput"]])){
-    sampleMetadataOutput = listArguments[["sampleMetadataOutput"]]; listArguments[["sampleMetadataOutput"]]=NULL
-}
-variableMetadataOutput = "variableMetadata.tsv"
-if (!is.null(listArguments[["variableMetadataOutput"]])){
-    variableMetadataOutput = listArguments[["variableMetadataOutput"]]; listArguments[["variableMetadataOutput"]]=NULL
-}
-dataMatrixOutput = "dataMatrix.tsv"
-if (!is.null(listArguments[["dataMatrixOutput"]])){
-    dataMatrixOutput = listArguments[["dataMatrixOutput"]]; listArguments[["dataMatrixOutput"]]=NULL
-}
-if (!is.null(listArguments[["convertRTMinute"]])){
-    convertRTMinute = listArguments[["convertRTMinute"]]; listArguments[["convertRTMinute"]]=NULL
-}
-if (!is.null(listArguments[["numDigitsMZ"]])){
-    numDigitsMZ = listArguments[["numDigitsMZ"]]; listArguments[["numDigitsMZ"]]=NULL
-}
-if (!is.null(listArguments[["numDigitsRT"]])){
-  numDigitsRT = listArguments[["numDigitsRT"]]; listArguments[["numDigitsRT"]]=NULL
-}
-if (!is.null(listArguments[["intval"]])){
-    intval = listArguments[["intval"]]; listArguments[["intval"]]=NULL
-}
-
-if (thefunction %in% c("xcmsSet","retcor")) {
-    ticspdf = listArguments[["ticspdf"]]; listArguments[["ticspdf"]]=NULL
-    bicspdf = listArguments[["bicspdf"]]; listArguments[["bicspdf"]]=NULL
-}
-
-
-if (thefunction %in% c("xcmsSet","retcor","fillPeaks"))  {
-    if (!exists("singlefile")) singlefile=NULL
-    if (!exists("zipfile")) zipfile=NULL
-    rawFilePath = getRawfilePathFromArguments(singlefile, zipfile, listArguments)
-    zipfile = rawFilePath$zipfile
-    singlefile = rawFilePath$singlefile
-    listArguments = rawFilePath$listArguments
-    directory = retrieveRawfileInTheWorkingDirectory(singlefile, zipfile)
-    md5sumList=list("origin"=getMd5sum(directory))
-}
-
-#addition of the directory to the list of arguments in the first position
-if (thefunction == "xcmsSet") {
-    checkXmlStructure(directory)
-    checkFilesCompatibilityWithXcms(directory)
-    listArguments=append(directory, listArguments)
-}
-
-
-#addition of xset object to the list of arguments in the first position
-if (exists("xset")){
-    listArguments=append(list(xset), listArguments)
-}
-
-cat("\n\n")
-
-
-
-
-# ----- MAIN PROCESSING INFO -----
-cat("\tMAIN PROCESSING INFO\n")
-
-
-#Verification of a group step before doing the fillpeaks job.
-
-if (thefunction == "fillPeaks") {
-    res=try(is.null(groupnames(xset)))
-    if (class(res) == "try-error"){
-        error<-geterrmessage()
-        write(error, stderr())
-        stop("You must always do a group step after a retcor. Otherwise it won't work for the fillpeaks step")
-    }
-
-}
-
-#change the default display settings
-#dev.new(file="Rplots.pdf", width=16, height=12)
-pdf(file=rplotspdf, width=16, height=12)
-if (thefunction == "group") {
-    par(mfrow=c(2,2))
-}
-#else if (thefunction == "retcor") {
-#try to change the legend display
-#     par(xpd=NA)
-#     par(xpd=T, mar=par()$mar+c(0,0,0,4))
-#}
-
-
-#execution of the function "thefunction" with the parameters given in "listArguments"
-
-cat("\t\tCOMPUTE\n")
-xset = do.call(thefunction, listArguments)
-
-# check if there are no peaks
-if (nrow(peaks(xset)) == 0) {
-    stop("No peaks were detected. You should review your settings")
-}
-
-
-cat("\n\n")
-
-dev.off() #dev.new(file="Rplots.pdf", width=16, height=12)
-
-if (thefunction  == "xcmsSet") {
-
-    #transform the files absolute pathways into relative pathways
-    xset@filepaths<-sub(paste(getwd(),"/",sep="") ,"", xset@filepaths)
-    if(exists("zipfile") && !is.null(zipfile) && (zipfile!="")) {
-
-        #Modify the samples names (erase the path)
-        for(i in 1:length(sampnames(xset))){
-
-            sample_name=unlist(strsplit(sampnames(xset)[i], "/"))
-            sample_name=sample_name[length(sample_name)]
-            sample_name= unlist(strsplit(sample_name,"[.]"))[1]
-            sampnames(xset)[i]=sample_name
-
-        }
-
-    }
-
-}
-
-# -- TIC --
-if (thefunction == "xcmsSet") {
-    cat("\t\tGET TIC GRAPH\n")
-    sampleNamesList = getSampleMetadata(xcmsSet=xset, sampleMetadataOutput=sampleMetadataOutput)
-    getTICs(xcmsSet=xset, pdfname=ticspdf,rt="raw")
-    getBPCs(xcmsSet=xset,rt="raw",pdfname=bicspdf)
-} else if (thefunction == "retcor") {
-    cat("\t\tGET TIC GRAPH\n")
-    getTICs(xcmsSet=xset, pdfname=ticspdf,rt="corrected")
-    getBPCs(xcmsSet=xset,rt="corrected",pdfname=bicspdf)
-}
-
-if ((thefunction == "group" || thefunction == "fillPeaks") && exists("intval")) {
-    getPeaklistW4M(xset,intval,convertRTMinute,numDigitsMZ,numDigitsRT,variableMetadataOutput,dataMatrixOutput)
-}
-
-
-cat("\n\n")
-
-# ----- EXPORT -----
-
-cat("\tXSET OBJECT INFO\n")
-print(xset)
-#delete the parameters to avoid the passage to the next tool in .RData image
-
-
-#saving R data in .Rdata file to save the variables used in the present tool
-objects2save = c("xset","zipfile","singlefile","listOFlistArguments","md5sumList","sampleNamesList")
-save(list=objects2save[objects2save %in% ls()], file=xsetRdataOutput)
-
-cat("\n\n")
-
-
-cat("\tDONE\n")
b
diff -r 363cce459fff -r b62808a2a008 xcms_xcmsSet.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xcms_xcmsSet.r Tue Sep 18 16:07:36 2018 -0400
[
@@ -0,0 +1,132 @@
+#!/usr/bin/env Rscript
+
+# ----- LOG FILE -----
+log_file <- file("log.txt", open="wt")
+sink(log_file)
+sink(log_file, type = "output")
+
+
+# ----- 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")
+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")
+
+#saving the commun parameters
+BPPARAM <- MulticoreParam(1)
+if (!is.null(args$BPPARAM)){
+    BPPARAM <- MulticoreParam(args$BPPARAM)
+}
+register(BPPARAM)
+
+#saving the specific parameters
+if (!is.null(args$filterAcquisitionNum)) filterAcquisitionNumParam <- args$filterAcquisitionNum
+if (!is.null(args$filterRt)) filterRtParam <- args$filterRt
+if (!is.null(args$filterMz)) filterMzParam <- args$filterMz
+
+method <- args$method
+
+if (!is.null(args$roiList)){
+    cat("\t\troiList provided\n")
+    args$roiList <- list(getDataFrameFromFile(args$roiList))
+    print(args$roiList)
+}
+
+cat("\n\n")
+
+# ----- INFILE PROCESSING -----
+cat("\tINFILE PROCESSING INFO\n")
+
+#image is an .RData file necessary to use xset variable given by previous tools
+load(args$image)
+if (!exists("raw_data")) stop("\n\nERROR: The RData doesn't contain any object called 'raw_data' which is provided by the tool: MSnbase readMSData")
+
+# Handle infiles
+if (!exists("singlefile")) singlefile <- NULL
+if (!exists("zipfile")) zipfile <- NULL
+rawFilePath <- getRawfilePathFromArguments(singlefile, zipfile, args)
+zipfile <- rawFilePath$zipfile
+singlefile <- rawFilePath$singlefile
+directory <- retrieveRawfileInTheWorkingDirectory(singlefile, zipfile)
+
+
+cat("\n\n")
+
+
+# ----- MAIN PROCESSING INFO -----
+cat("\tMAIN PROCESSING INFO\n")
+
+
+cat("\t\tCOMPUTE\n")
+
+## Get the full path to the files
+files <- getMSFiles(directory)
+
+cat("\t\t\tApply filter[s] (if asked)\n")
+if (exists("filterAcquisitionNumParam"))  raw_data <- filterAcquisitionNum(raw_data, filterAcquisitionNumParam[1]:filterAcquisitionNumParam[2])
+if (exists("filterRtParam")) raw_data <- filterRt(raw_data, filterRtParam)
+if (exists("filterMzParam")) raw_data <- filterMz(raw_data, filterMzParam)
+#Apply this filter only if file contain MS and MSn
+if(length(unique(msLevel(raw_data)))!= 1){
+ raw_data <- filterMsLevel(raw_data,msLevel=1)
+}
+
+cat("\t\t\tChromatographic peak detection\n")
+# clear the arguement list to remove unexpected key/value as singlefile_galaxyPath or method ...
+args <- args[names(args) %in% slotNames(do.call(paste0(method,"Param"), list()))]
+
+findChromPeaksParam <- do.call(paste0(method,"Param"), args)
+print(findChromPeaksParam)
+xdata <- findChromPeaks(raw_data, param=findChromPeaksParam)
+
+# Check if there are no peaks
+if (nrow(chromPeaks(xdata)) == 0) stop("No peaks were detected. You should review your settings")
+
+# Transform the files absolute pathways into relative pathways
+xdata@processingData@files <- sub(paste(getwd(), "/", sep="") , "", xdata@processingData@files)
+
+# Create a sampleMetada file
+sampleNamesList <- getSampleMetadata(xdata=xdata, sampleMetadataOutput="sampleMetadata.tsv")
+
+cat("\t\t\tCompute and Store TIC and BPI\n")
+chromTIC = chromatogram(xdata, aggregationFun = "sum")
+chromBPI = chromatogram(xdata, 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")
+
+#saving R data in .Rdata file to save the variables used in the present tool
+objects2save <- c("xdata", "zipfile", "singlefile", "md5sumList", "sampleNamesList", "chromTIC", "chromBPI")
+save(list=objects2save[objects2save %in% ls()], file="xcmsSet.RData")
+
+
+cat("\tDONE\n")