Skip to content

Instantly share code, notes, and snippets.

@RalfG
Last active October 23, 2025 06:07
Show Gist options
  • Select an option

  • Save RalfG/a74448fad9a0766a8e5afbbe3a6541d7 to your computer and use it in GitHub Desktop.

Select an option

Save RalfG/a74448fad9a0766a8e5afbbe3a6541d7 to your computer and use it in GitHub Desktop.
Dalton vs ppm mass error in mass spectrometry

Dalton vs ppm mass error in mass spectrometry

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")

def ppm_to_da(error_ppm, theoretical_mass):
    error_da = theoretical_mass / ((1/ error_ppm) * 1000000)
    return error_da

def flatten(l):
    return [item for sublist in l for item in sublist]

def generate_df(masses, errors):
    mass_error = pd.DataFrame(columns=["Mass", "Error (ppm)", "Error (Da)"])
    mass_error["Mass"] = masses * len(errors)
    mass_error["Error (ppm)"] = flatten([[e] * len(masses) for e in errors])
    mass_error["Error (Da)"] = mass_error.apply(
        lambda row: ppm_to_da(row["Error (ppm)"], row["Mass"]),
        axis=1
    )
    return mass_error


masses = [400, 1200]
errors = [25, 50, 100]

mass_error = generate_df(masses, errors)

sns.lineplot(data=mass_error, x="Mass", y="Error (Da)", hue="Error (ppm)")
plt.show()

ppm-vs-da

@animesh
Copy link

animesh commented Aug 6, 2022

Awesome! Just love the colab for teaching, so here is a copy https://colab.research.google.com/drive/1Y55cjN3HahxInkwCOjQwNG_NXEZ0xmKl?usp=sharing 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment