public Xic GetProductExtractedIonChromatogram(double minMz, double maxMz, double precursorIonMz) { var xic = new Xic(); foreach (var isolationWindow in GetIsoWindows(precursorIonMz)) { var peakList = _isoWindowToChromPeaks[isolationWindow]; xic.AddRange(GetXicPointsWithin(minMz, maxMz, peakList)); } xic.Sort(); return Xic.GetSelectedXic(xic); }
public Xic GetProductExtractedIonChromatogram(double minMz, double maxMz, double precursorIonMz) { var xic = new Xic(); foreach (var isolationWindow in GetIsoWindows(precursorIonMz)) { var peakList = _isoWindowToChromPeaks[isolationWindow]; xic.AddRange(GetXicPointsWithin(minMz, maxMz, peakList)); } xic.Sort(); return(Xic.GetSelectedXic(xic)); }
/// <summary> /// Get a segment of Xic containing the targetScanNum /// </summary> /// <param name="xic">xic to be trimmed</param> /// <param name="targetScanNum">target scan number to generate xic</param> /// <param name="tolerance">number of scans that can be tolerated</param> /// <returns>Trimmed XIC around targetScanNum</returns> public Xic GetTrimmedXic(Xic xic, int targetScanNum, int tolerance = 3) { var index = xic.BinarySearch(new XicPoint(targetScanNum, 0, 0)); if (index < 0) index = ~index; var xicSegment = new Xic(); var curScanNum = targetScanNum; // go down var i = index - 1; while (i >= 0 && i < xic.Count) { var xicPeak = xic[i]; // check whether there's no MS1 scan in between var isConsecutive = true; var numMissingScans = 0; for (var scanNum = xicPeak.ScanNum + 1; scanNum < curScanNum; scanNum++) { if (GetMsLevel(scanNum) == 1) ++numMissingScans; if (numMissingScans > tolerance) { isConsecutive = false; break; } } if (isConsecutive) xicSegment.Add(xicPeak); else break; curScanNum = xicPeak.ScanNum; --i; } // go up i = index; curScanNum = targetScanNum; while (i >= 0 && i < xic.Count) { var xicPeak = xic[i]; // check whether there's no MS1 scan in between var numMissingScans = 0; var isConsecutive = true; for (var scanNum = curScanNum + 1; scanNum < xicPeak.ScanNum; scanNum++) { if (GetMsLevel(scanNum) == 1) ++numMissingScans; if (numMissingScans > tolerance) { isConsecutive = false; break; } } if (isConsecutive) xicSegment.Add(xicPeak); else break; curScanNum = xicPeak.ScanNum; ++i; } xicSegment.Sort(); return xicSegment; }
/// <summary> /// Get a segment of Xic containing the targetScanNum /// </summary> /// <param name="xic">xic to be trimmed</param> /// <param name="targetScanNum">target scan number to generate xic</param> /// <param name="tolerance">number of scans that can be tolerated</param> /// <returns>Trimmed XIC around targetScanNum</returns> public Xic GetTrimmedXic(Xic xic, int targetScanNum, int tolerance = 3) { var index = xic.BinarySearch(new XicPoint(targetScanNum, 0, 0)); if (index < 0) { index = ~index; } var xicSegment = new Xic(); var curScanNum = targetScanNum; // go down var i = index - 1; while (i >= 0 && i < xic.Count) { var xicPeak = xic[i]; // check whether there's no MS1 scan in between var isConsecutive = true; var numMissingScans = 0; for (var scanNum = xicPeak.ScanNum + 1; scanNum < curScanNum; scanNum++) { if (GetMsLevel(scanNum) == 1) { ++numMissingScans; } if (numMissingScans > tolerance) { isConsecutive = false; break; } } if (isConsecutive) { xicSegment.Add(xicPeak); } else { break; } curScanNum = xicPeak.ScanNum; --i; } // go up i = index; curScanNum = targetScanNum; while (i >= 0 && i < xic.Count) { var xicPeak = xic[i]; // check whether there's no MS1 scan in between var numMissingScans = 0; var isConsecutive = true; for (var scanNum = curScanNum + 1; scanNum < xicPeak.ScanNum; scanNum++) { if (GetMsLevel(scanNum) == 1) { ++numMissingScans; } if (numMissingScans > tolerance) { isConsecutive = false; break; } } if (isConsecutive) { xicSegment.Add(xicPeak); } else { break; } curScanNum = xicPeak.ScanNum; ++i; } xicSegment.Sort(); return(xicSegment); }