/// <summary> /// This function ranks peaks based on the increasing order of intenstiy. /// </summary> /// <param name="peaks">Peaks in spectrum</param> /// <returns>Ranked peaks</returns> public static Set <Peak> rankPeaks(List <Peak> peaks) { Stack <Peak> rankedPeaks = new Stack <Peak>(); IntensityComparer intensitySorter = new IntensityComparer(SortOrder.ASCENDING); peaks.Sort(intensitySorter); int peakCount = 1; foreach (var peak in peaks) { Peak newPeak = new Peak(peak); newPeak.rankOrIntensity = peakCount; if (rankedPeaks.Count > 0) { Peak lastPeak = rankedPeaks.Peek(); if (lastPeak.rankOrIntensity == newPeak.rankOrIntensity) { newPeak.rankOrIntensity = lastPeak.rankOrIntensity; } } rankedPeaks.Push(newPeak); ++peakCount; } Set <Peak> retPeaks = new Set <Peak>(); foreach (var peak in rankedPeaks) { retPeaks.Add(peak); } return(retPeaks); }
/// <summary> /// This function takes top N intense peaks to meet the target TIC. /// </summary> /// <param name="peaks">Peaks in the spectrum</param> /// <param name="percentTIC">Percentage of total ion current to be retained</param> /// <returns></returns> public static List <Peak> filterByPercentTIC(List <Peak> peaks, double percentTIC) { // Compute the total ion current in the spectrum double totalTIC = 0.0; foreach (var peak in peaks) { totalTIC += peak.rankOrIntensity; } // Sort the peaks by descending order of intensity and take as many peaks as // possible to meet the target TIC. IntensityComparer intensitySorter = new IntensityComparer(SortOrder.DESCENDING); peaks.Sort(intensitySorter); List <Peak> finalList = new List <Peak>(); double TICSoFar = 0.0; foreach (var peak in peaks) { TICSoFar += peak.rankOrIntensity; if ((TICSoFar / totalTIC) >= percentTIC) { break; } finalList.Add(peak); } MassComparer mzComparer = new MassComparer(SortOrder.ASCENDING); finalList.Sort(mzComparer); return(finalList); }
// End comparators for Peak /// <summary> /// This function takes top N intense peaks from each spectrum /// </summary> /// <param name="peaks">Spectrum peaks</param> /// <param name="numPeaks">Number of peaks to be retained</param> /// <returns></returns> public static List <Peak> filterByPeakCount(List <Peak> peaks, int numPeaks) { // Sort the peaks by decreasing order of intensity and take numPeaks IntensityComparer intensitySorter = new IntensityComparer(SortOrder.DESCENDING); peaks.Sort(intensitySorter); List <Peak> finalList = new List <Peak>(); foreach (var peak in peaks) { if (numPeaks == 0) { break; } --numPeaks; finalList.Add(peak); } MassComparer mzComparer = new MassComparer(SortOrder.ASCENDING); finalList.Sort(mzComparer); return(finalList); }