예제 #1
0
        /// <summary>
        /// Sort XicPoints and select one peak per scan
        /// </summary>
        /// <param name="xic"></param>
        /// <returns></returns>
        public static Xic GetSelectedXic(Xic xic)
        {
            if (xic.Count == 0)
            {
                return(xic);
            }
            xic.Sort(); // Need to guarantee a sorted Xic

            // select one best peak for each scan
            var newXic = new Xic();

            var prevScanNum = xic[0].ScanNum;
            var bestPeak    = xic[0];

            for (var i = 1; i < xic.Count; i++)
            {
                var xicPeak = xic[i];
                if (xicPeak.ScanNum > prevScanNum)
                {
                    newXic.Add(bestPeak);
                    bestPeak = xicPeak;
                }
                else
                {
                    if (xicPeak.Intensity > bestPeak.Intensity)
                    {
                        bestPeak = xicPeak;
                    }
                }
                prevScanNum = xicPeak.ScanNum;
            }
            newXic.Add(bestPeak);
            return(newXic);
        }
예제 #2
0
 /// <summary>
 /// Check 2 Xics for equality
 /// </summary>
 /// <param name="other"></param>
 /// <returns></returns>
 protected bool Equals(Xic other)
 {
     for (var i = 0; i < Count; i++)
     {
         if (!this[i].Equals(other[i]))
         {
             return(false);
         }
     }
     return(true);
 }
예제 #3
0
        /// <summary>
        /// Get the Pearson correlation of 2 XICs
        /// </summary>
        /// <param name="other"></param>
        /// <returns></returns>
        public double GetCorrelation(Xic other)
        {
            if (Count == 0 || other == null || other.Count == 0)
            {
                return(0);
            }

            var count1 = Count;
            var count2 = other.Count;
            var index1 = 0;
            var index2 = 0;

            var intList1 = new List <double>();
            var intList2 = new List <double>();

            while (index1 < count1 && index2 < count2)
            {
                var comp = this[index1].ScanNum - other[index2].ScanNum;
                if (comp < 0)
                {
                    ++index1;
                }
                else if (comp > 0)
                {
                    ++index2;
                }
                else
                {
                    intList1.Add(this[index1].Intensity);
                    intList2.Add(other[index2].Intensity);
                    ++index1;
                    ++index2;
                }
            }

            var correlation = FitScoreCalculator.GetPearsonCorrelation(intList1.ToArray(), intList2.ToArray());

            return(correlation);
        }
예제 #4
0
        /// <summary>
        /// Get the Cosine score of 2 XICs
        /// </summary>
        /// <param name="other"></param>
        /// <returns></returns>
        public double GetCosine(Xic other)
        {
            if (Count == 0 || other == null || other.Count == 0)
            {
                return(0);
            }

            //var minScanNum = Math.Min(this[0].ScanNum, other[0].ScanNum);
            //var maxScanNum = Math.Max(this[Count-1].ScanNum, other[other.Count-1].ScanNum);

            var minScanNum = this[0].ScanNum;
            var maxScanNum = this[Count - 1].ScanNum;

            var intArr1 = new double[maxScanNum - minScanNum + 1];

            foreach (var p in this)
            {
                intArr1[p.ScanNum - minScanNum] = p.Intensity;
            }

            var intArr2 = new double[maxScanNum - minScanNum + 1];

            foreach (var p in other)
            {
                var index = p.ScanNum - minScanNum;
                if (index < 0 || index >= intArr2.Length)
                {
                    continue;
                }
                intArr2[p.ScanNum - minScanNum] = p.Intensity;
            }

            var correlation = FitScoreCalculator.GetCosine(intArr1, intArr2);

            return(correlation);
        }