public OptimalResult(OptimalResult source)
 {
     this._score      = source._score;
     this._deltaScore = source._deltaScore;
     this._peptideCountFromTargetDB = source._peptideCountFromTargetDB;
     this._peptideCountFromDecoyDB  = source._peptideCountFromDecoyDB;
     this._falseDiscoveryRate       = source._falseDiscoveryRate;
 }
示例#2
0
 public string OptimalResultToString(OptimalResult or)
 {
     if (null == or)
     {
         return("-\t0\t0\t0");
     }
     else
     {
         return(MyConvert.Format("{0:0.####}\t{1}\t{2}\t{3:0.####}", or.Score, or.PeptideCountFromTargetDB, or.PeptideCountFromDecoyDB, or.FalseDiscoveryRate));
     }
 }
示例#3
0
        private List <IIdentifiedSpectrum> DoCalculateDuplicated(List <IIdentifiedSpectrum> preFiltered, OptimalResult optimalResult)
        {
            preFiltered.ForEach(m => m.QValue = -1);

            ScoreFunc.SortSpectrum(preFiltered);

            //Use top score spectra for Qvalue calculation
            var topSpectra = new List <IIdentifiedSpectrum>(preFiltered);

            IdentifiedSpectrumUtils.KeepTopPeptideFromSameEngineDifferentParameters(topSpectra, ScoreFunc);

            //计算QValue。
            QValueFunc(topSpectra, ScoreFunc, FdrCalc);

            //将非top的肽段的QValue填充。
            for (int i = 1; i < preFiltered.Count; i++)
            {
                if (preFiltered[i].QValue == -1)
                {
                    preFiltered[i].QValue = preFiltered[i - 1].QValue;
                }
            }

            List <IIdentifiedSpectrum> result = new List <IIdentifiedSpectrum>();

            optimalResult.PeptideCountFromDecoyDB  = 0;
            optimalResult.PeptideCountFromTargetDB = 0;

            for (int i = preFiltered.Count - 1; i >= 0; i--)
            {
                if (preFiltered[i].QValue <= FdrValue)
                {
                    result.AddRange(preFiltered.GetRange(0, i + 1));

                    optimalResult.Score       = ScoreFunc.GetScore(preFiltered[i]);
                    optimalResult.ExpectValue = preFiltered[i].ExpectValue;

                    optimalResult.FalseDiscoveryRate = preFiltered[i].QValue;

                    int decoyCount  = 0;
                    int targetCount = 0;

                    HashSet <string> filenames = new HashSet <string>();
                    foreach (IIdentifiedSpectrum spectrum in result)
                    {
                        if (filenames.Contains(spectrum.Query.FileScan.LongFileName))
                        {
                            continue;
                        }
                        filenames.Add(spectrum.Query.FileScan.LongFileName);

                        if (spectrum.FromDecoy)
                        {
                            decoyCount++;
                        }
                        else
                        {
                            targetCount++;
                        }
                    }

                    optimalResult.PeptideCountFromDecoyDB  = decoyCount;
                    optimalResult.PeptideCountFromTargetDB = targetCount;

                    Console.WriteLine("{0} -> {1} ==> {2} / {3}", preFiltered.Count, topSpectra.Count, decoyCount, targetCount);

                    break;
                }
            }

            return(result);
        }
示例#4
0
 public virtual List <IIdentifiedSpectrum> Calculate(List <IIdentifiedSpectrum> preFiltered, OptimalResult optimalResult, bool hasDuplicatedSpectrum)
 {
     if (hasDuplicatedSpectrum)
     {
         return(DoCalculateDuplicated(preFiltered, optimalResult));
     }
     else
     {
         return(DoCalculateNoDuplicated(preFiltered, optimalResult));
     }
 }
示例#5
0
        private List <IIdentifiedSpectrum> DoCalculateNoDuplicated(List <IIdentifiedSpectrum> preFiltered, OptimalResult optimalResult)
        {
            QValueFunc(preFiltered, ScoreFunc, FdrCalc);

            List <IIdentifiedSpectrum> result = new List <IIdentifiedSpectrum>();

            optimalResult.PeptideCountFromDecoyDB  = 0;
            optimalResult.PeptideCountFromTargetDB = 0;

            for (int i = preFiltered.Count - 1; i >= 0; i--)
            {
                if (preFiltered[i].QValue <= FdrValue)
                {
                    result.AddRange(preFiltered.GetRange(0, i + 1));

                    optimalResult.Score       = ScoreFunc.GetScore(preFiltered[i]);
                    optimalResult.ExpectValue = preFiltered[i].ExpectValue;

                    optimalResult.FalseDiscoveryRate = preFiltered[i].QValue;

                    int decoyCount  = 0;
                    int targetCount = 0;

                    foreach (IIdentifiedSpectrum spectrum in result)
                    {
                        if (spectrum.FromDecoy)
                        {
                            decoyCount++;
                        }
                        else
                        {
                            targetCount++;
                        }
                    }

                    optimalResult.PeptideCountFromDecoyDB  = decoyCount;
                    optimalResult.PeptideCountFromTargetDB = targetCount;

                    Console.WriteLine("{0} / {1} ==> {2} / {3}", preFiltered.Count(m => m.FromDecoy), preFiltered.Count(m => !m.FromDecoy), decoyCount, targetCount);

                    break;
                }
            }

            return(result);
        }
 public double Calculate(OptimalResult or)
 {
     return(Calculate(or.PeptideCountFromDecoyDB, or.PeptideCountFromTargetDB));
 }