Example #1
0
        public static ModifiedSequence GetFragmentSequence(ModifiedSequence modifiedSequence, IonType ionType,
                                                           int ordinal)
        {
            string unmodifiedSequence = modifiedSequence.GetUnmodifiedSequence();

            switch (ionType)
            {
            case IonType.a:
            case IonType.b:
            case IonType.c:
                return(new ModifiedSequence(unmodifiedSequence.Substring(0, ordinal),
                                            modifiedSequence.GetModifications().Where(mod => mod.IndexAA < ordinal),
                                            MassType.Monoisotopic));
            }

            int    offset           = unmodifiedSequence.Length - ordinal;
            string fragmentSequence = unmodifiedSequence.Substring(offset);
            var    newModifications = modifiedSequence.GetModifications()
                                      .Where(mod => mod.IndexAA >= offset)
                                      .Select(mod => mod.ChangeIndexAa(mod.IndexAA - offset));

            return(new ModifiedSequence(fragmentSequence, newModifications, MassType.Monoisotopic));
        }
Example #2
0
        private static Molecule GetSequenceFormula(ModifiedSequence modifiedSequence, MassType massType, out double unexplainedMassShift)
        {
            unexplainedMassShift = 0;
            var    molecule           = new Dictionary <string, int>();
            string unmodifiedSequence = modifiedSequence.GetUnmodifiedSequence();
            var    modifications      = modifiedSequence.GetModifications().ToLookup(mod => mod.IndexAA);

            for (int i = 0; i < unmodifiedSequence.Length; i++)
            {
                char aminoAcid = unmodifiedSequence[i];
                AddAminoAcidFormula(massType, aminoAcid, molecule, ref unexplainedMassShift);
                foreach (var mod in modifications[i])
                {
                    string formula = mod.Formula;
                    if (formula == null)
                    {
                        var staticMod = mod.StaticMod;
                        var aa        = unmodifiedSequence[i];
                        if ((staticMod.LabelAtoms & LabelAtoms.LabelsAA) != LabelAtoms.None && AminoAcid.IsAA(aa))
                        {
                            formula = SequenceMassCalc.GetHeavyFormula(aa, staticMod.LabelAtoms);
                        }
                    }
                    if (formula != null)
                    {
                        var modFormula = Molecule.ParseExpression(formula);
                        Add(molecule, modFormula);
                    }
                    else
                    {
                        unexplainedMassShift += massType.IsMonoisotopic() ? mod.MonoisotopicMass : mod.AverageMass;
                    }
                }
            }
            return(Molecule.FromDict(molecule));
        }