Example #1
0
        /// <summary>
        /// Given two keys that match each other (i.e. the modification masses are within the other's margin of error)
        /// return a key which has the lower precision of the two.
        /// For instance, if one key is C[+57.021464]PEPTIDER[+10] and the is C[+57.02]PEPTIDEK[10.0083],
        /// the result be C[+57.02]PEPTIDER[+10].
        /// </summary>
        private PeptideLibraryKey MostGeneralPeptideKey(PeptideLibraryKey key1, PeptideLibraryKey key2)
        {
            Assume.AreEqual(key1.UnmodifiedSequence, key2.UnmodifiedSequence);
            var mods1 = key1.GetModifications();
            var mods2 = key2.GetModifications();

            Assume.AreEqual(mods1.Count, mods2.Count);
            var newMods = new List <KeyValuePair <int, string> >(mods1.Count);

            for (int i = 0; i < mods1.Count; i++)
            {
                var mod1 = mods1[i];
                var mod2 = mods2[i];
                Assume.AreEqual(mod1.Key, mod2.Key);
                if (mod1.Value == mod2.Value)
                {
                    newMods.Add(mod1);
                    continue;
                }
                MassModification massMod1 = MassModification.Parse(mod1.Value);
                MassModification massMod2 = MassModification.Parse(mod2.Value);
                if (massMod1.Precision <= massMod2.Precision)
                {
                    newMods.Add(mod1);
                }
                else
                {
                    newMods.Add(mod2);
                }
            }
            return(new PeptideLibraryKey(MakeModifiedSequence(key1.UnmodifiedSequence, newMods), key1.Charge));
        }
Example #2
0
        /// <summary>
        /// Change the format of all modifications so that they are in the Skyline 3.7
        /// format of having one digit after the decimal.
        /// </summary>
        public PeptideLibraryKey FormatToOneDecimal()
        {
            if (!HasModifications)
            {
                return(this);
            }
            StringBuilder newSequence = new StringBuilder();
            int           aaCount     = 0;

            foreach (var mod in GetModifications())
            {
                newSequence.Append(UnmodifiedSequence.Substring(aaCount, mod.Key + 1 - aaCount));
                aaCount = mod.Key + 1;
                var    massModification = MassModification.Parse(mod.Value);
                string newMod;
                if (massModification == null)
                {
                    newMod = mod.Value;
                }
                else
                {
                    newMod = new MassModification(massModification.Mass, 1).ToString();
                }
                newSequence.Append(Model.ModifiedSequence.Bracket(newMod));
            }
            newSequence.Append(UnmodifiedSequence.Substring(aaCount));
            return(new PeptideLibraryKey(newSequence.ToString(), Charge));
        }
Example #3
0
        public StaticMod ClosestMatchGeneral(MassModification massModification, ModTerminus?terminus)
        {
            StaticMod match = ClosestMatch(_listAllAAsMasses, massModification);

            if (match == null && terminus != null)
            {
                match = ClosestMatch(terminus == ModTerminus.C ? _listCTerminalMasses : _listNTerminalMasses, massModification);
            }
            return(match ?? ClosestMatch(_listMasses, massModification));
        }
Example #4
0
        public StaticMod ClosestMatchSpecific(MassModification massModification, ModTerminus?terminus)
        {
            // Order of preference: matches that specific amino acids
            StaticMod match = ClosestMatch(_listMasses, massModification);

            // Terminal matches
            if (match == null && terminus != null)
            {
                match = ClosestMatch(terminus == ModTerminus.C ? _listCTerminalMasses : _listNTerminalMasses, massModification);
            }
            // Matches that apply to all amino acids
            return(match ?? ClosestMatch(_listAllAAsMasses, massModification));
        }
Example #5
0
        public static bool ModificationsMatch(string strMod1, string strMod2)
        {
            if (strMod1 == strMod2)
            {
                return(true);
            }
            var massMod1 = MassModification.Parse(strMod1);
            var massMod2 = MassModification.Parse(strMod2);

            if (massMod1 == null || massMod2 == null)
            {
                return(false);
            }
            return(massMod1.Matches(massMod2));
        }
Example #6
0
        private static StaticMod ClosestMatch(List <KeyValuePair <double, StaticMod> > listSearch, MassModification massModification)
        {
            if (listSearch.Count == 0)
            {
                return(null);
            }
            int i = listSearch.BinarySearch(new KeyValuePair <double, StaticMod>(massModification.Mass, null), MASS_COMPARER);

            i = i < 0 ? ~i : i;
            var match = listSearch[i == listSearch.Count ? i - 1 : i];

            if (massModification.Matches(new MassModification(match.Key, UniMod.UNIMOD_PRECISION)))
            {
                return(match.Value);
            }
            if (i > 0)
            {
                match = listSearch[i - 1];
                if (massModification.Matches(new MassModification(match.Key, UniMod.UNIMOD_PRECISION)))
                {
                    return(match.Value);
                }
            }
            return(null);
        }
Example #7
0
 public StaticMod ClosestMatch(MassModification massModification, ModTerminus?terminus, bool specific)
 {
     return(specific
        ? ClosestMatchSpecific(massModification, terminus)
        : ClosestMatchGeneral(massModification, terminus));
 }