public IList <IFoundPeak> CalcPeaks(int max, int[] idIndices) { PeakAndValleyFinder peakAndValleyFinder = GetPeakAndValleyFinder(); var allPeaks = new List <FoundPeak>(); foreach (var startEnd in peakAndValleyFinder.FindPeaks()) { if (startEnd.Key < _intensities.Count - 1 && startEnd.Value > 0) { var peak = new FoundPeak(peakAndValleyFinder._widthDataWings, _intensities, _baselineIntensity, startEnd.Key, startEnd.Value); double rheight = peak.Height / peak.RawHeight; double rarea = peak.Area / peak.RawArea; if (rheight > 0.02 && rarea > 0.02) { peak.Identified = idIndices.Any(idx => idx >= peak.StartIndex && idx <= peak.EndIndex); allPeaks.Add(peak); } } } if (max == -1) { return(allPeaks.Cast <IFoundPeak>().ToArray()); } allPeaks.Sort(ComparePeakIdentifiedArea); return(allPeaks.Take(max).Cast <IFoundPeak>().ToArray()); }
private int ComparePeakIdentifiedArea(FoundPeak peak1, FoundPeak peak2) { if (peak1.Identified) { if (!peak2.Identified) { return(-1); } } else if (peak2.Identified) { return(1); } return(-peak1.Area.CompareTo(peak2.Area)); }