Exemplo n.º 1
0
        private Molecule GetFormula(string seq, ExplicitSequenceMods mods, out double unexplainedMass)
        {
            var formula = new FormulaBuilder(_massCalc);
            var modMasses = GetModMasses(mods);
            formula.Append(modMasses._massModCleaveNFormula, modMasses._massModCleaveNExtra);
            formula.Append(modMasses._massModCleaveCFormula, modMasses._massModCleaveCExtra);
            for (int i = 0, len = seq.Length; i < len; i++)
            {
                char c = seq[i];

                formula.Append(AMINO_FORMULAS[c])
                       .Append(modMasses._aminoModFormulas[c], modMasses._aminoModMassesExtra[c]);
                // Terminal modifications
                if (i == 0)
                    formula.Append(modMasses._aminoNTermModFormulas[c], modMasses._aminoNTermModMassesExtra[c]);
                else if (i == len - 1)
                    formula.Append(modMasses._aminoCTermModFormulas[c], modMasses._aminoCTermModMassesExtra[c]);
            }
            if (mods != null)
            {
                foreach (ExplicitMod mod in mods.AllMods)
                {
                    double modUnexplainedMass;
                    string modFormula = GetModFormula(seq[mod.IndexAA], mod.Modification, out modUnexplainedMass);
                    formula.Append(modFormula, modUnexplainedMass);
                }
            }
            formula.Append("H2O"); // N-term = H, C-term = OH // Not L10N
            unexplainedMass = formula.UnexplainedMass;
            // CONSIDER: More efficient translation between builder and Molecure.
            //           Both contain a dictionary for atom counts.
            return Molecule.Parse(formula.ToString());
        }