public ChemicalFormulaModification ToHeavyModification(bool c, bool n) { var formula = new ChemicalFormula(); if (c) { Element carbon = PeriodicTable.GetElement("C"); int carbon12 = ChemicalFormula.Count(carbon[12]); formula.Add(carbon[12], -carbon12); formula.Add(carbon[13], carbon12); } if (n) { Element nitrogen = PeriodicTable.GetElement("N"); int nitrogen14 = ChemicalFormula.Count(nitrogen[14]); formula.Add(nitrogen[14], -nitrogen14); formula.Add(nitrogen[15], nitrogen14); } return(new ChemicalFormulaModification(formula, "#", Site)); }
public MZSpectrum CalculateDistribuition(ChemicalFormula formula, int topNPeaks = int.MaxValue, Normalization normalization = Normalization.Sum) { double monoisotopicMass = formula.MonoisotopicMass; SetResolution(monoisotopicMass); List<List<Composition>> elementalComposition = new List<List<Composition>>(); // Get all the unique elements of the formula foreach (Element element in formula.GetElements()) { int count = formula.Count(element); List<Composition> isotopeComposition = new List<Composition>(); foreach (Isotope isotope in element.Isotopes.Values.OrderBy(iso => iso.AtomicMass)) { double probability = isotope.RelativeAbundance; if (probability <= 0) continue; Composition c = new Composition { Atoms = count, MolecularWeight = isotope.AtomicMass, Power = isotope.AtomicMass, Probability = isotope.RelativeAbundance }; isotopeComposition.Add(c); } elementalComposition.Add(isotopeComposition); } foreach (List<Composition> compositions in elementalComposition) { double sumProb = compositions.Sum(t => t.Probability); foreach (Composition composition in compositions) { composition.Probability /= sumProb; composition.LogProbability = Math.Log(composition.Probability); composition.Power = Math.Floor(composition.MolecularWeight/_mwResolution + 0.5); } } return CalculateFineGrain(elementalComposition, normalization); }