public PeptideModificationState GetFreshCopy(int len)
        {
            PeptideModificationState result = new PeptideModificationState();

            result.SetNTermModification(ushort.MaxValue);
            result.SetCTermModification(ushort.MaxValue);
            result.modifications = new ushort[len];
            for (int i = 0; i < len; i++)
            {
                result.modifications[i] = ushort.MaxValue;
            }
            return(result);
        }
        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);
        }