Mercurial > repos > lecorguille > xcms_fillpeaks
comparison lib.r @ 38:a3e80894efd3 draft
planemo upload for repository https://github.com/workflow4metabolomics/xcms commit e131bacd37bfaf2c4132fd214c81db9b8a9df513
| author | lecorguille |
|---|---|
| date | Mon, 17 Sep 2018 08:46:47 -0400 |
| parents | 9eefb022a189 |
| children | beebef001d7d |
comparison
equal
deleted
inserted
replaced
| 37:9eefb022a189 | 38:a3e80894efd3 |
|---|---|
| 132 variableMetadata <- cbind(name=variableMetadata$name, namecustom=namecustom, variableMetadata[,!(colnames(variableMetadata) %in% c("name"))]) | 132 variableMetadata <- cbind(name=variableMetadata$name, namecustom=namecustom, variableMetadata[,!(colnames(variableMetadata) %in% c("name"))]) |
| 133 return(variableMetadata) | 133 return(variableMetadata) |
| 134 } | 134 } |
| 135 | 135 |
| 136 #@author G. Le Corguille | 136 #@author G. Le Corguille |
| 137 # This function convert the remain NA to 0 in the dataMatrix | |
| 138 naTOzeroDataMatrix <- function(dataMatrix, naTOzero) { | |
| 139 if (naTOzero){ | |
| 140 dataMatrix[is.na(dataMatrix)] <- 0 | |
| 141 } | |
| 142 return (dataMatrix) | |
| 143 } | |
| 144 | |
| 145 #@author G. Le Corguille | |
| 137 # Draw the plotChromPeakDensity 3 per page in a pdf file | 146 # Draw the plotChromPeakDensity 3 per page in a pdf file |
| 138 getPlotChromPeakDensity <- function(xdata, mzdigit=4) { | 147 getPlotChromPeakDensity <- function(xdata, mzdigit=4) { |
| 139 pdf(file="plotChromPeakDensity.pdf", width=16, height=12) | 148 pdf(file="plotChromPeakDensity.pdf", width=16, height=12) |
| 140 | 149 |
| 141 par(mfrow = c(3, 1), mar = c(4, 4, 1, 0.5)) | 150 par(mfrow = c(3, 1), mar = c(4, 4, 1, 0.5)) |
| 175 dev.off() | 184 dev.off() |
| 176 } | 185 } |
| 177 | 186 |
| 178 #@author G. Le Corguille | 187 #@author G. Le Corguille |
| 179 # value: intensity values to be used into, maxo or intb | 188 # value: intensity values to be used into, maxo or intb |
| 180 getPeaklistW4M <- function(xdata, intval="into", convertRTMinute=F, numDigitsMZ=4, numDigitsRT=0, variableMetadataOutput, dataMatrixOutput) { | 189 getPeaklistW4M <- function(xdata, intval="into", convertRTMinute=F, numDigitsMZ=4, numDigitsRT=0, naTOzero=T, variableMetadataOutput, dataMatrixOutput) { |
| 181 dataMatrix <- featureValues(xdata, method="medret", value=intval) | 190 dataMatrix <- featureValues(xdata, method="medret", value=intval) |
| 182 colnames(dataMatrix) <- tools::file_path_sans_ext(colnames(dataMatrix)) | 191 colnames(dataMatrix) <- tools::file_path_sans_ext(colnames(dataMatrix)) |
| 183 dataMatrix = cbind(name=groupnamesW4M(xdata), dataMatrix) | 192 dataMatrix = cbind(name=groupnamesW4M(xdata), dataMatrix) |
| 184 variableMetadata <- featureDefinitions(xdata) | 193 variableMetadata <- featureDefinitions(xdata) |
| 185 colnames(variableMetadata)[1] = "mz"; colnames(variableMetadata)[4] = "rt" | 194 colnames(variableMetadata)[1] = "mz"; colnames(variableMetadata)[4] = "rt" |
| 186 variableMetadata = data.frame(name=groupnamesW4M(xdata), variableMetadata) | 195 variableMetadata = data.frame(name=groupnamesW4M(xdata), variableMetadata) |
| 187 | 196 |
| 188 variableMetadata <- RTSecondToMinute(variableMetadata, convertRTMinute) | 197 variableMetadata <- RTSecondToMinute(variableMetadata, convertRTMinute) |
| 189 variableMetadata <- formatIonIdentifiers(variableMetadata, numDigitsRT=numDigitsRT, numDigitsMZ=numDigitsMZ) | 198 variableMetadata <- formatIonIdentifiers(variableMetadata, numDigitsRT=numDigitsRT, numDigitsMZ=numDigitsMZ) |
| 199 dataMatrix <- naTOzeroDataMatrix(dataMatrix, naTOzero) | |
| 190 | 200 |
| 191 write.table(variableMetadata, file=variableMetadataOutput,sep="\t",quote=F,row.names=F) | 201 write.table(variableMetadata, file=variableMetadataOutput,sep="\t",quote=F,row.names=F) |
| 192 write.table(dataMatrix, file=dataMatrixOutput,sep="\t",quote=F,row.names=F) | 202 write.table(dataMatrix, file=dataMatrixOutput,sep="\t",quote=F,row.names=F) |
| 193 | 203 |
| 194 } | 204 } |
| 496 else | 506 else |
| 497 sampclass(xset) <- "." | 507 sampclass(xset) <- "." |
| 498 return (xset) | 508 return (xset) |
| 499 } | 509 } |
| 500 } | 510 } |
| 501 | |
| 502 | |
| 503 #@TODO: remove this function as soon as we can use xcms 3.x.x from Bioconductor 3.7 | |
| 504 # https://github.com/sneumann/xcms/issues/250 | |
| 505 groupnamesW4M <- function(xdata, mzdec = 0, rtdec = 0) { | |
| 506 mzfmt <- paste("%.", mzdec, "f", sep = "") | |
| 507 rtfmt <- paste("%.", rtdec, "f", sep = "") | |
| 508 | |
| 509 gnames <- paste("M", sprintf(mzfmt, featureDefinitions(xdata)[,"mzmed"]), "T", | |
| 510 sprintf(rtfmt, featureDefinitions(xdata)[,"rtmed"]), sep = "") | |
| 511 | |
| 512 if (any(dup <- duplicated(gnames))) | |
| 513 for (dupname in unique(gnames[dup])) { | |
| 514 dupidx <- which(gnames == dupname) | |
| 515 gnames[dupidx] <- paste(gnames[dupidx], seq(along = dupidx), sep = "_") | |
| 516 } | |
| 517 | |
| 518 return (gnames) | |
| 519 } | |
| 520 | |
| 521 #@TODO: remove this function as soon as we can use xcms 3.x.x from Bioconductor 3.7 | |
| 522 # https://github.com/sneumann/xcms/issues/247 | |
| 523 .concatenate_XCMSnExp <- function(...) { | |
| 524 x <- list(...) | |
| 525 if (length(x) == 0) | |
| 526 return(NULL) | |
| 527 if (length(x) == 1) | |
| 528 return(x[[1]]) | |
| 529 ## Check that all are XCMSnExp objects. | |
| 530 if (!all(unlist(lapply(x, function(z) is(z, "XCMSnExp"))))) | |
| 531 stop("All passed objects should be 'XCMSnExp' objects") | |
| 532 new_x <- as(.concatenate_OnDiskMSnExp(...), "XCMSnExp") | |
| 533 ## If any of the XCMSnExp has alignment results or detected features drop | |
| 534 ## them! | |
| 535 x <- lapply(x, function(z) { | |
| 536 if (hasAdjustedRtime(z)) { | |
| 537 z <- dropAdjustedRtime(z) | |
| 538 warning("Adjusted retention times found, had to drop them.") | |
| 539 } | |
| 540 if (hasFeatures(z)) { | |
| 541 z <- dropFeatureDefinitions(z) | |
| 542 warning("Feature definitions found, had to drop them.") | |
| 543 } | |
| 544 z | |
| 545 }) | |
| 546 ## Combine peaks | |
| 547 fls <- lapply(x, fileNames) | |
| 548 startidx <- cumsum(lengths(fls)) | |
| 549 pks <- lapply(x, chromPeaks) | |
| 550 procH <- lapply(x, processHistory) | |
| 551 for (i in 2:length(fls)) { | |
| 552 pks[[i]][, "sample"] <- pks[[i]][, "sample"] + startidx[i - 1] | |
| 553 procH[[i]] <- lapply(procH[[i]], function(z) { | |
| 554 z@fileIndex <- as.integer(z@fileIndex + startidx[i - 1]) | |
| 555 z | |
| 556 }) | |
| 557 } | |
| 558 pks <- do.call(rbind, pks) | |
| 559 new_x@.processHistory <- unlist(procH) | |
| 560 chromPeaks(new_x) <- pks | |
| 561 if (validObject(new_x)) | |
| 562 new_x | |
| 563 } | |
| 564 | |
| 565 #@TODO: remove this function as soon as we can use xcms 3.x.x from Bioconductor 3.7 | |
| 566 # https://github.com/sneumann/xcms/issues/247 | |
| 567 .concatenate_OnDiskMSnExp <- function(...) { | |
| 568 x <- list(...) | |
| 569 if (length(x) == 0) | |
| 570 return(NULL) | |
| 571 if (length(x) == 1) | |
| 572 return(x[[1]]) | |
| 573 ## Check that all are XCMSnExp objects. | |
| 574 if (!all(unlist(lapply(x, function(z) is(z, "OnDiskMSnExp"))))) | |
| 575 stop("All passed objects should be 'OnDiskMSnExp' objects") | |
| 576 ## Check processingQueue | |
| 577 procQ <- lapply(x, function(z) z@spectraProcessingQueue) | |
| 578 new_procQ <- procQ[[1]] | |
| 579 is_ok <- unlist(lapply(procQ, function(z) | |
| 580 !is.character(all.equal(new_procQ, z)) | |
| 581 )) | |
| 582 if (any(!is_ok)) { | |
| 583 warning("Processing queues from the submitted objects differ! ", | |
| 584 "Dropping the processing queue.") | |
| 585 new_procQ <- list() | |
| 586 } | |
| 587 ## processingData | |
| 588 fls <- lapply(x, function(z) z@processingData@files) | |
| 589 startidx <- cumsum(lengths(fls)) | |
| 590 ## featureData | |
| 591 featd <- lapply(x, fData) | |
| 592 ## Have to update the file index and the spectrum names. | |
| 593 for (i in 2:length(featd)) { | |
| 594 featd[[i]]$fileIdx <- featd[[i]]$fileIdx + startidx[i - 1] | |
| 595 rownames(featd[[i]]) <- MSnbase:::formatFileSpectrumNames( | |
| 596 fileIds = featd[[i]]$fileIdx, | |
| 597 spectrumIds = featd[[i]]$spIdx, | |
| 598 nSpectra = nrow(featd[[i]]), | |
| 599 nFiles = length(unlist(fls)) | |
| 600 ) | |
| 601 } | |
| 602 featd <- do.call(rbind, featd) | |
| 603 featd$spectrum <- 1:nrow(featd) | |
| 604 ## experimentData | |
| 605 expdata <- lapply(x, function(z) { | |
| 606 ed <- z@experimentData | |
| 607 data.frame(instrumentManufacturer = ed@instrumentManufacturer, | |
| 608 instrumentModel = ed@instrumentModel, | |
| 609 ionSource = ed@ionSource, | |
| 610 analyser = ed@analyser, | |
| 611 detectorType = ed@detectorType, | |
| 612 stringsAsFactors = FALSE) | |
| 613 }) | |
| 614 expdata <- do.call(rbind, expdata) | |
| 615 expdata <- new("MIAPE", | |
| 616 instrumentManufacturer = expdata$instrumentManufacturer, | |
| 617 instrumentModel = expdata$instrumentModel, | |
| 618 ionSource = expdata$ionSource, | |
| 619 analyser = expdata$analyser, | |
| 620 detectorType = expdata$detectorType) | |
| 621 | |
| 622 ## protocolData | |
| 623 protodata <- lapply(x, function(z) z@protocolData) | |
| 624 if (any(unlist(lapply(protodata, nrow)) > 0)) | |
| 625 warning("Found non-empty protocol data, but merging protocol data is", | |
| 626 " currently not supported. Skipped.") | |
| 627 ## phenoData | |
| 628 pdata <- do.call(rbind, lapply(x, pData)) | |
| 629 res <- new( | |
| 630 "OnDiskMSnExp", | |
| 631 phenoData = new("NAnnotatedDataFrame", data = pdata), | |
| 632 featureData = new("AnnotatedDataFrame", featd), | |
| 633 processingData = new("MSnProcess", | |
| 634 processing = paste0("Concatenated [", date(), "]"), | |
| 635 files = unlist(fls), smoothed = NA), | |
| 636 experimentData = expdata, | |
| 637 spectraProcessingQueue = new_procQ) | |
| 638 if (validObject(res)) | |
| 639 res | |
| 640 } | |
| 641 | |
| 642 #@TODO: remove this function as soon as we can use xcms 3.x.x from Bioconductor 3.7 | |
| 643 # https://github.com/sneumann/xcms/issues/247 | |
| 644 c.XCMSnExp <- function(...) { | |
| 645 .concatenate_XCMSnExp(...) | |
| 646 } | |
| 647 | |
| 648 #@TODO: remove this function as soon as we can use xcms 3.x.x from Bioconductor 3.7 | |
| 649 # https://github.com/sneumann/xcms/issues/247 | |
| 650 c.MSnbase <- function(...) { | |
| 651 .concatenate_OnDiskMSnExp(...) | |
| 652 } |
