public double GetPep(IIdentifiedPeptideList peptides, string[] sequences, int minPeptides, int minUniquePeptides,
                             PeptideScoring peptideScoring, int nsilac)
        {
            if (peptideSequences.Length < minPeptides)
            {
                return(1.1);
            }
            double result      = 1;
            int    uniqueCount = 0;

            for (int i = 0; i < peptideSequences.Length; i++)
            {
                int index = Array.BinarySearch(sequences, peptideSequences[i]);
                if (peptides.IsUniqueGroup(index))
                {
                    uniqueCount++;
                }
                result *= peptides.GetPep(index, peptideScoring, nsilac);
            }
            if (uniqueCount < minUniquePeptides)
            {
                return(1.1);
            }
            return(result);
        }
Esempio n. 2
0
        public static int[] ExtractProteinGroups(TmpIdentifiedProteinGroup[] tmpProteinGroups, IIdentifiedPeptideList peptides,
                                                 double proteinFDR, PeptideScoring peptideScoring, int nsilac, int minPeptides,
                                                 int minUniquePeptides, string reversePrefix)
        {
            double[] peps      = new double[tmpProteinGroups.Length];
            string[] sequences = AllPeptideSequences(peptides);
            for (int i = 0; i < tmpProteinGroups.Length; i++)
            {
                peps[i] = tmpProteinGroups[i].GetPep(peptides, sequences, minPeptides, minUniquePeptides, peptideScoring, nsilac);
            }
            int[]         o                   = ArrayUtil.Order(peps);
            int           revCount            = 0;
            List <double> goodThresholdValues = new List <double>();

            for (int i = 0; i < tmpProteinGroups.Length; i++)
            {
                if (tmpProteinGroups[o[i]].HasReverseProteins(reversePrefix))
                {
                    revCount++;
                }
                double forwCount = i + 1.0 - revCount;
                if (revCount / forwCount <= proteinFDR && peps[o[i]] < 1.01)
                {
                    goodThresholdValues.Add(peps[o[i]]);
                }
            }
            double thresholdValue = ArrayUtil.Max(goodThresholdValues.ToArray());

            revCount = 0;
            List <int> oo = new List <int>();

            for (int i = 0; i < tmpProteinGroups.Length; i++)
            {
                if (tmpProteinGroups[o[i]].HasReverseProteins(reversePrefix))
                {
                    revCount++;
                }
                double forwCount = i + 1.0 - revCount;
                if (revCount / forwCount <= proteinFDR || peps[o[i]] < thresholdValue)
                {
                    oo.Add(o[i]);
                }
            }
            string[] dummy1 = new string[oo.Count];
            for (int i = 0; i < oo.Count; i++)
            {
                dummy1[i] = tmpProteinGroups[oo[i]].ProteinIds[0];
            }
            int[] ooo = ArrayUtil.Order(dummy1);
            o = ArrayUtil.SubArray(oo, ooo);
            return(o);
        }