public void CombineLikeMZPeaks(List <MZPeak> peaks, double value) { if (peaks.Count > 0) { double currentMZ = peaks[0].MZ; double totalIntensity = peaks[0].Intensity; List <MZPeak> combinedPeaks = new List <MZPeak>(); for (int i = 1; i < peaks.Count; i++) { MZPeak currentPeak = peaks[i]; if (Math.Round(currentPeak.MZ) == Math.Round(currentMZ)) { totalIntensity += currentPeak.Intensity; } else { MZPeak newPeak = new MZPeak(Math.Round(currentMZ), totalIntensity); combinedPeaks.Add(newPeak); currentMZ = Math.Round(currentPeak.MZ); totalIntensity = currentPeak.Intensity; } } MZPeak peak = new MZPeak(currentMZ, totalIntensity); combinedPeaks.Add(peak); peaks.Clear(); peaks.AddRange(combinedPeaks); NormalizePeaksOnlyIntensities(peaks, value); } }
public RTPeak(MZPeak peak, double RT) { this._Intensity = peak.Intensity; this._MZ = peak.MZ; this._RT = RT; this._peak = peak; }
public double GetPrecusorMz(int spectrumNumber, double searchMZ, int msnOrder = 2) { int parentScanNumber = GetParentSpectrumNumber(spectrumNumber); var ms1Scan = GetSpectrum(parentScanNumber); MZPeak peak = ms1Scan.GetClosestPeak(MassRange.FromDa(searchMZ, 50)); if (peak != null) { return(peak.MZ); } return(double.NaN); }
public Feature(MZPeak firstPeak, double RT, double HCDEnergy = 0) { this.allRTPeaks = new List <RTPeak>(); this.smoothRTPeaks = new List <RTPeak>(); this.minRT = RT; this.maxRT = RT; RTPeak newRTPeak = new RTPeak(firstPeak, RT); this.allRTPeaks.Add(newRTPeak); this.maxPeak = newRTPeak; this.totalMZTimesIntensity += (firstPeak.Intensity * firstPeak.MZ); this.totalIntensity += (firstPeak.Intensity); this.averageMZ = firstPeak.MZ; newRTPeak.HCDEnergy = HCDEnergy; }
public void AddPeak(MZPeak peak, double RT, double HCDEnergy = 0) { RTPeak newRTPeak = new RTPeak(peak, RT); this.allRTPeaks.Add(newRTPeak); if (peak.Intensity > maxPeak.Intensity) { apexTime = RT; maxPeak = newRTPeak; } this.maxRT = RT; this.totalMZTimesIntensity += (peak.Intensity * peak.MZ); this.totalIntensity += (peak.Intensity); this.averageMZ = (this.totalMZTimesIntensity / this.totalIntensity); newRTPeak.HCDEnergy = HCDEnergy; }
public List <MZPeak> GetPeaksFromNearestSpectrum(FeatureGroup group, ThermoRawFile rawFile) { int scanNum = rawFile.GetSpectrumNumber(group.ApexTime); List <MZPeak> returnPeaks = new List <MZPeak>(); ThermoSpectrum spectrum = rawFile.GetLabeledSpectrum(scanNum); HashSet <double> peakMZs = new HashSet <double>(); foreach (Feature feature in group.allFeatures) { MZPeak outPeak = spectrum.GetClosestPeak(MassRange.FromPPM(feature.AverageMZ, 10)); if (outPeak != null) { if (!peakMZs.Contains(outPeak.Intensity)) { returnPeaks.Add(new MZPeak(feature.AverageMZ, outPeak.Intensity)); peakMZs.Add(outPeak.Intensity); } } } returnPeaks = returnPeaks.OrderBy(x => x.MZ).ToList(); return(returnPeaks); }
private void MatchPeaks(List <Feature> features, MZPeak[] currentPeaks, double ppmTolerance, double rt, bool allowMultipleFeatureMatches = false) { if (features == null || currentPeaks == null) { return; } int fCount = features.Count; if (fCount == 0) { features.AddRange(currentPeaks.Select(p => new Feature(p, rt))); return; } int cCount = currentPeaks.Length; if (cCount == 0) { return; } int c = 0; int f = 0; Feature feature = features[f]; double featureMZ = feature.AverageMZ; MZPeak cPeak = currentPeaks[c]; ppmTolerance /= 2e6; double tolerance = cPeak.MZ * ppmTolerance; double lowmz = cPeak.MZ - tolerance; List <Feature> featuresToAdd = new List <Feature>(cCount); while (true) { if (featureMZ < lowmz) { if (++f == fCount) // Feature mz is to small, go to the next one { break; // no more features, so just break out now } feature = features[f]; featureMZ = feature.AverageMZ; continue; // keep the current peak, so continue the loop right away } if (featureMZ < cPeak.MZ + tolerance) { feature.AddPeak(cPeak, rt); // Peak matches feature, add it to the feature if (!allowMultipleFeatureMatches) { if (++f == fCount) // Feature mz is to small, go to the next one { break; // no more features, so just break out now } feature = features[f]; featureMZ = feature.AverageMZ; } } else { // Peak didn't match any features, so save this peak to start a new feature featuresToAdd.Add(new Feature(cPeak, rt)); } if (++c == cCount) { break; // no more current peaks, so just break out now } cPeak = currentPeaks[c]; tolerance = cPeak.MZ * ppmTolerance; lowmz = cPeak.MZ - tolerance; } // Append unmatched peaks as new features features.AddRange(featuresToAdd); // Add left over peaks as new features while (c < cCount) { features.Add(new Feature(currentPeaks[c++], rt)); } }