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)); }
public static QuantificationScan GetQuantificationScan(this PeakList <Peak> observed, List <Envelope> theoretical, double mzTolerance) { QuantificationScan result = new QuantificationScan(); result.Envelopes = new List <QuantificationEnvelope>(); foreach (var mz in theoretical) { var pkl = observed.FindEnvelopeDirectly(mz, mzTolerance, () => new Peak()); result.Envelopes.Add(new QuantificationEnvelope(mz.ToArray(), pkl.ToArray())); } return(result); }
private SilacPeakListPair GetLightHeavyPeakList(IRawFile rawFile, SilacCompoundInfo sci, int maxIndex, double mzTolerance, int scan, bool force = false) { PeakList <Peak> pkl = rawFile.GetPeakList(scan); if (pkl.Count == 0) { return(null); } var scantime = new ScanTime(scan, rawFile.ScanToRetentionTime(scan)); PeakList <Peak> light = pkl.FindEnvelopeDirectly(sci.Light.Profile, option.ProfileLength, mzTolerance, () => new Peak()); //如果电荷不对,则认为该scan无效。 if (!CheckPeakListCharge(light, maxIndex, sci.Light.Charge) && !force) { return(null); } PeakList <Peak> heavy = pkl.FindEnvelopeDirectly(sci.Heavy.Profile, option.ProfileLength, mzTolerance, () => new Peak()); //如果电荷不对,则认为该scan无效。 if (!CheckPeakListCharge(heavy, maxIndex, sci.Heavy.Charge) && !force) { return(null); } //如果轻或者重的总强度为0,则认为该scan无效。 if ((0 == light.Sum(m => m.Intensity) || 0 == heavy.Sum(m => m.Intensity)) && !force) { return(null); } light.ScanTimes.Add(scantime); heavy.ScanTimes.Add(scantime); return(new SilacPeakListPair(light, heavy)); }
public override IEnumerable <string> Process(string targetDir) { foreach (var raw in rawFiles) { List <RetentionTimePeak> waitingPeaks = new List <RetentionTimePeak>(); foreach (var peak in targetPeaks) { string file = GetTargetFile(targetDir, raw, peak); if (force || !File.Exists(file)) { waitingPeaks.Add(peak); } } if (waitingPeaks.Count == 0) { continue; } rawReader.Open(raw); try { int firstScan = rawReader.GetFirstSpectrumNumber(); int lastScan = rawReader.GetLastSpectrumNumber(); waitingPeaks.ForEach(m => m.Chromotographs.Clear()); for (int scan = firstScan; scan <= lastScan; scan++) { if (rawReader.GetMsLevel(scan) != 1) { continue; } if (Progress.IsCancellationPending()) { throw new UserTerminatedException(); } PeakList <Peak> pkl = rawReader.GetPeakList(scan); double rt = rawReader.ScanToRetentionTime(scan); var st = new ScanTime(scan, rt); foreach (var peak in waitingPeaks) { var env = pkl.FindEnvelopeDirectly(peak.PeakEnvelope, peak.MzTolerance, () => new Peak()); env.ScanTimes.Add(st); peak.Chromotographs.Add(env); } } waitingPeaks.ForEach(m => m.TrimPeaks()); } finally { rawReader.Close(); } foreach (var peak in waitingPeaks) { string file = GetTargetFile(targetDir, raw, peak); new RetentionTimePeakXmlFormat().WriteToFile(file, peak); } } return(new string[] { targetDir }); }