Entering edit mode
Hello all,
I am trying to extract MS2 level spectra from my dataset after xcms pre-processing using a Spectra package. I am following this tutorial : https://jorainer.github.io/MetaboAnnotationTutorials/articles/annotation-use-cases.html
however calling the chromPeakSpectra function results in a warning and a NULL object:
> xdata_ms2 <- chromPeakSpectra(xdata_filled, return.type="Spectra", peaks = pks_match_ms1$peak_id)
Warning message:
In chromPeakSpectra(xdata_filled, return.type = "Spectra", peaks = pks_match_ms1$peak_id) :
Lazy evaluation queue is not empty. Will ignore any processing steps as 'return.type = "Spectra"' and 'return.type = "List"' currently don't support a non-empty processing queue.
> xdata_ms2
NULL
> sessionInfo()
R version 4.1.0 (2021-05-18)
Platform: x86_64-conda-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)
Matrix products: default
BLAS/LAPACK: /home/FCAM/eterlova/miniconda3/envs/Rmetab/lib/libopenblasp-r0.3.17.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats4 stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] data.table_1.14.2 MetaboAnnotation_0.99.7
[3] MsBackendMassbank_1.2.0 RSQLite_2.2.10
[5] pander_0.6.4 Spectra_1.5.12
[7] xcms_3.16.1 MSnbase_2.20.4
[9] ProtGenerics_1.26.0 mzR_2.28.0
[11] Rcpp_1.0.8 BiocParallel_1.28.3
[13] SummarizedExperiment_1.24.0 Biobase_2.54.0
[15] GenomicRanges_1.46.1 GenomeInfoDb_1.30.1
[17] IRanges_2.28.0 S4Vectors_0.32.3
[19] BiocGenerics_0.40.0 MatrixGenerics_1.6.0
[21] matrixStats_0.61.0
loaded via a namespace (and not attached):
[1] bitops_1.0-7 fs_1.5.2 bit64_4.0.5
[4] doParallel_1.0.17 RColorBrewer_1.1-2 tools_4.1.0
[7] utf8_1.2.2 R6_2.5.1 affyio_1.64.0
[10] DBI_1.1.2 colorspace_2.0-3 tidyselect_1.1.2
[13] bit_4.0.4 compiler_4.1.0 MassSpecWavelet_1.60.0
[16] preprocessCore_1.56.0 cli_3.2.0 DelayedArray_0.20.0
[19] scales_1.1.1 DEoptimR_1.0-10 robustbase_0.93-9
[22] affy_1.72.0 digest_0.6.29 XVector_0.34.0
[25] pkgconfig_2.0.3 MetaboCoreUtils_1.3.7 fastmap_1.1.0
[28] limma_3.50.1 rlang_1.0.2 impute_1.68.0
[31] generics_0.1.2 mzID_1.32.0 dplyr_1.0.8
[34] RCurl_1.98-1.6 magrittr_2.0.2 GenomeInfoDbData_1.2.7
[37] MALDIquant_1.21 Matrix_1.4-0 munsell_0.5.0
[40] fansi_1.0.2 MsCoreUtils_1.7.4 lifecycle_1.0.1
[43] vsn_3.62.0 MASS_7.3-55 zlibbioc_1.40.0
[46] plyr_1.8.6 grid_4.1.0 blob_1.2.2
[49] parallel_4.1.0 crayon_1.5.0 lattice_0.20-45
[52] MsFeatures_1.2.0 pillar_1.7.0 codetools_0.2-18
[55] XML_3.99-0.9 glue_1.6.2 pcaMethods_1.86.0
[58] BiocManager_1.30.16 vctrs_0.3.8 foreach_1.5.2
[61] gtable_0.3.0 RANN_2.6.1 purrr_0.3.4
[64] clue_0.3-60 assertthat_0.2.1 cachem_1.0.6
[67] ggplot2_3.3.5 ncdf4_1.19 tibble_3.1.6
[70] iterators_1.0.14 memoise_2.0.1 cluster_2.1.2
[73] ellipsis_0.3.2
I looked at the description of this function, and indeed
> length(xdata_filled@spectraProcessingQueue)
[1] 2
But calling reset function results in an error (which makes sense since I failed to create a Spectra object):
> reset(xdata_ms2)
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘reset’ for signature ‘"NULL"’
> reset(xdata_filled)
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘reset’ for signature ‘"XCMSnExp"’
Could somebody help me understand what is wrong here and how to fix it?
Best, Lisa
Thanks for the detailed description of your problem! That makes it much easier to tackle it. Could you please provide the content of your processing queue (i.e.
xdata_filled@spectraProcessingQueue
)?The reason why it is not working is that the processing queues of the
MSnbase
/xcms
objects are not (yet) compatible with those ofSpectra
objects. Thus, the lazy processings that were added to yourxcms
result object can not be transferred to theSpectra
object. Therefore we need somehow to either apply the processing queue to yourxcms
result object (would in fact not be that easy) or drop it (if possible).Thank you for your continuing help!
Here is my processing queue:
Oh, I see - so this is not something we can simply drop. Have you actually considered to run the centroiding independently of the data analysis? That's at least how we process our files, i.e. the instrument records in profile mode, but then I have a script to perform the centroiding on all mzML files and export the centroided data again as mzML files. Thus, for all my analyses I just use the centroided files - that will also increase the performance considerably, because there is no need anymore to perform the centroiding on-the-fly (like in your case).
You could have a look here for some example code. Basically, it would be very simple: after you read your data with
readMSData
, apply your centroiding and then export the centroided data to mzML files (<new folder>
below would be acharacter
with the path to the directory where to store the mzML files):You could then re-import these files with
readMSData
and perform the analysis on those (so yes, sorry, you'll have to re-run the wholexcms
-based preprocessing again). That way your processing queue will be empty and you'll be able to export MS2 spectra as aSpectra
object.Out of curiosity, I assume you specified
msLevel = c(1, 2)
above and notmsLevel = 12
for thesmooth
andpickPeaks
?Thank you for your advice! it did not even occur to me to export the files after centroiding. And no problem about re-running my XCMS analysis -- I've done it a few times already for even more stupid mistakes:)
And thank you for catching
msLevel = 12 for the smooth and pickPeaks
. Looks like I did not specified msLevel at all:Will fix this in my re-run.
no worries, if you did not specify it in
smooth
orpickPeaks
it will use all MS levels in the data set. I guess it was correctly set to MS levels 1 and 2, but theprint
somehow failed to separate the two in the on-screen printout.