public static int DescendingProbabilityScore(ProteinGroupMatch left, ProteinGroupMatch right)
        {
            int comparison = -(left.ProbabilityScore().CompareTo(right.ProbabilityScore()));

            if (comparison != 0)
            {
                return(comparison);
            }
            else
            {
                return(left.Target.CompareTo(right.Target));
            }
        }
        public ProteinGroupMatches SearchLatest(List <PeptideMatch> peptides)//, IDictionary<string, List<Protein>> dicOfProteins)//, List<Protein> AllProteins)// Dictionary<string, List<Protein>> dicOfPeptides)
        {
            Dictionary <string, PeptideMatch> dicOfPeptideMatches = new Dictionary <string, PeptideMatch>();

            foreach (PeptideMatch match in peptides)
            {
                dicOfPeptideMatches.Add(match.peptide.BaseSequence, match);
            }

            Dictionary <Protein, List <string> > allPossibleProteins = new Dictionary <Protein, List <string> >();

            foreach (PeptideMatch match in peptides)
            //foreach (string peptideSequence in dicOfProteins.Keys)
            {
                Protein protein = match.peptide.Parent;

                //foreach (Protein protein in dicOfProteins[peptideSequence])
                {
                    if (!allPossibleProteins.ContainsKey(protein))
                    {
                        allPossibleProteins.Add(protein, new List <string>());
                    }
                    allPossibleProteins[protein].Add(match.peptide.Sequence);
                }
            }

            options.ConSole.WriteLine("Merging undistinguishable proteins...");

            foreach (Protein protein in allPossibleProteins.Keys)
            {
                allPossibleProteins[protein].Sort();
            }

            //Merge only undistinguishable protein sequences
            //Dictionary<Protein, List<Protein>> dicOfSimilarProteins = new Dictionary<Protein,List<Protein>>();
            ProteinGroupMatches proteinMatches = new ProteinGroupMatches();
            List <Protein>      proteins       = new List <Protein>(allPossibleProteins.Keys);

            for (int i = 0; i < proteins.Count; i++)
            {
                ProteinGroupMatch groupMatch = new ProteinGroupMatch();
                groupMatch.Proteins.Add(proteins[i]);
                foreach (string sequence in allPossibleProteins[proteins[i]])
                {
                    if (dicOfPeptideMatches.ContainsKey(sequence))
                    {
                        groupMatch.PeptideMatches.Add(dicOfPeptideMatches[sequence]);
                    }
                }

                for (int j = i + 1; j < proteins.Count;)
                {
                    bool isSame = false;
                    if (allPossibleProteins[proteins[i]].Count == allPossibleProteins[proteins[j]].Count)
                    {
                        isSame = true;
                        for (int k = 0; k < allPossibleProteins[proteins[i]].Count; k++)
                        {
                            if (allPossibleProteins[proteins[i]][k].CompareTo(allPossibleProteins[proteins[j]][k]) != 0)
                            {
                                isSame = false;
                            }
                        }
                    }
                    if (isSame)
                    {
                        proteins.RemoveAt(j);
                        groupMatch.Proteins.Add(proteins[j]);
                    }
                    else
                    {
                        j++;
                    }
                }
                proteinMatches.Add(groupMatch);
            }
            options.ConSole.WriteLine("Found " + proteinMatches.Count + " protein groups.");
            return(proteinMatches);
        }
 public static int AscendingProbabilityScore(ProteinGroupMatch left, ProteinGroupMatch right)
 {
     return(left.ProbabilityScore().CompareTo(right.ProbabilityScore()));
 }