private O18QuanEnvelope GetCorrespondingEnvelope(IRawFile rawFile, double theoreticalMz, int charge, double mzTolerance, int scan) { PeakList <Peak> pkl = rawFile.GetPeakList(scan); if (pkl.ScanTimes.Count == 0) { pkl.ScanTimes.Add(new ScanTime(scan, rawFile.ScanToRetentionTime(scan))); } PeakList <Peak> O16 = pkl.FindEnvelopeDirectly(theoreticalMz, charge, mzTolerance, 4, () => new Peak()); PeakList <Peak> O181 = pkl.FindEnvelopeDirectly(theoreticalMz + chargeGapMap1[charge], charge, mzTolerance, 2, () => new Peak()); for (int i = 2; i < 4; i++) { if (O16[i].Intensity < O181[i - 2].Intensity) { O16[i].Mz = O181[i - 2].Mz; O16[i].Intensity = O181[i - 2].Intensity; } } PeakList <Peak> O182 = pkl.FindEnvelopeDirectly(theoreticalMz + chargeGapMap2[charge], charge, mzTolerance, 2, () => new Peak()); O16.AddRange(O182); return(new O18QuanEnvelope(O16)); }
private static void MergeTogether(double mzTolerance, PeakList <Peak> mergedEnvelopes, PeakList <Peak> envelope) { if (mergedEnvelopes.Count < envelope.Count) { PeakList <Peak> tmp = new PeakList <Peak>(mergedEnvelopes); mergedEnvelopes.Clear(); mergedEnvelopes.AddRange(envelope); mergedEnvelopes.AddToCurrentPeakListIntensity(tmp, mzTolerance); } else { mergedEnvelopes.AddToCurrentPeakListIntensity(envelope, mzTolerance); } }
public PeakList <T> Process(PeakList <T> t) { if (!t.Any(m => m.Charge > 0)) { return(t); } List <T> kept = (from p in t where p.Charge == 0 select p).ToList(); t.RemoveAll(m => m.Charge == 0); while (t.Count > 0) { var curPeaks = FindEnvelope(t, t[0], PrecursorUtils.ppm2mz(t[0].Mz, this.ppmTolerance)); t.RemoveAll(m => curPeaks.Contains(m)); if (curPeaks.Count == 1 || curPeaks[0].Intensity >= curPeaks[1].Intensity) { kept.Add(curPeaks[0]); continue; } var mass = curPeaks[0].Mz * curPeaks[0].Charge - Atom.H.MonoMass; if (mass > 1800) { kept.Add(curPeaks[0]); continue; } kept.Add(curPeaks[0]); kept.Add(curPeaks[1]); } t.AddRange(kept); t.Sort((m1, m2) => m1.Mz.CompareTo(m2.Mz)); return(t); }