diff --git a/pwiz_tools/Skyline/Model/PeakMatcher.cs b/pwiz_tools/Skyline/Model/PeakMatcher.cs index dc2618744f..118e819457 100644 --- a/pwiz_tools/Skyline/Model/PeakMatcher.cs +++ b/pwiz_tools/Skyline/Model/PeakMatcher.cs @@ -61,6 +61,8 @@ private static void GetReferenceData(SrmDocument doc, PeptideDocNode nodePep, Tr var chromGroupInfo = chromGroupInfos.FirstOrDefault(info => Equals(chromSet.GetFileInfo(tranGroupChromInfo.FileId).FilePath, info.FilePath)); if (chromGroupInfo == null || chromGroupInfo.NumPeaks == 0 || !chromGroupInfo.TimeIntensitiesGroup.HasAnyPoints) return; + if (!GetTransitionChromatogramInfos(nodeTranGroup, chromGroupInfo, mzMatchTolerance).Any()) + return; runTime = chromGroupInfo.RunStartTime; @@ -221,6 +223,8 @@ private static PeakMatch GetPeakMatch(SrmDocument doc, ChromatogramSet chromSet, var chromGroupInfo = loadInfos.FirstOrDefault(info => Equals(info.FilePath, fileInfo.FilePath)); if (chromGroupInfo == null || chromGroupInfo.NumPeaks == 0 || !chromGroupInfo.TimeIntensitiesGroup.HasAnyPoints) return null; + if (!GetTransitionChromatogramInfos(nodeTranGroup, chromGroupInfo, mzMatchTolerance).Any()) + return null; var matchData = new List(); double totalArea = chromGroupInfo.TransitionPointSets.Sum(chromInfo => chromInfo.Peaks.Sum(peak => peak.Area)); @@ -306,11 +310,8 @@ private static PeakMatch GetPeakMatch(SrmDocument doc, ChromatogramSet chromSet, ChromatogramGroupInfo chromGroupInfo, int peakIndex, float mzMatchTolerance) { ChromPeak? largestPeak = null; - foreach (var peak in - from transitionDocNode in nodeTranGroup.Transitions - select chromGroupInfo.GetTransitionInfo(transitionDocNode, mzMatchTolerance) - into chromInfo where chromInfo != null - select chromInfo.GetPeak(peakIndex)) + foreach (var peak in GetTransitionChromatogramInfos(nodeTranGroup, chromGroupInfo, mzMatchTolerance) + .Select(chromInfo => chromInfo.GetPeak(peakIndex))) { if (largestPeak == null || peak.Height > largestPeak.Value.Height) largestPeak = peak; @@ -318,6 +319,14 @@ select chromInfo.GetPeak(peakIndex)) return largestPeak; } + private static IEnumerable GetTransitionChromatogramInfos(TransitionGroupDocNode nodeTranGroup, + ChromatogramGroupInfo chromGroupInfo, float mzMatchTolerance) + { + return nodeTranGroup.Transitions + .Select(transition => chromGroupInfo.GetTransitionInfo(transition, mzMatchTolerance)) + .Where(chromatogramInfo => chromatogramInfo != null); + } + private static PeakMatch MakePeakMatchBetween(float scale, PeakMatchData referenceTarget, PeakAlignment prev, PeakAlignment next) { if (prev == null && next == null)