Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The larger the isotope number, the larger the m/z error #71

Open
Annatkachev opened this issue Jul 15, 2021 · 1 comment
Open

The larger the isotope number, the larger the m/z error #71

Annatkachev opened this issue Jul 15, 2021 · 1 comment

Comments

@Annatkachev
Copy link

Hello,

It seems that the algorithm by which CAMERA calculates m/z between isotopes systematically leads to erroneous isotopes of higher order.

As I understand, m/z differences are calculated between isotopes [M+k] and [ M+k-1]. For higher order isotopes, it seems that there is a m/z error that is accumulated, and the higher order isotopes are in fact no longer in an appropriate m/z range to the respective [M] isotope.

To illustrate the issue, I attach differences between adjacent isotopes. The ppm error is mostly less than 10 ppm:

image

However, if I calculate the difference between the higher order isotopes and the [M] isotope, there are more and more peaks with large m/z differences to the [M] isotope. By the isotope [M+5], most of the detected isotopes, have, in fact, a ppm to large to be true isotopes.

image

While I understand that m/z values have to be calculated between the [M+k] and [ M+k-1] isotopes to define possible isotope groups for computational reasons, I think a post-processing step should be added to filter from the pre-defined groups which peaks, in fact, have appropriate m/z difference with the respective [M] isotope.

I used XCMS online to process the data, which was acquired in positive mode. The expected mass tolerance we observe is 5-7 ppm.

I attach a colab notebook with the data and analysis. I have only considered isotopes with +1 charge.
https://colab.research.google.com/drive/1OciFt1M3lKrorlX7gnkwH4skJRwnHvFV?usp=sharing

Best regards.

@sneumann
Copy link
Owner

Hi, thanks for the precise analysis! The matrix with ranges for the isotopes is defined in

calcIsotopeMatrix <- function(maxiso=4){

For some testing, you can supply such a matrix to the function
setMethod("findIsotopes", "xsAnnotate",

I also don't have the confidence intervals for m/z of the entire isotope cluster.
Maybe an implementation similar to https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3879626/ could help ?
Yours, Steffen

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants