Skip to content

Commit

Permalink
fix: ensure MS level is of type integer in Chromatogram
Browse files Browse the repository at this point in the history
- Ensure MS levels are converted to integer when Chromatogram is extracted from
  a `MsExperiment` or `XcmsExperiment`.
  • Loading branch information
jorainer committed Dec 1, 2023
1 parent 4190035 commit ba10535
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 5 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/check-bioc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:
fail-fast: false
matrix:
config:
- { os: ubuntu-latest, r: 'devel', bioc: 'devel', cont: "bioconductor/bioconductor_docker:devel", rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest" }
- { os: ubuntu-latest, r: '4.3', bioc: '3.18', cont: "bioconductor/bioconductor_docker:RELEASE_3_18", rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest" }
- { os: macOS-latest, r: '4.3', bioc: '3.18'}
- { os: windows-latest, r: '4.3', bioc: '3.18'}
env:
Expand Down
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Package: xcms
Version: 4.0.0
Version: 4.0.1
Title: LC-MS and GC-MS Data Analysis
Description: Framework for processing and visualization of chromatographically
separated and single-spectra mass spectral data. Imports from AIA/ANDI NetCDF,
Expand Down
6 changes: 3 additions & 3 deletions R/XcmsExperiment.R
Original file line number Diff line number Diff line change
Expand Up @@ -839,7 +839,7 @@ setMethod(
chunkSize = chunkSize, BPPARAM = BPPARAM)
}
## Assign/define peak IDs.
pkd <- data.frame(ms_level = rep(msLevel, nrow(res)),
pkd <- data.frame(ms_level = rep(as.integer(msLevel), nrow(res)),
is_filled = rep(FALSE, nrow(res)))
ph <- XProcessHistory(param = param,
type. = .PROCSTEP.PEAK.DETECTION,
Expand Down Expand Up @@ -1535,7 +1535,7 @@ setMethod(
stop("No chromatographic peaks present. ",
"Please run 'findChromPeaks' first.")
res <- .manual_feature_definitions(chromPeaks(object), peakIdx)
res$ms_level <- msLevel
res$ms_level <- as.integer(msLevel)
if (hasFeatures(object)) {
maxi <- max(as.integer(
sub("FT", "", rownames(featureDefinitions(object)))))
Expand Down Expand Up @@ -1821,7 +1821,7 @@ setMethod(
nr <- nrow(res)
maxi <- max(as.integer(sub("CP", "", rownames(chromPeaks(object)))))
rownames(res) <- .featureIDs(nr, "CP", maxi + 1)
cpd <- data.frame(ms_level = rep(msLevel, nr),
cpd <- data.frame(ms_level = rep(as.integer(msLevel), nr),
is_filled = rep(TRUE, nr))
rownames(cpd) <- rownames(res)
object@chromPeaks <- rbind(object@chromPeaks, res)
Expand Down
1 change: 1 addition & 0 deletions R/functions-utils.R
Original file line number Diff line number Diff line change
Expand Up @@ -816,6 +816,7 @@ groupOverlaps <- function(xmin, xmax) {
pks_tmz = rep(1L, nrow(pks)),
aggregationFun = "sum") {
nr <- nrow(pks)
pks_msl <- as.integer(pks_msl)
FUN <- switch(aggregationFun,
"sum" = getFunction("sumi"),
"max" = getFunction("maxi"),
Expand Down
7 changes: 7 additions & 0 deletions inst/NEWS
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
Changes in version 4.0.1
----------------------

- Ensure MS levels are always provided as integer to `Chromatogram` objects when
extracted from `XcmsExperiment` or `MsExperiment`.


Changes in version 3.99.6
----------------------

Expand Down
4 changes: 4 additions & 0 deletions tests/testthat/test_XcmsExperiment.R
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ test_that("findChromPeaks,MsExperiment et al works", {
expect_true(is.data.frame(chromPeakData(xmse, return.type = "data.frame")))
expect_s4_class(chromPeakData(xmse), "DataFrame")
expect_true(nrow(chromPeakData(xmse, 2:3)) == 0)
expect_true(is.integer(chromPeakData(res)$ms_level))

## dropChromPeaks
rres <- dropChromPeaks(res)
Expand All @@ -84,13 +85,16 @@ test_that("findChromPeaks,MsExperiment et al works", {
expect_equal(res@chromPeaks, res2@chromPeaks)
expect_equal(res@chromPeakData, res2@chromPeakData)
expect_true(length(res2@processHistory) == 2)
expect_true(is.integer(chromPeakData(res2)$ms_level))

res2 <- findChromPeaks(res, param = p, msLevel = 2L, add = FALSE)
expect_equal(nrow(res2@chromPeaks), 0)
expect_true(length(res2@processHistory) == 1)
expect_true(is.integer(chromPeakData(res2)$ms_level))

res2 <- findChromPeaks(mse, param = p, chunkSize = -1)
expect_equal(res@chromPeaks, res2@chromPeaks)
expect_true(is.integer(chromPeakData(res2)$ms_level))

expect_true(hasChromPeaks(res))
expect_true(hasChromPeaks(res, msLevel = 1L))
Expand Down

0 comments on commit ba10535

Please sign in to comment.