public PeptideModificationState GetTrueModifications(HashSet <string> labelModificationSet)
        {
            PeptideModificationState result = GetFreshCopy(Length);

            result.SetNTermModification(GetNTermModification());
            result.SetCTermModification(GetCTermModification());
            for (int i = 0; i < Length; i++)
            {
                ushort m = GetModificationAt(i);
                if (m == ushort.MaxValue || labelModificationSet.Contains(Tables.modificationList[m].Title))
                {
                    result.SetModificationAt(i, ushort.MaxValue);
                }
                else
                {
                    result.SetModificationAt(i, GetModificationAt(i));
                }
            }
            return(result);
        }
        public PeptideModificationState GetLabelModifications(ushort[] fixedMods, string sequence,
                                                              HashSet <string> labelModificationSet)
        {
            PeptideModificationState result = GetFreshCopy(Length);

            for (int i = 0; i < Length; i++)
            {
                ushort m = GetModificationAt(i);
                if (m != ushort.MaxValue && labelModificationSet.Contains(Tables.modificationList[m].Title))
                {
                    result.SetModificationAt(i, GetModificationAt(i));
                }
                else
                {
                    result.SetModificationAt(i, ushort.MaxValue);
                }
            }
            foreach (ushort fixMod in fixedMods)
            {
                if (labelModificationSet.Contains(Tables.modificationList[fixMod].Title))
                {
                    Modification mod = Tables.modificationList[fixMod];
                    for (int j = 0; j < mod.AaCount; j++)
                    {
                        char c = mod.GetAaAt(j);
                        for (int i = 0; i < Length; i++)
                        {
                            if (sequence[i] == c)
                            {
                                result.SetModificationAt(i, mod.Index);
                            }
                        }
                    }
                }
            }
            return(result);
        }