Skip to main content
Topic: Side/ Partial Peak artifacts (Read 135 times) previous topic - next topic

Side/ Partial Peak artifacts

Hi All,
I was wondering if there is an existing processing/ post-processing solution for side/ partial peak XCMS artifacts.

The first concerns m/z traces that are typically different by 0.01-0.1 Daltons from the main peak and usually within 0.2 minutes (~12s). Example: Images 1 & 2 below.

The second concerns m/z traces often of equivalent m/z but within 0.3 minutes/ 20s from a particularly wide peak. Increasing my upper limit peakwidth did not seem to fix the issue. Maybe bw is too small? Example: images 3 & 4.

From reading previous forums on related topics, increasing mzdiff to as much as 0.1 helps eliminate overlapping mass trace peaks (at the expense of overlapping and poorly resolved isomer peaks), but side peaks of the nature described above remained. Playing with the prefilter option does help eliminate a lot of these, but again some still remain. The instrument used is an Agilent Q-TOF so I'm not sure if the discussion on Orbitrap shoulder peaks applies (though one forum from many years back mentioned that Agilent peaks have problems with ringing).

Basic details:
R version 3.5.3
XCMS version 3.4.4

Code: [Select]
mset <- xcmsSet("NEG_10", 
                method = "centWave",
                peakwidth       = c(5, 40),
                ppm             = 30,
                noise           = 100,
                snthresh        = 8,
                mzdiff          = 0.05,
                prefilter       = c(5, 500),
                mzCenterFun     = "wMean",
                integrate       = 2,
                fitgauss        = TRUE,
                verbose.columns = FALSE
)

mset2 <- retcor(mset,
                method  = "obiwarp",
                profStep = 1,
                center = 5)

mset2 <- group(
  mset2,
  method  = "density",
  bw      = 3,
  mzwid   = 0.05,
  minfrac = 0.5,
  minsamp = 1,
  max     = 50)

mset3 <- fillPeaks(mset2)

Re: Side/ Partial Peak artifacts

Reply #1
Hi hhabra,

Could you provide a link to some of the forum discussions that you mention. I haven't seen them and would be interested in reading about what has been done before.

There are potentially a few places that you can try to limit these side/partial peaks. You seem to have tried a few approaches with some success.
I would suggest trying to alter the grouping algorithm settings. Increasing bw will eventually cause these to merge into the larger features, but this may have unwanted effects on other features. So I would look at changing the minfrac and minsamp settings.
As you are using fillPeaks, it will "find" the missing peaks in the rest of the samples. Looking at the images you posted, it doesn't look like XCMS will find the same side/partial peaks in many samples.

If that doesn't work, perhaps we can start to think of some post-processing solutions to handle it.

Re: Side/ Partial Peak artifacts

Reply #2
For the orbitrap like shoulder peaks I wrote a filter, xcmsRaw.orbifilter, you can find here https://gitlab.com/R_packages/chemhelper.
It runs through each scan in a file and starts with the largest mass and eliminates everything in a set mz range around that peak that is smaller than some fraction of the main peak.
It runs through all peaks in the scan until all peaks have been "evaluated".

Currently you'd need to do this on all the raw files and write them out to a new set of raw files.


As for the chromatographic side peaks I am not sure you can fix that with parameters (apart from the grouping you already mentioned). Also in your plots they look like to me to be legitimate additional small peaks so I don't see what the peak picker should be doing differently. You have fronting and tailing peaks and I guess that will always be problematic.
Your ~447 peak is very noisy. If your data in general looks like that the matchedfilter algorithm could give you better results. It generally is more robust to noisy data.
Blog: stanstrup.github.io