Mercurial > repos > lecorguille > camera_annotate
changeset 25:4b9ab71be05e draft
planemo upload commit cfad09eb4dd6b1439b7de6a0852cd8fa22210f58
author | workflow4metabolomics |
---|---|
date | Mon, 11 Sep 2023 22:40:34 +0000 |
parents | 512c2b701d96 |
children | 3d63a762954a |
files | CAMERA_annotateDiffreport.r README.rst abims_CAMERA_annotateDiffreport.xml lib.r macros.xml repository_dependencies.xml static/images/combinexsannos_variableMetadata.png static/images/combinexsannos_workflow.png static/images/combinexsannos_workflow_zoom.png test-data/faahOK.xset.group.retcor.group.fillPeaks.annotate.negative.Rdata test-data/faahOK.xset.group.retcor.group.fillPeaks.annotate.positive.Rdata test-data/faahOK.xset.group.retcor.group.fillPeaks.annotate.positive.combinexsAnnos.variableMetadata.tsv test-data/ko15-raw.RData test-data/ko15-xset.RData test-data/ko16-raw.RData test-data/ko16-xset.RData test-data/wt15-raw.RData test-data/wt15-xset.RData test-data/wt16-raw.RData test-data/wt16-xset.RData |
diffstat | 20 files changed, 432 insertions(+), 392 deletions(-) [+] |
line wrap: on
line diff
--- a/CAMERA_annotateDiffreport.r Fri Jul 02 02:51:41 2021 +0000 +++ b/CAMERA_annotateDiffreport.r Mon Sep 11 22:40:34 2023 +0000 @@ -3,30 +3,30 @@ # ----- PACKAGE ----- cat("\tSESSION INFO\n") -#Import the different functions +# 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 = "/")) + argv <- commandArgs(trailingOnly = FALSE) + base_dir <- dirname(substring(argv[grep("--file=", argv)], 8)) + source(paste(base_dir, fname, sep = "/")) } source_local("lib.r") pkgs <- c("CAMERA", "multtest", "batch") loadAndDisplayPackages(pkgs) -cat("\n\n"); - +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") +args <- parseCommandArgs(evaluate = FALSE) # interpretation of arguments given in command line as an R list of objects +write.table(as.matrix(args), col.names = FALSE, quote = FALSE, sep = "\t") -cat("\n\n"); - - +cat("\n\n") # ----- PROCESSING INFILE ----- cat("\tINFILE PROCESSING INFO\n") -#image is an .RData file necessary to use xset variable given by previous tools -load(args$image); args$image <- NULL +# image is an .RData file necessary to use xset variable given by previous tools +load(args$image) +args$image <- NULL cat("\n\n") @@ -50,7 +50,7 @@ # Because so far CAMERA isn't compatible with the new XCMSnExp object if (exists("xdata")) { - xset <- getxcmsSetObject(xdata) + xset <- getxcmsSetObject(xdata) } cat("\n\n") @@ -72,7 +72,7 @@ print(xa) cat("\n\n") -#saving R data in .Rdata file to save the variables used in the present tool +# saving R data in .Rdata file to save the variables used in the present tool objects2save <- c("xa", "variableMetadata", "diffrep", "cAnnot", "listOFargs", "zipfile", "singlefile") save(list = objects2save[objects2save %in% ls()], file = "annotatediff.RData")
--- a/README.rst Fri Jul 02 02:51:41 2021 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ - -Changelog/News --------------- - -**Version 2.2.6+camera1.48.0 - 11/06/2021** - -- UPGRADE: upgrade the CAMERA version from 1.46.0 to 1.48.0 (see CAMERA News_) - -**Version 2.2.6+camera1.46.0 - 12/04/2021** - -- UPGRADE: upgrade the CAMERA version from 1.42.0 to 1.46.0 (see CAMERA News_) - -**Version 2.2.6+camera1.42.0+galaxy1 - 09/03/2020** - -- BUGFIX: Fix the zip export of the pictures (eic and boxplot) - -**Version 2.2.5+camera1.42.0 - 13/02/2020** - -- UPGRADE: upgrade the CAMERA version from 1.38.1 to 1.42.0 (see CAMERA News_) - -**Version 2.2.5 - 09/04/2019** - -- NEW: zip export are back for pictures (eic and boxplot) and diffreport tables - -- UPGRADE: upgrade the CAMERA version from 1.34.0 to 1.38.1 (see CAMERA News_) - -- UPGRADE: refactoring of internal code - -**Version 2.2.4 - 09/10/2018** - -- NES: CAMERA.annotate no longer export a DataMatrix. fillChromPeaks does the job - -**Version 2.2.3 - 30/04/2018** - -- NEW: support the new xcms 3.0.0 wrapper - -**Version 2.2.2 - 01/03/2018** - -- UPGRADE: upgrate the CAMERA version from 1.26.0 to 1.32.0 - -**Version 2.2.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.2.0 - 03/02/2017** - -- BUGFIX: the diffreport ids didn't convert the rt in minute as the other export - -- UPDATE: the settings (digits, convertion in minutes) of the identifiants will no longer modify the native one. Because we want to be conservative and because it can be dangerous for the data integrity during a futur merge of the table, we decide to put those customization in a new column namecustom within the variableMetadata. - -- IMPROVEMENT: add some sections within the form to separate the different parts of the process - -- IMPROVEMENT: add the possibility to use defined ruleset - -- IMPROVEMENT: add the possibility to set the MZ digit within the identifiants - -- IMPROVEMENT: CAMERA.annotate is now compatible with merged individual data from xcms.xcmsSet - - -**Version 2.1.5 - 21/04/2016** - -- UPGRADE: upgrate the CAMERA version from 1.22.0 to 1.26.0 - - -**Version 2.1.4 - 18/04/2016** - -- TEST: refactoring to pass planemo test using conda dependencies - -**Version 2.1.3 - 10/02/2016** - -- BUGFIX: better management of errors. Datasets remained green although the process failed - -- BUGFIX: the conversion into minutes of the retention time was applied to the diffreport outputs (several conditions) - -- IMPROVEMENT: when there are several conditions, the tool will generate individual datasets (tsv, pdf) instead of a zip file. The usual png (eic, boxplot) will from now be integrated in two pdf. - -- UPDATE: refactoring of internal management of inputs/outputs - - -**VERSION 2.1.0 - 09/10/2015** - -- BUGFIX: There was a bug with the CAMERA.annotate (generating a bad dataMatrix (intensities which don't match with the metabolites)) - - -**VERSION 2.1.0 - 07/06/2015** - -- IMPROVEMENT: new datatype/dataset formats (rdata.camera.positive, rdata.camera.negative, rdata.camera.quick ...) will facilitate the sequence of tools and so avoid incompatibility errors. - -- IMPROVEMENT: parameter labels have changed to facilitate their reading. - -- UPDATE: merged with annotateDiffreport. Some parameters are dedicated to experiences with several conditions
--- a/abims_CAMERA_annotateDiffreport.xml Fri Jul 02 02:51:41 2021 +0000 +++ b/abims_CAMERA_annotateDiffreport.xml Mon Sep 11 22:40:34 2023 +0000 @@ -1,4 +1,4 @@ -<tool id="abims_CAMERA_annotateDiffreport" name="CAMERA.annotate" version="2.2.6+camera@TOOL_VERSION@-galaxy0"> +<tool id="abims_CAMERA_annotateDiffreport" name="CAMERA.annotate" version="2.2.6+camera@TOOL_VERSION@-galaxy@VERSION_SUFFIX@"> <description>CAMERA annotate function. Returns annotation results (isotope peaks, adducts and fragments) and a diffreport if more than one condition.</description> @@ -203,16 +203,15 @@ <discover_datasets pattern="__designation_and_ext__" directory="tabular" format="tabular" /> </collection> </outputs> - <tests> - <test> + <test expect_num_outputs="5"> <param name="image" value="faahKO-single-class.xset.merged.group.retcor.group.fillpeaks.RData"/> <expand macro="test_annotate_diffreport"/> <expand macro="test_annotate_quick_true"/> <expand macro="test_file_load_single"/> <output name="variableMetadata" file="faahKO.xset.group.retcor.group.fillPeaks.annotate.variableMetadata.tsv" lines_diff="2" /> </test> - <test> + <test expect_num_outputs="5"> <param name="image" value="faahKO-single-class.xset.merged.group.retcor.group.fillpeaks.RData"/> <expand macro="test_annotate_diffreport"/> <conditional name="quick_block">
--- a/lib.r Fri Jul 02 02:51:41 2021 +0000 +++ b/lib.r Mon Sep 11 22:40:34 2023 +0000 @@ -1,331 +1,353 @@ # lib.r -#@author G. Le Corguille +# @author G. Le Corguille # solve an issue with batch if arguments are logical TRUE/FALSE parseCommandArgs <- function(...) { - args <- batch::parseCommandArgs(...) - for (key in names(args)) { - if (args[key] %in% c("TRUE", "FALSE")) - args[key] <- as.logical(args[key]) + args <- batch::parseCommandArgs(...) + for (key in names(args)) { + if (args[key] %in% c("TRUE", "FALSE")) { + args[key] <- as.logical(args[key]) } - return(args) + } + return(args) } -#@author G. Le Corguille +# @author G. Le Corguille # This function will # - load the packages # - display the sessionInfo loadAndDisplayPackages <- function(pkgs) { - for (pkg in pkgs) suppressPackageStartupMessages(stopifnot(library(pkg, quietly = TRUE, logical.return = TRUE, character.only = TRUE))) + for (pkg in pkgs) suppressPackageStartupMessages(stopifnot(library(pkg, quietly = TRUE, logical.return = TRUE, character.only = TRUE))) - sessioninfo <- sessionInfo() - cat(sessioninfo$R.version$version.string, "\n") - cat("Main packages:\n") - for (pkg in names(sessioninfo$otherPkgs)) { - cat(paste(pkg, packageVersion(pkg)), "\t") - } - cat("\n") - cat("Other loaded packages:\n") - for (pkg in names(sessioninfo$loadedOnly)) { - cat(paste(pkg, packageVersion(pkg)), "\t") - } - cat("\n") + sessioninfo <- sessionInfo() + cat(sessioninfo$R.version$version.string, "\n") + cat("Main packages:\n") + for (pkg in names(sessioninfo$otherPkgs)) { + cat(paste(pkg, packageVersion(pkg)), "\t") + } + cat("\n") + cat("Other loaded packages:\n") + for (pkg in names(sessioninfo$loadedOnly)) { + cat(paste(pkg, packageVersion(pkg)), "\t") + } + cat("\n") } # This function retrieve a xset like object -#@author Gildas Le Corguille lecorguille@sb-roscoff.fr +# @author Gildas Le Corguille lecorguille@sb-roscoff.fr getxcmsSetObject <- function(xobject) { - # XCMS 1.x - if (class(xobject) == "xcmsSet") - return(xobject) - # XCMS 3.x - if (class(xobject) == "XCMSnExp") { - # Get the legacy xcmsSet object - suppressWarnings(xset <- as(xobject, "xcmsSet")) - if (is.null(xset@phenoData$sample_group)) - sampclass(xset) <- "." - else - sampclass(xset) <- xset@phenoData$sample_group - if (!is.null(xset@phenoData$sample_name)) - rownames(xset@phenoData) <- xset@phenoData$sample_name - return(xset) + # XCMS 1.x + if (class(xobject) == "xcmsSet") { + return(xobject) + } + # XCMS 3.x + if (class(xobject) == "XCMSnExp") { + # Get the legacy xcmsSet object + suppressWarnings(xset <- as(xobject, "xcmsSet")) + if (is.null(xset@phenoData$sample_group)) { + sampclass(xset) <- "." + } else { + sampclass(xset) <- xset@phenoData$sample_group } + if (!is.null(xset@phenoData$sample_name)) { + rownames(xset@phenoData) <- xset@phenoData$sample_name + } + return(xset) + } } -#@author G. Le Corguille -#The function create a pdf from the different png generated by diffreport +# @author G. Le Corguille +# The function create a pdf from the different png generated by diffreport diffreport_png2pdf <- function(filebase) { - dir.create("pdf") + dir.create("pdf") - pdfEicOutput <- paste0("pdf/", filebase, "-eic_pdf.pdf") - pdfBoxOutput <- paste0("pdf/", filebase, "-box_pdf.pdf") + pdfEicOutput <- paste0("pdf/", filebase, "-eic_pdf.pdf") + pdfBoxOutput <- paste0("pdf/", filebase, "-box_pdf.pdf") - system(paste0("gm convert ", filebase, "_eic/*.png ", pdfEicOutput)) - system(paste0("gm convert ", filebase, "_box/*.png ", pdfBoxOutput)) - + system(paste0("gm convert ", filebase, "_eic/*.png ", pdfEicOutput)) + system(paste0("gm convert ", filebase, "_box/*.png ", pdfBoxOutput)) } -#@author G. Le Corguille -#The function create a zip archive from the different png generated by diffreport +# @author G. Le Corguille +# The function create a zip archive from the different png generated by diffreport diffreport_png2zip <- function() { - zip("eic.zip", dir(pattern = "_eic"), zip = Sys.which("zip")) - zip("box.zip", dir(pattern = "_box"), zip = Sys.which("zip")) + zip("eic.zip", dir(pattern = "_eic"), zip = Sys.which("zip")) + zip("box.zip", dir(pattern = "_box"), zip = Sys.which("zip")) } -#The function create a zip archive from the different tabular generated by diffreport +# The function create a zip archive from the different tabular generated by diffreport diffreport_tabular2zip <- function() { - zip("tabular.zip", dir(pattern = "tabular/*"), zip = Sys.which("zip")) + zip("tabular.zip", dir(pattern = "tabular/*"), zip = Sys.which("zip")) } -#@author G. Le Corguille -#This function convert if it is required the Retention Time in minutes +# @author G. Le Corguille +# This function convert if it is required the Retention Time in minutes RTSecondToMinute <- function(variableMetadata, convertRTMinute) { - if (convertRTMinute) { - #converting the retention times (seconds) into minutes - print("converting the retention times into minutes in the variableMetadata") - variableMetadata[, "rt"] <- variableMetadata[, "rt"] / 60 - variableMetadata[, "rtmin"] <- variableMetadata[, "rtmin"] / 60 - variableMetadata[, "rtmax"] <- variableMetadata[, "rtmax"] / 60 - } - return(variableMetadata) + if (convertRTMinute) { + # converting the retention times (seconds) into minutes + print("converting the retention times into minutes in the variableMetadata") + variableMetadata[, "rt"] <- variableMetadata[, "rt"] / 60 + variableMetadata[, "rtmin"] <- variableMetadata[, "rtmin"] / 60 + variableMetadata[, "rtmax"] <- variableMetadata[, "rtmax"] / 60 + } + return(variableMetadata) } -#@author G. Le Corguille -#This function format ions identifiers +# @author G. Le Corguille +# This function format ions identifiers formatIonIdentifiers <- function(variableMetadata, numDigitsRT = 0, numDigitsMZ = 0) { - splitDeco <- strsplit(as.character(variableMetadata$name), "_") - idsDeco <- sapply(splitDeco, function(x) { - deco <- unlist(x)[2]; if (is.na(deco)) return("") else return(paste0("_", deco)) - }) - namecustom <- make.unique(paste0("M", round(variableMetadata[, "mz"], numDigitsMZ), "T", round(variableMetadata[, "rt"], numDigitsRT), idsDeco)) - variableMetadata <- cbind(name = variableMetadata$name, namecustom = namecustom, variableMetadata[, !(colnames(variableMetadata) %in% c("name"))]) - return(variableMetadata) + splitDeco <- strsplit(as.character(variableMetadata$name), "_") + idsDeco <- sapply(splitDeco, function(x) { + deco <- unlist(x)[2] + if (is.na(deco)) { + return("") + } else { + return(paste0("_", deco)) + } + }) + namecustom <- make.unique(paste0("M", round(variableMetadata[, "mz"], numDigitsMZ), "T", round(variableMetadata[, "rt"], numDigitsRT), idsDeco)) + variableMetadata <- cbind(name = variableMetadata$name, namecustom = namecustom, variableMetadata[, !(colnames(variableMetadata) %in% c("name"))]) + return(variableMetadata) } -#The function annotateDiffreport without the corr function which bugs +# The function annotateDiffreport without the corr function which bugs annotatediff <- function(xset = xset, args = args, variableMetadataOutput = "variableMetadata.tsv") { - # Resolve the bug with x11, with the function png - options(bitmapType = "cairo") + # Resolve the bug with x11, with the function png + options(bitmapType = "cairo") - #Check if the fillpeaks step has been done previously, if it hasn't, there is an error message and the execution is stopped. - res <- try(is.null(xset@filled)) + # Check if the fillpeaks step has been done previously, if it hasn't, there is an error message and the execution is stopped. + res <- try(is.null(xset@filled)) - # ------ annot ------- - args$calcCiS <- as.logical(args$calcCiS) - args$calcIso <- as.logical(args$calcIso) - args$calcCaS <- as.logical(args$calcCaS) + # ------ annot ------- + args$calcCiS <- as.logical(args$calcCiS) + args$calcIso <- as.logical(args$calcIso) + args$calcCaS <- as.logical(args$calcCaS) - # common parameters - args4annotate <- list(object = xset, - nSlaves = args$nSlaves, sigma = args$sigma, perfwhm = args$perfwhm, - maxcharge = args$maxcharge, maxiso = args$maxiso, minfrac = args$minfrac, - ppm = args$ppm, mzabs = args$mzabs, quick = args$quick, - polarity = args$polarity, max_peaks = args$max_peaks, intval = args$intval) + # common parameters + args4annotate <- list( + object = xset, + nSlaves = args$nSlaves, sigma = args$sigma, perfwhm = args$perfwhm, + maxcharge = args$maxcharge, maxiso = args$maxiso, minfrac = args$minfrac, + ppm = args$ppm, mzabs = args$mzabs, quick = args$quick, + polarity = args$polarity, max_peaks = args$max_peaks, intval = args$intval + ) - if (args$quick == FALSE) { - args4annotate <- append(args4annotate, - list(graphMethod = args$graphMethod, cor_eic_th = args$cor_eic_th, pval = args$pval, - calcCiS = args$calcCiS, calcIso = args$calcIso, calcCaS = args$calcCaS)) - # no ruleset - if (!is.null(args$multiplier)) { - args4annotate <- append(args4annotate, - list(multiplier = args$multiplier)) - } - # ruleset - else { - rulset <- read.table(args$rules, h = T, sep = ";") - if (ncol(rulset) < 4) rulset <- read.table(args$rules, h = T, sep = "\t") - if (ncol(rulset) < 4) rulset <- read.table(args$rules, h = T, sep = ",") - if (ncol(rulset) < 4) { - error_message <- "Your ruleset file seems not well formatted. The column separators accepted are ; , and tabulation" - print(error_message) - stop(error_message) - } + if (args$quick == FALSE) { + args4annotate <- append( + args4annotate, + list( + graphMethod = args$graphMethod, cor_eic_th = args$cor_eic_th, pval = args$pval, + calcCiS = args$calcCiS, calcIso = args$calcIso, calcCaS = args$calcCaS + ) + ) + # no ruleset + if (!is.null(args$multiplier)) { + args4annotate <- append( + args4annotate, + list(multiplier = args$multiplier) + ) + } else { # ruleset + rulset <- read.table(args$rules, h = TRUE, sep = ";") + if (ncol(rulset) < 4) rulset <- read.table(args$rules, h = TRUE, sep = "\t") + if (ncol(rulset) < 4) rulset <- read.table(args$rules, h = TRUE, sep = ",") + if (ncol(rulset) < 4) { + error_message <- "Your ruleset file seems not well formatted. The column separators accepted are ; , and tabulation" + print(error_message) + stop(error_message) + } - args4annotate <- append(args4annotate, - list(rules = rulset)) - } + args4annotate <- append( + args4annotate, + list(rules = rulset) + ) } + } - # launch annotate - xa <- do.call("annotate", args4annotate) - peakList <- getPeaklist(xa, intval = args$intval) - peakList <- cbind(groupnames(xa@xcmsSet), peakList); colnames(peakList)[1] <- c("name"); + # launch annotate + xa <- do.call("annotate", args4annotate) + peakList <- getPeaklist(xa, intval = args$intval) + peakList <- cbind(groupnames(xa@xcmsSet), peakList) + colnames(peakList)[1] <- c("name") - # --- Multi condition : diffreport --- - diffrepOri <- NULL - if (!is.null(args$runDiffreport) & nlevels(sampclass(xset)) >= 2) { - #Check if the fillpeaks step has been done previously, if it hasn't, there is an error message and the execution is stopped. - res <- try(is.null(xset@filled)) - classes <- levels(sampclass(xset)) - x <- 1:(length(classes) - 1) - for (i in seq(along = x)) { - y <- 1:(length(classes)) - for (n in seq(along = y)) { - if (i + n <= length(classes)) { - filebase <- paste(classes[i], class2 = classes[i + n], sep = "-vs-") + # --- Multi condition : diffreport --- + diffrepOri <- NULL + if (!is.null(args$runDiffreport) && nlevels(sampclass(xset)) >= 2) { + # Check if the fillpeaks step has been done previously, if it hasn't, there is an error message and the execution is stopped. + res <- try(is.null(xset@filled)) + classes <- levels(sampclass(xset)) + for (i in seq_len(length(classes) - 1)) { + for (n in seq_len(length(classes))) { + if (i + n <= length(classes)) { + filebase <- paste(classes[i], class2 = classes[i + n], sep = "-vs-") - diffrep <- diffreport( - object = xset, class1 = classes[i], class2 = classes[i + n], - filebase = filebase, eicmax = args$eicmax, eicwidth = args$eicwidth, - sortpval = TRUE, value = args$value, h = args$h, w = args$w, mzdec = args$mzdec, missing = 0) + diffrep <- diffreport( + object = xset, class1 = classes[i], class2 = classes[i + n], + filebase = filebase, eicmax = args$eicmax, eicwidth = args$eicwidth, + sortpval = TRUE, value = args$value, h = args$h, w = args$w, mzdec = args$mzdec, missing = 0 + ) - diffrepOri <- diffrep + diffrepOri <- diffrep - # renamming of the column rtmed to rt to fit with camera peaklist function output - colnames(diffrep)[colnames(diffrep) == "rtmed"] <- "rt" - colnames(diffrep)[colnames(diffrep) == "mzmed"] <- "mz" + # renamming of the column rtmed to rt to fit with camera peaklist function output + colnames(diffrep)[colnames(diffrep) == "rtmed"] <- "rt" + colnames(diffrep)[colnames(diffrep) == "mzmed"] <- "mz" - # combines results and reorder columns - diffrep <- merge(peakList, diffrep[, c("name", "fold", "tstat", "pvalue")], by.x = "name", by.y = "name", sort = F) - diffrep <- cbind(diffrep[, !(colnames(diffrep) %in% c(sampnames(xa@xcmsSet)))], diffrep[, (colnames(diffrep) %in% c(sampnames(xa@xcmsSet)))]) + # combines results and reorder columns + diffrep <- merge(peakList, diffrep[, c("name", "fold", "tstat", "pvalue")], by.x = "name", by.y = "name", sort = FALSE) + diffrep <- cbind(diffrep[, !(colnames(diffrep) %in% c(sampnames(xa@xcmsSet)))], diffrep[, (colnames(diffrep) %in% c(sampnames(xa@xcmsSet)))]) - diffrep <- RTSecondToMinute(diffrep, args$convertRTMinute) - diffrep <- formatIonIdentifiers(diffrep, numDigitsRT = args$numDigitsRT, numDigitsMZ = args$numDigitsMZ) + diffrep <- RTSecondToMinute(diffrep, args$convertRTMinute) + diffrep <- formatIonIdentifiers(diffrep, numDigitsRT = args$numDigitsRT, numDigitsMZ = args$numDigitsMZ) - if (args$sortpval) { - diffrep <- diffrep[order(diffrep$pvalue), ] - } + if (args$sortpval) { + diffrep <- diffrep[order(diffrep$pvalue), ] + } - dir.create("tabular", showWarnings = FALSE) - write.table(diffrep, sep = "\t", quote = FALSE, row.names = FALSE, file = paste("tabular/", filebase, "_tsv.tabular", sep = "")) + dir.create("tabular", showWarnings = FALSE) + write.table(diffrep, sep = "\t", quote = FALSE, row.names = FALSE, file = paste("tabular/", filebase, "_tsv.tabular", sep = "")) - if (args$eicmax != 0) { - if (args$png2 == "pdf") - diffreport_png2pdf(filebase) - if (args$png2 == "zip") - diffreport_png2zip() - } - } + if (args$eicmax != 0) { + if (args$png2 == "pdf") { + diffreport_png2pdf(filebase) } + if (args$png2 == "zip") { + diffreport_png2zip() + } + } } - if (args$tabular2 == "zip") - diffreport_tabular2zip() + } } + if (args$tabular2 == "zip") { + diffreport_tabular2zip() + } + } - # --- variableMetadata --- - variableMetadata <- peakList[, !(make.names(colnames(peakList)) %in% c(make.names(sampnames(xa@xcmsSet))))] - variableMetadata <- RTSecondToMinute(variableMetadata, args$convertRTMinute) - variableMetadata <- formatIonIdentifiers(variableMetadata, numDigitsRT = args$numDigitsRT, numDigitsMZ = args$numDigitsMZ) - # if we have 2 conditions, we keep stat of diffrep - if (!is.null(args$runDiffreport) & nlevels(sampclass(xset)) == 2) { - variableMetadata <- merge(variableMetadata, diffrep[, c("name", "fold", "tstat", "pvalue")], by.x = "name", by.y = "name", sort = F) - if (exists("args[[\"sortpval\"]]")) { - variableMetadata <- variableMetadata[order(variableMetadata$pvalue), ] - } + # --- variableMetadata --- + variableMetadata <- peakList[, !(make.names(colnames(peakList)) %in% c(make.names(sampnames(xa@xcmsSet))))] + variableMetadata <- RTSecondToMinute(variableMetadata, args$convertRTMinute) + variableMetadata <- formatIonIdentifiers(variableMetadata, numDigitsRT = args$numDigitsRT, numDigitsMZ = args$numDigitsMZ) + # if we have 2 conditions, we keep stat of diffrep + if (!is.null(args$runDiffreport) && nlevels(sampclass(xset)) == 2) { + variableMetadata <- merge(variableMetadata, diffrep[, c("name", "fold", "tstat", "pvalue")], by.x = "name", by.y = "name", sort = FALSE) + if (exists("args[[\"sortpval\"]]")) { + variableMetadata <- variableMetadata[order(variableMetadata$pvalue), ] } + } - variableMetadataOri <- variableMetadata - write.table(variableMetadata, sep = "\t", quote = FALSE, row.names = FALSE, file = variableMetadataOutput) + variableMetadataOri <- variableMetadata + write.table(variableMetadata, sep = "\t", quote = FALSE, row.names = FALSE, file = variableMetadataOutput) - return(list("xa" = xa, "diffrep" = diffrepOri, "variableMetadata" = variableMetadataOri)); - + return(list("xa" = xa, "diffrep" = diffrepOri, "variableMetadata" = variableMetadataOri)) } -combinexsAnnos_function <- function(xaP, xaN, diffrepP = NULL, diffrepN = NULL, - pos = TRUE, tol = 2, ruleset = NULL, keep_meta = TRUE, convertRTMinute = F, numDigitsMZ = 0, +combinexsAnnos_function <- function( + xaP, xaN, diffrepP = NULL, diffrepN = NULL, + pos = TRUE, tol = 2, ruleset = NULL, keep_meta = TRUE, convertRTMinute = FALSE, numDigitsMZ = 0, numDigitsRT = 0, variableMetadataOutput = "variableMetadata.tsv") { + # Load the two Rdata to extract the xset objects from positive and negative mode + cat("\tObject xset from positive mode\n") + print(xaP) + cat("\n") - #Load the two Rdata to extract the xset objects from positive and negative mode - cat("\tObject xset from positive mode\n") - print(xaP) - cat("\n") - - cat("\tObject xset from negative mode\n") - print(xaN) - cat("\n") + cat("\tObject xset from negative mode\n") + print(xaN) + cat("\n") - cat("\n") - cat("\tCombining...\n") - #Convert the string to numeric for creating matrix - row <- as.numeric(strsplit(ruleset, ",")[[1]][1]) - column <- as.numeric(strsplit(ruleset, ",")[[1]][2]) - ruleset <- cbind(row, column) - #Test if the file comes from an older version tool - if ((!is.null(xaP)) & (!is.null(xaN))) { - #Launch the combinexsannos function from CAMERA - cAnnot <- combinexsAnnos(xaP, xaN, pos = pos, tol = tol, ruleset = ruleset) - } else { - stop("You must relauch the CAMERA.annotate step with the lastest version.") - } + cat("\n") + cat("\tCombining...\n") + # Convert the string to numeric for creating matrix + row <- as.numeric(strsplit(ruleset, ",")[[1]][1]) + column <- as.numeric(strsplit(ruleset, ",")[[1]][2]) + ruleset <- cbind(row, column) + # Test if the file comes from an older version tool + if ((!is.null(xaP)) && (!is.null(xaN))) { + # Launch the combinexsannos function from CAMERA + cAnnot <- combinexsAnnos(xaP, xaN, pos = pos, tol = tol, ruleset = ruleset) + } else { + stop("You must relauch the CAMERA.annotate step with the lastest version.") + } - if (pos) { - xa <- xaP - mode <- "neg. Mode" - } else { - xa <- xaN - mode <- "pos. Mode" - } + if (pos) { + xa <- xaP + mode <- "neg. Mode" + } else { + xa <- xaN + mode <- "pos. Mode" + } - peakList <- getPeaklist(xa) - peakList <- cbind(groupnames(xa@xcmsSet), peakList); colnames(peakList)[1] <- c("name"); - variableMetadata <- cbind(peakList, cAnnot[, c("isotopes", "adduct", "pcgroup", mode)]); - variableMetadata <- variableMetadata[, !(colnames(variableMetadata) %in% c(sampnames(xa@xcmsSet)))] - - #Test if there are more than two classes (conditions) - if (nlevels(sampclass(xaP@xcmsSet)) == 2 & (!is.null(diffrepN)) & (!is.null(diffrepP))) { - diffrepP <- diffrepP[, c("name", "fold", "tstat", "pvalue")]; colnames(diffrepP) <- paste("P.", colnames(diffrepP), sep = "") - diffrepN <- diffrepN[, c("name", "fold", "tstat", "pvalue")]; colnames(diffrepN) <- paste("N.", colnames(diffrepN), sep = "") + peakList <- getPeaklist(xa) + peakList <- cbind(groupnames(xa@xcmsSet), peakList) + colnames(peakList)[1] <- c("name") + variableMetadata <- cbind(peakList, cAnnot[, c("isotopes", "adduct", "pcgroup", mode)]) + variableMetadata <- variableMetadata[, !(colnames(variableMetadata) %in% c(sampnames(xa@xcmsSet)))] - variableMetadata <- merge(variableMetadata, diffrepP, by.x = "name", by.y = "P.name") - variableMetadata <- merge(variableMetadata, diffrepN, by.x = "name", by.y = "N.name") - } + # Test if there are more than two classes (conditions) + if (nlevels(sampclass(xaP@xcmsSet)) == 2 && (!is.null(diffrepN)) && (!is.null(diffrepP))) { + diffrepP <- diffrepP[, c("name", "fold", "tstat", "pvalue")] + colnames(diffrepP) <- paste("P.", colnames(diffrepP), sep = "") + diffrepN <- diffrepN[, c("name", "fold", "tstat", "pvalue")] + colnames(diffrepN) <- paste("N.", colnames(diffrepN), sep = "") - rownames(variableMetadata) <- NULL - #TODO: checker colnames(variableMetadata)[1:2] = c("name", "mz/rt"); - - variableMetadata <- RTSecondToMinute(variableMetadata, convertRTMinute) - variableMetadata <- formatIonIdentifiers(variableMetadata, numDigitsRT = numDigitsRT, numDigitsMZ = numDigitsMZ) + variableMetadata <- merge(variableMetadata, diffrepP, by.x = "name", by.y = "P.name") + variableMetadata <- merge(variableMetadata, diffrepN, by.x = "name", by.y = "N.name") + } - #If the user want to keep only the metabolites which match a difference - if (keep_meta) { - variableMetadata <- variableMetadata[variableMetadata[, c(mode)] != "", ] - } + rownames(variableMetadata) <- NULL + # TODO: checker colnames(variableMetadata)[1:2] = c("name", "mz/rt"); + + variableMetadata <- RTSecondToMinute(variableMetadata, convertRTMinute) + variableMetadata <- formatIonIdentifiers(variableMetadata, numDigitsRT = numDigitsRT, numDigitsMZ = numDigitsMZ) - #Write the output into a tsv file - write.table(variableMetadata, sep = "\t", quote = FALSE, row.names = FALSE, file = variableMetadataOutput) - return(variableMetadata); + # If the user want to keep only the metabolites which match a difference + if (keep_meta) { + variableMetadata <- variableMetadata[variableMetadata[, c(mode)] != "", ] + } + # Write the output into a tsv file + write.table(variableMetadata, sep = "\t", quote = FALSE, row.names = FALSE, file = variableMetadataOutput) + return(variableMetadata) } # This function get the raw file path from the arguments getRawfilePathFromArguments <- function(singlefile, zipfile, args) { - if (!is.null(args$zipfile)) zipfile <- args$zipfile - if (!is.null(args$zipfilePositive)) zipfile <- args$zipfilePositive - if (!is.null(args$zipfileNegative)) zipfile <- args$zipfileNegative + if (!is.null(args$zipfile)) zipfile <- args$zipfile + if (!is.null(args$zipfilePositive)) zipfile <- args$zipfilePositive + if (!is.null(args$zipfileNegative)) zipfile <- args$zipfileNegative - if (!is.null(args$singlefile_galaxyPath)) { - singlefile_galaxyPaths <- args$singlefile_galaxyPath; - singlefile_sampleNames <- args$singlefile_sampleName - } - if (!is.null(args$singlefile_galaxyPathPositive)) { - singlefile_galaxyPaths <- args$singlefile_galaxyPathPositive; - singlefile_sampleNames <- args$singlefile_sampleNamePositive - } - if (!is.null(args$singlefile_galaxyPathNegative)) { - singlefile_galaxyPaths <- args$singlefile_galaxyPathNegative; - singlefile_sampleNames <- args$singlefile_sampleNameNegative + if (!is.null(args$singlefile_galaxyPath)) { + singlefile_galaxyPaths <- args$singlefile_galaxyPath + singlefile_sampleNames <- args$singlefile_sampleName + } + if (!is.null(args$singlefile_galaxyPathPositive)) { + singlefile_galaxyPaths <- args$singlefile_galaxyPathPositive + singlefile_sampleNames <- args$singlefile_sampleNamePositive + } + if (!is.null(args$singlefile_galaxyPathNegative)) { + singlefile_galaxyPaths <- args$singlefile_galaxyPathNegative + singlefile_sampleNames <- args$singlefile_sampleNameNegative + } + if (exists("singlefile_galaxyPaths")) { + singlefile_galaxyPaths <- unlist(strsplit(singlefile_galaxyPaths, ",")) + singlefile_sampleNames <- unlist(strsplit(singlefile_sampleNames, ",")) + + singlefile <- NULL + for (singlefile_galaxyPath_i in seq_len(length(singlefile_galaxyPaths))) { + singlefile_galaxyPath <- singlefile_galaxyPaths[singlefile_galaxyPath_i] + singlefile_sampleName <- singlefile_sampleNames[singlefile_galaxyPath_i] + singlefile[[singlefile_sampleName]] <- singlefile_galaxyPath } - if (exists("singlefile_galaxyPaths")) { - singlefile_galaxyPaths <- unlist(strsplit(singlefile_galaxyPaths, ",")) - singlefile_sampleNames <- unlist(strsplit(singlefile_sampleNames, ",")) - - singlefile <- NULL - for (singlefile_galaxyPath_i in seq_len(length(singlefile_galaxyPaths))) { - singlefile_galaxyPath <- singlefile_galaxyPaths[singlefile_galaxyPath_i] - singlefile_sampleName <- singlefile_sampleNames[singlefile_galaxyPath_i] - singlefile[[singlefile_sampleName]] <- singlefile_galaxyPath - } - } - for (argument in c("zipfile", "zipfilePositive", "zipfileNegative", - "singlefile_galaxyPath", "singlefile_sampleName", - "singlefile_galaxyPathPositive", "singlefile_sampleNamePositive", - "singlefile_galaxyPathNegative", "singlefile_sampleNameNegative")) { - args[[argument]] <- NULL - } - return(list(zipfile = zipfile, singlefile = singlefile, args = args)) + } + for (argument in c( + "zipfile", "zipfilePositive", "zipfileNegative", + "singlefile_galaxyPath", "singlefile_sampleName", + "singlefile_galaxyPathPositive", "singlefile_sampleNamePositive", + "singlefile_galaxyPathNegative", "singlefile_sampleNameNegative" + )) { + args[[argument]] <- NULL + } + return(list(zipfile = zipfile, singlefile = singlefile, args = args)) } @@ -333,38 +355,37 @@ # - if zipfile: unzip the file with its directory tree # - if singlefiles: set symlink with the good filename retrieveRawfileInTheWorkingDir <- function(singlefile, zipfile) { - if (!is.null(singlefile) && (length("singlefile") > 0)) { - for (singlefile_sampleName in names(singlefile)) { - singlefile_galaxyPath <- singlefile[[singlefile_sampleName]] - if (!file.exists(singlefile_galaxyPath)) { - error_message <- paste("Cannot access the sample:", singlefile_sampleName, "located:", singlefile_galaxyPath, ". Please, contact your administrator ... if you have one!") - print(error_message); stop(error_message) - } + if (!is.null(singlefile) && (length("singlefile") > 0)) { + for (singlefile_sampleName in names(singlefile)) { + singlefile_galaxyPath <- singlefile[[singlefile_sampleName]] + if (!file.exists(singlefile_galaxyPath)) { + error_message <- paste("Cannot access the sample:", singlefile_sampleName, "located:", singlefile_galaxyPath, ". Please, contact your administrator ... if you have one!") + print(error_message) + stop(error_message) + } - file.symlink(singlefile_galaxyPath, singlefile_sampleName) - } - directory <- "." - + file.symlink(singlefile_galaxyPath, singlefile_sampleName) } - if (!is.null(zipfile) && (zipfile != "")) { - if (!file.exists(zipfile)) { - error_message <- paste("Cannot access the Zip file:", zipfile, ". Please, contact your administrator ... if you have one!") - print(error_message) - stop(error_message) - } + directory <- "." + } + if (!is.null(zipfile) && (zipfile != "")) { + if (!file.exists(zipfile)) { + error_message <- paste("Cannot access the Zip file:", zipfile, ". Please, contact your administrator ... if you have one!") + print(error_message) + stop(error_message) + } - #unzip - suppressWarnings(unzip(zipfile, unzip = "unzip")) + # unzip + suppressWarnings(unzip(zipfile, unzip = "unzip")) - #get the directory name - filesInZip <- unzip(zipfile, list = T); - directories <- unique(unlist(lapply(strsplit(filesInZip$Name, "/"), function(x) x[1]))); - directories <- directories[!(directories %in% c("__MACOSX")) & file.info(directories)$isdir] - directory <- "." - if (length(directories) == 1) directory <- directories + # get the directory name + filesInZip <- unzip(zipfile, list = TRUE) + directories <- unique(unlist(lapply(strsplit(filesInZip$Name, "/"), function(x) x[1]))) + directories <- directories[!(directories %in% c("__MACOSX")) & file.info(directories)$isdir] + directory <- "." + if (length(directories) == 1) directory <- directories - cat("files_root_directory\t", directory, "\n") - - } - return(directory) + cat("files_root_directory\t", directory, "\n") + } + return(directory) }
--- a/macros.xml Fri Jul 02 02:51:41 2021 +0000 +++ b/macros.xml Mon Sep 11 22:40:34 2023 +0000 @@ -1,7 +1,7 @@ <?xml version="1.0"?> <macros> - <token name="@TOOL_VERSION@">1.48.0</token> + <token name="@VERSION_SUFFIX@">1</token> <xml name="requirements"> <requirements> <requirement type="package" version="0.4_3">r-snow</requirement> @@ -26,7 +26,7 @@ #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 ] ) + #set singlefile_sampleName = ','.join( [ str( $single_file.element_identifier ) 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'
--- a/repository_dependencies.xml Fri Jul 02 02:51:41 2021 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -<?xml version="1.0" ?> -<repositories> - <repository name="rdata_camera_datatypes" owner="lecorguille" toolshed="https://toolshed.g2.bx.psu.edu" changeset_revision="4a51ab3d8ecf"/> - <repository name="rdata_xcms_datatypes" owner="lecorguille" toolshed="https://toolshed.g2.bx.psu.edu" changeset_revision="544f6d2329ac"/> -</repositories> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/faahOK.xset.group.retcor.group.fillPeaks.annotate.positive.combinexsAnnos.variableMetadata.tsv Mon Sep 11 22:40:34 2023 +0000 @@ -0,0 +1,116 @@ +name namecustom mz mzmin mzmax rt rtmin rtmax npeaks KO WT isotopes adduct pcgroup isotopes.1 adduct.1 pcgroup.1 neg. Mode +M208T3291 M207.8T54.9 207.800003051758 207.800003051758 207.800003051758 54.8548661171705 54.8548661171705 54.8548661171705 1 1 0 2102 [M+H]+ 206.793 2102 Found [M+H]+/[M-H]- +M210T3110 M210.2T51.8 210.199996948242 210.199996948242 210.199996948242 51.8351814475023 51.8351814475023 51.8351814475023 1 1 0 5340 [M+H]+ 209.193 5340 Found [M+H]+/[M-H]- +M228T3846 M228.2T64.1 228.199996948242 228.199996948242 228.199996948242 64.1004477702677 64.0786131787182 64.1222823618172 2 1 1 [M+H-C6H8O6]+ 403.216 [M+2H-NH3]2+ 471.41 21 [M+H]+ 227.193 21 Found [M+H]+/[M-H]- +M235T3976 M234.9T66.3 234.900009155273 234.900009155273 234.900009155273 66.2671959497008 66.2671959497008 66.2671959497008 1 0 1 2000 [M+H]+ 233.893 2000 Found [M+H]+/[M-H]- +M236T3873 M236.2T64.5 236.199996948242 236.199996948242 236.199996948242 64.5417430278147 64.5417430278147 64.5417430278147 1 0 1 2733 [M+H]+ 235.193 2733 Found [M+H]+/[M-H]- +M238T2755 M238.2T45.9 238.199996948242 238.199996948242 238.199996948242 45.9108043388673 45.9108043388673 45.9108043388673 1 0 1 4595 [M+H]+ 237.193 4595 Found [M+H]+/[M-H]- +M239T4130 M239T68.8 239 239 239 68.8389740321595 68.8389740321595 68.8389740321595 1 0 1 1473 [M+H]+ 237.993 1473 Found [M+H]+/[M-H]- +M250T4052 M250.2T67.5 250.199996948242 250.199996948242 250.199996948242 67.5268251014762 67.5268251014762 67.5268251014762 1 1 0 77 [M+H]+ 249.193 77 Found [M+H]+/[M-H]- +M258T3448 M258.2T57.5 258.200012207031 258.200012207031 258.200012207031 57.4710855711383 57.4427244480407 57.4994466942358 2 1 1 2922 [M+H]+ 257.193 2922 Found [M+H]+/[M-H]- +M261T2686 M261.2T44.8 261.200012207031 261.200012207031 261.200012207031 44.7613459684195 44.7613459684195 44.7613459684195 1 0 1 640 [M+H]+ 260.193 640 Found [M+H]+/[M-H]- +M266T3323 M266.4T55.4 266.399993896484 266.399993896484 266.399993896484 55.3795249542604 55.3795249542604 55.3795249542604 1 0 1 16 [M+H]+ 265.393 16 Found [M+H]+/[M-H]- +M275T2920 M275.2T48.7 275.200012207031 275.200012207031 275.200012207031 48.671416116166 48.671416116166 48.671416116166 1 0 1 2868 [M+H]+ 274.193 2868 Found [M+H]+/[M-H]- +M276T3867_1 M275.9T64.4_1 275.899993896484 275.899993896484 275.899993896484 64.4483155999427 64.4483155999427 64.4483155999427 1 1 0 21 [M+H]+ 274.893 21 Found [M+H]+/[M-H]- +M276T2603 M276.2T43.4 276.200012207031 276.200012207031 276.200012207031 43.3808995766058 43.3808995766058 43.3808995766058 1 1 0 5243 [M+H]+ 275.193 5243 Found [M+H]+/[M-H]- +M284T3653 M284.1T60.9 284.100006103516 284.100006103516 284.100006103516 60.8809514467087 60.8809514467087 60.8809514467087 1 1 0 [M+H-CH3]+ 298.114 47 [M+H]+ 283.093 47 Found [M+H]+/[M-H]- +M287T4128 M287.1T68.8 287.100006103516 287.100006103516 287.100006103516 68.8074238019644 68.8074238019644 68.8074238019644 1 1 0 23 [M+H]+ 286.093 23 Found [M+H]+/[M-H]- +M304T3912 M304T65.2 304 304 304 65.195563930308 65.195563930308 65.195563930308 1 0 1 4817 [M+H]+ 302.993 4817 Found [M+H]+/[M-H]- +M304T2622 M304T43.7 304 304 304 43.697161463341 43.697161463341 43.697161463341 1 0 1 2642 [M+H]+ 302.993 2642 Found [M+H]+/[M-H]- +M310T3484 M310.2T58.1 310.200012207031 310.200012207031 310.200012207031 58.0652451156923 58.0652451156923 58.0652451156923 1 1 0 [M+H-H20]+ 327.208 31 [M+H]+ 309.193 31 Found [M+H]+/[M-H]- +M311T3667 M311.2T61.1 311.200012207031 311.200012207031 311.200012207031 61.1232252152794 61.1232252152794 61.1232252152794 1 1 0 [M+H]+ 310.189 2 [M+H]+ 310.189 2 Found [M+H]+/[M-H]- +M317T4122 M317T68.7 317 317 317 68.7029543960126 68.7029543960126 68.7029543960126 1 1 0 1716 [M+H]+ 315.993 1716 Found [M+H]+/[M-H]- +M319T3963 M319.3T66.1 319.300018310547 319.300018310547 319.300018310547 66.0540795330602 66.0540795330602 66.0540795330602 1 0 1 1982 [M+H]+ 318.293 1982 Found [M+H]+/[M-H]- +M326T3910 M326.3T65.2 326.300018310547 326.300018310547 326.300018310547 65.1694320732506 65.1694320732506 65.1694320732506 1 0 1 4822 [M+H]+ 325.293 4822 Found [M+H]+/[M-H]- +M329T3539 M329T59 329 329 329 58.976324193497 58.976324193497 58.976324193497 1 0 1 1952 [M+H]+ 327.993 1952 Found [M+H]+/[M-H]- +M330T3500 M330.2T58.3 330.200012207031 330.200012207031 330.200012207031 58.3366734462018 58.279218107523 58.3941287848805 2 1 1 [2M+Na+K]2+ 299.215 76 [M+H]+ 329.193 76 Found [M+H]+/[M-H]- +M333T3521 M333T58.7 333 333 333 58.6762856708046 58.6762856708046 58.6762856708046 1 0 1 368 [M+H]+ 331.993 368 Found [M+H]+/[M-H]- +M341T3309 M341.2T55.1 341.200012207031 341.200012207031 341.200012207031 55.1430121663691 55.1430121663691 55.1430121663691 1 0 1 4 [M+H]+ 340.193 4 Found [M+H]+/[M-H]- +M341T4172 M341.4T69.5 341.399993896484 341.399993896484 341.399993896484 69.5403852759756 69.5403852759756 69.5403852759756 1 1 0 4369 [M+H]+ 340.393 4369 Found [M+H]+/[M-H]- +M342T3038 M342.3T50.6 342.300018310547 342.300018310547 342.300018310547 50.6358552925949 50.6358552925949 50.6358552925949 1 0 1 3220 [M+H]+ 341.293 3220 Found [M+H]+/[M-H]- +M345T3788 M345T63.1 345 345 345 63.1344882463539 63.1344882463539 63.1344882463539 1 0 1 4445 [M+H]+ 343.993 4445 Found [M+H]+/[M-H]- +M348T3493 M348.2T58.2 348.200012207031 348.200012207031 348.200012207031 58.2199122659174 58.1464333812605 58.2666138953485 3 1 2 31 [M+H]+ 347.193 31 Found [M+H]+/[M-H]- +M349T4038 M348.9T67.3 348.899993896484 348.899993896484 348.899993896484 67.3077590567051 67.3077590567051 67.3077590567051 1 0 1 3765 [M+H]+ 347.893 3765 Found [M+H]+/[M-H]- +M350T3215 M350T53.6 350 350 350 53.5773282247933 53.5773282247933 53.5773282247933 1 1 0 4315 [M+H]+ 348.993 4315 Found [M+H]+/[M-H]- +M350T3484 M350.2T58.1 350.200012207031 350.200012207031 350.200012207031 58.0691763348732 58.0691763348732 58.0691763348732 1 0 1 [41][M]+ [M+Na]+ 327.208 31 [41][M]+ [M+H]+ 349.193 31 Found [M+H]+/[M-H]- +M354T4176 M354.3T69.6 354.300018310547 354.300018310547 354.300018310547 69.6081394901155 69.6081394901155 69.6081394901155 1 0 1 4388 [M+H]+ 353.293 4388 Found [M+H]+/[M-H]- +M361T3500 M361T58.3 361 361 361 58.3317289697945 58.3317289697945 58.3317289697945 1 1 0 3374 [M+H]+ 359.993 3374 Found [M+H]+/[M-H]- +M362T3394 M362.3T56.6 362.300018310547 362.300018310547 362.300018310547 56.5744464204614 56.5744464204614 56.5744464204614 1 0 1 502 [M+H]+ 361.293 502 Found [M+H]+/[M-H]- +M363T3890 M363T64.8 363 363 363 64.8295865475032 64.8295865475032 64.8295865475032 1 0 1 2235 [M+H]+ 361.993 2235 Found [M+H]+/[M-H]- +M369T4287 M369.1T71.4 369.100006103516 369.100006103516 369.100006103516 71.4477203793839 71.4477203793839 71.4477203793839 1 1 0 6094 [M+H]+ 368.093 6094 Found [M+H]+/[M-H]- +M371T4218 M371.3T70.3 371.300018310547 371.300018310547 371.300018310547 70.2994362565411 70.2994362565411 70.2994362565411 1 1 0 5327 [M+H]+ 370.293 5327 Found [M+H]+/[M-H]- +M372T4221 M372.3T70.4 372.300018310547 372.300018310547 372.300018310547 70.3555724833019 70.3555724833019 70.3555724833019 1 0 1 5985 [M+H]+ 371.293 5985 Found [M+H]+/[M-H]- +M375T2994 M375.2T49.9 375.200012207031 375.200012207031 375.200012207031 49.9011643160422 49.9011643160422 49.9011643160422 1 0 1 32 [M+H]+ 374.193 32 Found [M+H]+/[M-H]- +M378T3345 M377.9T55.7 377.899993896484 377.899993896484 377.899993896484 55.7479583772851 55.7479583772851 55.7479583772851 1 1 0 802 [M+H]+ 376.893 802 Found [M+H]+/[M-H]- +M396T4099 M396.3T68.3 396.300018310547 396.300018310547 396.300018310547 68.3110839411979 68.3110839411979 68.3110839411979 2 1 0 150 [M+H]+ 395.293 150 Found [M+H]+/[M-H]- +M399T3288 M399T54.8 399 399 399 54.7925197533959 54.7925197533959 54.7925197533959 1 0 1 2111 [M+H]+ 397.993 2111 Found [M+H]+/[M-H]- +M404T2691 M404.1T44.8 404.100006103516 404.100006103516 404.100006103516 44.8428547027469 44.8428547027469 44.8428547027469 1 0 1 [M+H-H20]+ 421.11 6 [M+H]+ 403.093 6 Found [M+H]+/[M-H]- +M406T3575 M406T59.6 406 406 406 59.5771690581316 59.5771690581316 59.5771690581316 1 0 1 1668 [M+H]+ 404.993 1668 Found [M+H]+/[M-H]- +M408T3956 M408.3T65.9 408.300018310547 408.300018310547 408.300018310547 65.9308188818822 65.9308188818822 65.9308188818822 1 1 0 5459 [M+H]+ 407.293 5459 Found [M+H]+/[M-H]- +M413T4059 M413T67.7 413 413 413 67.65694615063 67.65694615063 67.65694615063 1 0 1 4700 [M+H]+ 411.993 4700 Found [M+H]+/[M-H]- +M415T3626 M415.2T60.4 415.200012207031 415.200012207031 415.200012207031 60.4314954588001 60.4314954588001 60.4314954588001 1 1 0 26 [M+H]+ 414.193 26 Found [M+H]+/[M-H]- +M418T3317 M418.4T55.3 418.399993896484 418.399993896484 418.399993896484 55.281978863019 55.281978863019 55.281978863019 1 0 1 539 [M+H]+ 417.393 539 Found [M+H]+/[M-H]- +M420T4187 M420.4T69.8 420.399993896484 420.399993896484 420.399993896484 69.7759636871153 69.7759636871153 69.7759636871153 1 1 0 6064 [M+H]+ 419.393 6064 Found [M+H]+/[M-H]- +M424T3310 M424.4T55.2 424.399993896484 424.399993896484 424.399993896484 55.1692582034151 55.1692582034151 55.1692582034151 1 0 1 541 [M+H]+ 423.393 541 Found [M+H]+/[M-H]- +M440T4055 M440.3T67.6 440.300018310547 440.300018310547 440.300018310547 67.5889041135209 67.5725438039712 67.6052644230706 2 2 0 [M+H]+ 439.295 77 [M+H]+ 439.295 77 Found [M+H]+/[M-H]- +M441T4111 M441.1T68.5 441.100006103516 441.100006103516 441.100006103516 68.5236887576381 68.5236887576381 68.5236887576381 1 0 1 [M+K]+ 402.132 43 [M+H]+ 440.093 43 Found [M+H]+/[M-H]- +M441T4127_2 M441.1T68.8_2 441.100006103516 441.100006103516 441.100006103516 68.7816594215337 68.7816594215337 68.7816594215337 1 0 1 [M+Na]+ 418.1 23 [M+H]+ 440.093 23 Found [M+H]+/[M-H]- +M443T3159 M443T52.6 443 443 443 52.6419263083506 52.6419263083506 52.6419263083506 1 1 0 838 [M+H]+ 441.993 838 Found [M+H]+/[M-H]- +M445T4143 M444.9T69 444.899993896484 444.899993896484 444.899993896484 69.0492204926483 69.0492204926483 69.0492204926483 1 0 1 4236 [M+H]+ 443.893 4236 Found [M+H]+/[M-H]- +M446T2893 M446.2T48.2 446.200012207031 446.200012207031 446.200012207031 48.2097870775546 48.2097870775546 48.2097870775546 1 1 0 [M+Na]+ 423.211 95 [M+H]+ 445.193 95 Found [M+H]+/[M-H]- +M447T4144 M446.9T69.1 446.899993896484 446.899993896484 446.899993896484 69.0660535572266 69.0660535572266 69.0660535572266 1 0 1 5839 [M+H]+ 445.893 5839 Found [M+H]+/[M-H]- +M447T4119 M447.1T68.7 447.100006103516 447.100006103516 447.100006103516 68.6550448101035 68.6550448101035 68.6550448101035 1 0 1 120 [M+H]+ 446.093 120 Found [M+H]+/[M-H]- +M453T3745 M453.1T62.4 453.100006103516 453.100006103516 453.100006103516 62.4248546431982 62.4248546431982 62.4248546431982 1 1 0 [M+H]+ 452.1 14 [M+H]+ 452.1 14 Found [M+H]+/[M-H]- +M461T3139 M461.1T52.3 461.100006103516 461.100006103516 461.100006103516 52.3216964859304 52.3216964859304 52.3216964859304 1 0 1 [2M+Na+K-H]+ 200.089 67 [M+H]+ 460.093 67 Found [M+H]+/[M-H]- +M462T2597 M461.9T43.3 461.899993896484 461.899993896484 461.899993896484 43.2765662432725 43.2765662432725 43.2765662432725 1 1 0 2880 [M+H]+ 460.893 2880 Found [M+H]+/[M-H]- +M465T4110 M465.1T68.5 465.100006103516 465.100006103516 465.100006103516 68.4974193491718 68.4456488229912 68.4974193491718 3 0 2 [M+H-CO]+ 492.092 43 [M+H]+ 464.093 43 Found [M+H]+/[M-H]- +M469T4110 M469T68.5 469 469 469 68.4973340588448 68.4973340588448 68.4973340588448 1 0 1 43 [M+H]+ 467.993 43 Found [M+H]+/[M-H]- +M482T3312 M482.2T55.2 482.200012207031 482.200012207031 482.200012207031 55.1974320877231 55.1692582034151 55.3334338236129 3 1 2 4 [M+H]+ 481.193 4 Found [M+H]+/[M-H]- +M486T3726_2 M486T62.1_2 486 486 486 62.0950630281632 62.0578316825142 62.1322943738121 2 1 1 4683 [M+H]+ 484.993 4683 Found [M+H]+/[M-H]- +M486T3654 M486.1T60.9 486.100006103516 486.100006103516 486.100006103516 60.9050570460149 60.9050570460149 60.9050570460149 1 0 1 2410 [M+H]+ 485.093 2410 Found [M+H]+/[M-H]- +M493T2872 M493T47.9 493 493 493 47.8738616553085 47.8738616553085 47.8738616553085 1 0 1 4766 [M+H]+ 491.993 4766 Found [M+H]+/[M-H]- +M494T3069 M494.3T51.2 494.300018310547 494.300018310547 494.300018310547 51.1518080429633 51.1518080429633 51.1518080429633 1 1 0 48 [M+H]+ 493.293 48 Found [M+H]+/[M-H]- +M495T3465 M495T57.8 495 495 495 57.7519773435038 57.7519773435038 57.7519773435038 1 1 0 1283 [M+H]+ 493.993 1283 Found [M+H]+/[M-H]- +M518T3975 M518T66.3 518 518 518 66.2511083848454 66.2511083848454 66.2511083848454 1 1 0 2059 [M+H]+ 516.993 2059 Found [M+H]+/[M-H]- +M520T4132 M520.4T68.9 520.400024414062 520.400024414062 520.400024414062 68.85862190811 68.85862190811 68.85862190811 1 1 0 [M+H]+ 519.397 23 [M+H]+ 519.397 23 Found [M+H]+/[M-H]- +M522T2525 M522T42.1 522 522 522 42.0767662432725 42.0767662432725 42.0767662432725 1 1 0 [M+H]+ 520.991 5042 [M+H]+ 520.991 5042 Found [M+H]+/[M-H]- +M528T4044 M528.3T67.4 528.299987792969 528.299987792969 528.299987792969 67.3942464348878 67.3942464348878 67.3942464348878 1 0 1 106 [M+H]+ 527.293 106 Found [M+H]+/[M-H]- +M534T2893_1 M534T48.2_1 534 534 534 48.2239900144358 48.2239900144358 48.2239900144358 1 0 1 95 [M+H]+ 532.993 95 Found [M+H]+/[M-H]- +M534T3169 M534.3T52.8 534.299987792969 534.299987792969 534.299987792969 52.820858081241 52.820858081241 52.820858081241 1 1 0 791 [M+H]+ 533.293 791 Found [M+H]+/[M-H]- +M539T2671 M538.9T44.5 538.900024414062 538.900024414062 538.900024414062 44.5168831358622 44.5168831358622 44.5168831358622 1 1 0 4057 [M+H]+ 537.893 4057 Found [M+H]+/[M-H]- +M541T2916 M541.2T48.6 541.200012207031 541.200012207031 541.200012207031 48.5994804250865 48.5994804250865 48.5994804250865 1 1 0 56 [M+H]+ 540.193 56 Found [M+H]+/[M-H]- +M542T4146 M542.5T69.1 542.5 542.5 542.5 69.0919049656436 69.0919049656436 69.0919049656436 1 0 1 219 [M+H]+ 541.493 219 Found [M+H]+/[M-H]- +M545T3858 M545T64.3 545 545 545 64.2965273024001 64.2965273024001 64.2965273024001 1 1 0 1418 [M+H]+ 543.993 1418 Found [M+H]+/[M-H]- +M546T3196 M546.2T53.3 546.200012207031 546.200012207031 546.200012207031 53.2672162474893 53.2335336651218 53.3008988298567 2 1 1 [M+H]+ 545.2 30 [M+H]+ 545.2 30 Found [M+H]+/[M-H]- +M546T3373 M546.3T56.2 546.299987792969 546.299987792969 546.299987792969 56.2084220817844 56.2084220817844 56.2084220817844 1 0 1 1591 [M+H]+ 545.293 1591 Found [M+H]+/[M-H]- +M547T2882 M546.9T48 546.900024414062 546.900024414062 546.900024414062 48.0254466269442 48.0254466269442 48.0254466269442 1 1 0 131 [M+H]+ 545.893 131 Found [M+H]+/[M-H]- +M547T2930 M546.9T48.8 546.900024414062 546.900024414062 546.900024414062 48.8327454465577 48.8327454465577 48.8327454465577 1 0 1 3632 [M+H]+ 545.893 3632 Found [M+H]+/[M-H]- +M548T4180_2 M548.1T69.7_2 548.100036621094 548.100036621094 548.100036621094 69.6686714714612 69.6686714714612 69.6686714714612 1 1 0 6024 [M+H]+ 547.093 6024 Found [M+H]+/[M-H]- +M551T3507 M551.1T58.5 551.100036621094 551.100036621094 551.100036621094 58.452956891696 58.452956891696 58.452956891696 1 1 0 76 [M+H]+ 550.093 76 Found [M+H]+/[M-H]- +M552T3631 M552.3T60.5 552.299987792969 552.299987792969 552.299987792969 60.5122878429917 60.5122878429917 60.5122878429917 1 0 1 2359 [M+H]+ 551.293 2359 Found [M+H]+/[M-H]- +M552T3836 M552.4T63.9 552.400024414062 552.400024414062 552.400024414062 63.9252990982341 63.9252990982341 63.9252990982341 1 0 1 3360 [M+H]+ 551.393 3360 Found [M+H]+/[M-H]- +M552T2806 M552.5T46.8 552.5 552.5 552.5 46.7628430062386 46.7628430062386 46.7628430062386 1 0 1 154 [M+H]+ 551.493 154 Found [M+H]+/[M-H]- +M555T2628 M554.8T43.8 554.799987792969 554.799987792969 554.799987792969 43.800633744761 43.800633744761 43.800633744761 1 1 0 2677 [M+H]+ 553.793 2677 Found [M+H]+/[M-H]- +M560T3524 M560.1T58.7 560.100036621094 560.100036621094 560.100036621094 58.7409233247563 58.7409233247563 58.7409233247563 1 1 0 363 [M+H]+ 559.093 363 Found [M+H]+/[M-H]- +M561T3500 M560.9T58.3 560.900024414062 560.900024414062 560.900024414062 58.3265122292451 58.3265122292451 58.3265122292451 1 0 1 3396 [M+H]+ 559.893 3396 Found [M+H]+/[M-H]- +M566T2712 M566T45.2 566 566 566 45.2077855778326 45.2077855778326 45.2077855778326 1 1 0 2531 [M+H]+ 564.993 2531 Found [M+H]+/[M-H]- +M567T2630 M566.8T43.8 566.799987792969 566.799987792969 566.799987792969 43.8272182117096 43.8272182117096 43.8272182117096 1 1 0 2685 [M+H]+ 565.793 2685 Found [M+H]+/[M-H]- +M570T3689 M570.5T61.5 570.5 570.5 570.5 61.4882293714724 61.4882293714724 61.4882293714724 1 0 1 617 [M+H]+ 569.493 617 Found [M+H]+/[M-H]- +M572T2893 M571.6T48.2 571.600036621094 571.600036621094 571.600036621094 48.2097870775546 48.2097870775546 48.2097870775546 1 1 0 95 [M+H]+ 570.593 95 Found [M+H]+/[M-H]- +M574T2913 M573.7T48.5 573.700012207031 573.700012207031 573.700012207031 48.5481814919484 48.5481814919484 48.5481814919484 1 1 0 [M+H]+ 572.692 56 [M+H]+ 572.692 56 Found [M+H]+/[M-H]- +M575T2527 M574.7T42.1 574.700012207031 574.700012207031 574.700012207031 42.1194514146668 42.1194514146668 42.1194514146668 1 0 1 5962 [M+H]+ 573.693 5962 Found [M+H]+/[M-H]- +M578T2852 M578.3T47.5 578.299987792969 578.299987792969 578.299987792969 47.5401992175178 47.4984694680838 47.5819289669518 2 1 1 111 [M+H]+ 577.293 111 Found [M+H]+/[M-H]- +M578T3834 M578.4T63.9 578.400024414062 578.400024414062 578.400024414062 63.903380773541 63.903380773541 63.903380773541 1 1 0 3346 [M+H]+ 577.393 3346 Found [M+H]+/[M-H]- +M580T3296 M579.5T54.9 579.5 579.5 579.5 54.9340092491062 54.9340092491062 54.9340092491062 1 1 0 2610 [M+H]+ 578.493 2610 Found [M+H]+/[M-H]- +M582T3848_2 M582.5T64.1_2 582.5 582.5 582.5 64.1317421799532 64.1317421799532 64.1317421799532 1 1 0 [M+H]+ 581.493 21 [M+H]+ 581.493 21 Found [M+H]+/[M-H]- +M583T3496 M583T58.3 583 583 583 58.2713130322852 58.2713130322852 58.2713130322852 1 1 0 3516 [M+H]+ 581.993 3516 Found [M+H]+/[M-H]- +M583T2581 M583.4T43 583.400024414062 583.400024414062 583.400024414062 43.0206214460137 43.0206214460137 43.0206214460137 1 1 0 5692 [M+H]+ 582.393 5692 Found [M+H]+/[M-H]- +M584T2539 M584.4T42.3 584.400024414062 584.400024414062 584.400024414062 42.3115162432725 42.3115162432725 42.3115162432725 1 1 0 5558 [M+H]+ 583.393 5558 Found [M+H]+/[M-H]- +M586T2762 M585.9T46 585.900024414062 585.900024414062 585.900024414062 46.0265819700675 46.0265819700675 46.0265819700675 1 1 0 94 [M+H]+ 584.893 94 Found [M+H]+/[M-H]- +M592T4176 M591.5T69.6 591.5 591.5 591.5 69.5927325930257 69.5927325930257 69.5927325930257 1 1 0 115 [M+H]+ 590.493 115 Found [M+H]+/[M-H]- +M593T3448 M593.3T57.5 593.299987792969 593.299987792969 593.299987792969 57.4737949279535 57.4737949279535 57.4737949279535 1 0 1 2939 [M+H]+ 592.293 2939 Found [M+H]+/[M-H]- +M596T4172 M596.1T69.5 596.100036621094 596.100036621094 596.100036621094 69.5403852759756 69.5403852759756 69.5403852759756 1 1 0 4425 [M+H]+ 595.093 4425 Found [M+H]+/[M-H]- +M597T2724 M596.8T45.4 596.799987792969 596.799987792969 596.799987792969 45.3955462015806 45.3955462015806 45.3955462015806 1 0 1 2540 [M+H]+ 595.793 2540 Found [M+H]+/[M-H]- +M598T2738 M597.8T45.6 597.799987792969 597.799987792969 597.799987792969 45.628120700158 45.628120700158 45.628120700158 1 0 1 4444 [M+H]+ 596.793 4444 Found [M+H]+/[M-H]- +M598T3811 M598.3T63.5 598.299987792969 598.299987792969 598.299987792969 63.5166230732481 63.5166230732481 63.5166230732481 1 1 0 46 [M+H]+ 597.293 46 Found [M+H]+/[M-H]- +M598T3177 M598.5T52.9 598.5 598.5 598.5 52.947766074638 52.947766074638 52.947766074638 1 1 0 801 [M+H]+ 597.493 801 Found [M+H]+/[M-H]-