From 09d14b97e36d2d67fb469872c57e6b0177384742 Mon Sep 17 00:00:00 2001 From: nickshulman Date: Fri, 11 Oct 2024 09:47:09 -0700 Subject: [PATCH] Fix AssumptionException in PeakMatcher.cs (#3190) Fixed error doing "Apply peak to all" when a particular replicate has no chromatograms that match transitions in the document but does have some hidden MS1 chromatograms (reported by Jeannie) --- pwiz_tools/Skyline/Model/PeakMatcher.cs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 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)