private PeakList <T> NewSubPeakList() { var result = new PeakList <T>(); result.AssignInforamtion(this); return(result); }
public static PeakList <T> NormalizePeakIntensities <T>(PeakList <T> pkl, double maxPeakMass) where T : IPeak, new() { PeakList <T> result = new PeakList <T>(); result.AssignInforamtion(pkl); foreach (var p in pkl) { result.Add(new T() { Mz = p.Mz, Intensity = p.Intensity, Charge = p.Charge }); } result.RemoveAll(m => m.Mz > maxPeakMass); int maxBins; if (maxPeakMass > 512) { maxBins = (int)Math.Ceiling(maxPeakMass / 1024) * 1024; } else { maxBins = 512; } // Section the original peak array in 10 regions and find the // base peak in each region. Also, square-root the peak intensities const int numberOfRegions = 10; double[] basePeakIntensityByRegion = new double[numberOfRegions]; for (int i = 0; i < basePeakIntensityByRegion.Length; i++) { basePeakIntensityByRegion[i] = 1; } int regionSelector = (int)(maxPeakMass / numberOfRegions); foreach (var peak in result) { peak.Intensity = Math.Sqrt(peak.Intensity); int mzBin = (int)Math.Round(peak.Mz / binWidth); int normalizationIndex = mzBin / regionSelector; if (IsValidIndex(normalizationIndex, numberOfRegions)) { basePeakIntensityByRegion[normalizationIndex] = Math.Max(basePeakIntensityByRegion[normalizationIndex], peak.Intensity); } } // Normalize peaks in each region from 0 to 50. // Use base peak in each region for normalization. foreach (var peak in result) { int mzBin = (int)Math.Round(peak.Mz / binWidth); int normalizationIndex = mzBin / regionSelector; if (IsValidIndex(normalizationIndex, numberOfRegions)) { peak.Intensity = (peak.Intensity / basePeakIntensityByRegion[normalizationIndex]) * 50; } } return(result); }