I have a list of compounds of interest and monoisotopic masses, which i've been using to look for in HPLC-MS data with XCMS. I've done something really simple, just load each sample as a xcmsRaw class, then use the getEIC method, with rtrange spanning the whole run and the mzrange around the expected m/z for the polarity used and a small tolerance. I iterate through the list and print a PDF that allows for visual inspection of what might be there or definitely isn't... I've also did an unbiased peak picking, which found a lot of peaks, but at this point I only care about the ones in my initial list. What I want to do is a more formal targeted peak detection, automatically finding peaks with a reasonable SNR, shape, etc., but only retaining those that have a chance of being something in my list. My data is centroided, so I would be using centWave. What's ocurring me now is something like getting all the peaks normally and then filtering from the EICs matrix the peaks within a certain tolerance of the values in my list.
As anyone tried something like this? Ideas, suggestions, etc?
Thanks in advance!
It seems you are generally able to write R scripts so here is just a small hint:
in your xcmsSet object you have the mass for each feature in:
xset@groups[,"mzmed"]
Simple make a loop that runs through each mass in your target list and mark which feature gives a hit.
Something like:
(abs(xset@groups[,"mzmed"]-mass[i])/mass[i])*1E6 < ppm_tol
would give you a logical vector for each target mass giving you the possible location of the target.
I didn't test this but that would be the general easy way.
If you only have a single sample you could use xset@peaks instead that have additional columns you could use for filtering:
into
integrated peak intensity
intb
baseline corrected integrated peak intensity
maxo
maximum peak intensity
sn
Signal/Noise ratio, defined as (maxo - baseline)/sd, where
maxo is the maximum peak intensity,
baseline the estimated baseline value and
sd the standard deviation of local chromatographic noise.
Thanks!
I ended up following a similar approach. I'm now trying to add CAMERA to improve the quality of the process and playing around with the raw data to see how similar the results are.