public int TryParseFormula(out string errorMsg)
        {
            string formulaSummary = string.Empty;;
            int    retVal         = Constants.Success;

            FormulaSummary = string.Empty;
            errorMsg       = string.Empty;
            double molarMass = 0;

            MolarMass = 0;

            try
            {
                if (!Regex.IsMatch(formula, allowedElements,
                                   RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.Singleline))
                {
                    retVal   = Constants.Failure;
                    errorMsg = "Check formula, only elements and parentheses () allowed.";
                }

                if (retVal == Constants.Success)
                {
                    retVal = parser.SetFormula(Formula, out formulaSummary, out molarMass);

                    if (retVal == Constants.Success)
                    {
                        MolarMass      = molarMass;
                        FormulaSummary = formulaSummary;
                    }
                    else
                    {
                        errorMsg = parser.GetLastError();
                    }
                }
            }
            catch (Exception ex)
            {
                retVal   = Constants.Failure;
                errorMsg = string.Format("An unexpected error occurred: {0}", ex.Message);
            }

            return(retVal);
        }