sneumann / xcms

This is the git repository matching the Bioconductor package xcms: LC/MS and GC/MS Data Analysis
Other
186 stars 80 forks source link

findChromPeaksIsolationWindow delete MS1 detection #461

Open ghost opened 4 years ago

ghost commented 4 years ago

I'm working on water data (MS1/MSe) After the detection of my peaks in MS1 I apply the findChromPeaksIsolationWindow function to detect my MS2

cwp <- CentWaveParam() xdata <- findChromPeaks(raw_data, param = cwp)

xdata <- findChromPeaksIsolationWindow(raw_data, param = cwp)

This function adds the detection of my MS2 and deletes my MS1. I tried to work around the problem but without success Thank you Yohann

jorainer commented 4 years ago

Please note that for MSe data there is another solution: https://github.com/sneumann/xcms/issues/451 You can do first classical detection in MS1 and then run a second round of peak detection on MS2 with findChromPeaks(..., msLevel = 2, add = TRUE). The add = TRUE ensures that newly identified peaks will be added to the already identified MS1 peaks.

ghost commented 4 years ago

Thanks

ghost commented 4 years ago

Thanks, everything works. on the other hand, when I try to transform my data into a .mgf format, for GNPS, it is unable to reconstruct spectra.

filteredMs2Spectra <- featureSpectra(processed_Data, return.type = "Spectra") filteredMs2Spectra <- clean(filteredMs2Spectra, all = TRUE) filteredMs2Spectra <- formatSpectraForGNPS(ms2spectra)

I use the ChromPeakSpectra command to verify and here is the output: Spectra with 0 spectra and 1 metadata column(s):

While it correctly identifies my MSe spectra when I export them...

Thanks

jorainer commented 4 years ago

The problem is that featureSpectra will not work because, AFAIK, you don't have a precursor m/z for the MS2 spectra in MSe. featureSpectra was developed for DDA and will return MS2 spectra that have their precursor m/z within the m/z range of the feature and have a retention time within the rt range of the feature.

For DIA you should use (as you correctly did) the findChromPeaks, findChromPeaksIsolationWindow and reconstructChromPeakSpectra functions.

So, firstly you will have to call xdata <- findChromPeaks(raw_data, param = cwp) to identify chromatographic peaks in MS1. Then you want to identify chromatographic peaks in MS2. SCIEX instruments in SWATH mode measure MS2 spectra within isolation windows. To support that we have implemented the findChromPeaksIsolationWindow function. I'm however not sure if your MSe data has isolation windows defined. You can check that by calling isolationWindowTargetMz(xdata). If that returns some meaningful numbers (i.e. NA for MS1 spectra but number(s) for MS2 spectra) you are fine and you can use xdata <- findChromPeaksIsolationWindow(xdata, param = cwp) (note that you called that on raw_data instead on xdata and thus did not get any MS1 spectra). Otherwise you would have to define the isolation windows yourself (i.e. assign spectra to a certain isolation window). AFAIK MSe does not use isolation windows but measures MS2 in the full m/z range. Thus you could call:

iwindow <- rep(NA, length(xdata))
iwindow[msLevel(xdata) == 2] <- 1
xdata <- findChromPeaksIsolationWindow(xdata, param = cwp, isolationWindow = iwindow)

In the last step you reconstruct the MS2 spectra based on the MS2 chromatographic peaks that have a high enough peak shape correlation with each MS1 chromatographic peak: ms2 <- reconstructChromPeakSpectra(xdata). Have also a look at the help page for this function to tune/adapt your settings as you like.

Hope this helps.