public void TestKeepMaxScorePeptideOnly()
        {
            List <IIdentifiedSpectrum> spectra = new List <IIdentifiedSpectrum>();

            spectra.Add(new IdentifiedSpectrum()
            {
                Score = 3.0
            });
            spectra.Add(new IdentifiedSpectrum()
            {
                Score = 2.0
            });

            spectra.ForEach(m =>
            {
                m.AddPeptide(new IdentifiedPeptide(m)
                {
                    Sequence = "A1"
                });
                m.Charge = 2;
            });

            IdentifiedSpectrum other = new IdentifiedSpectrum()
            {
                Score = 2.0, Charge = 2
            };

            other.AddPeptide(new IdentifiedPeptide(other)
            {
                Sequence = "B1"
            });
            spectra.Add(other);

            List <IIdentifiedSpectrum> filtered = UniquePeptideDistiller.KeepMaxScorePeptideOnly(spectra);

            Assert.AreEqual(2, filtered.Count);
            Assert.AreEqual(3.0, filtered[0].Score);
            Assert.AreEqual("A1", filtered[0].Sequence);
            Assert.AreEqual(2.0, filtered[1].Score);
            Assert.AreEqual("B1", filtered[1].Sequence);
        }
        public override IEnumerable <string> Process(string fileName)
        {
            var format = new SequestResultTextFormat();

            format.Progress = this.Progress;

            Progress.SetMessage("Reading identified result from " + fileName + " ...");
            IIdentifiedResult ir = format.ReadFromFile(fileName);

            Progress.SetMessage("Removing duplicated peptide ...");
            Progress.SetRange(0, ir.Count);
            for (int i = 0; i < ir.Count; i++)
            {
                Progress.SetPosition(i);
                IIdentifiedProteinGroup    group = ir[i];
                List <IIdentifiedSpectrum> peps  = UniquePeptideDistiller.KeepMaxScorePeptideOnly(group.GetPeptides());
                foreach (var protein in group)
                {
                    protein.Peptides.RemoveAll(m => !peps.Contains(m.Spectrum));
                }
            }

            string resultFileName = fileName + ".unique";

            Progress.SetMessage("Saving proteins to " + resultFileName + " ...");
            format.WriteToFile(resultFileName, ir);

            List <IIdentifiedSpectrum> spectra = ir.GetSpectra();
            var    peptideFormat   = new SequestPeptideTextFormat(format.PeptideFormat.GetHeader());
            string peptideFileName = fileName + ".unique.peptides";

            Progress.SetMessage("Saving peptides to " + peptideFileName + " ...");
            peptideFormat.WriteToFile(peptideFileName, spectra);

            Progress.SetMessage("Finished.");
            return(new[] { resultFileName, peptideFileName });
        }