Ejemplo n.º 1
0
        /// <summary>
        /// Take a molecular formula and apply the described adduct to it.
        /// </summary>
        /// <param name="formula">A string like "C12H3"</param>
        /// <param name="adduct">A string like "[M+H]" or "[2M+K]" or "M+H" or "[M+H]+" or "[M+Br]- or "M2C13+Na" </param>
        /// <returns></returns>
        public static Molecule ApplyAdductToFormula(string formula, Adduct adduct)
        {
            var molecule   = Molecule.Parse(formula.Trim());
            var resultDict = new Dictionary <string, int>();

            adduct.ApplyToMolecule(molecule, resultDict);
            var resultMol = Molecule.FromDict(new ImmutableSortedList <string, int>(resultDict));

            if (!resultMol.Keys.All(k => BioMassCalc.MONOISOTOPIC.IsKnownSymbol(k)))
            {
                throw new InvalidOperationException(string.Format(Resources.BioMassCalc_ApplyAdductToFormula_Unknown_symbol___0___in_adduct_description___1__, resultMol.Keys.First(k => !BioMassCalc.MONOISOTOPIC.IsKnownSymbol(k)), adduct));
            }
            return(resultMol);
        }