Skip to content

Commit 356f474

Browse files
committed
handle edge case: all null PrecursorIntensity falls back to Score for normalization
When every filtered result has null PrecursorIntensity in PrecursorIntensity mode, fall back to Score to derive a meaningful min/max/range instead of showing '0 - 0' on the gradient bar. Adds test coverage for this path.
1 parent b04e8fe commit 356f474

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

MetaMorpheus/GuiFunctions/MetaDraw/BioPolymerCoverage/BioPolymerCoverageMapViewModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,8 @@ private void Redraw()
297297
? r.Match.PrecursorIntensity ?? double.NaN
298298
: r.Match.Score)
299299
.Where(v => !double.IsNaN(v)).ToList();
300+
if (vals.Count == 0 && _colorBy == ColorResultsBy.PrecursorIntensity)
301+
vals = filteredResults.Select(r => r.Match.Score).ToList();
300302
if (vals.Count > 0) { minVal = vals.Min(); maxVal = vals.Max(); }
301303
range = maxVal - minVal;
302304
if (range < double.Epsilon) range = 1;

MetaMorpheus/Test/MetaDraw/BioPolymerCoverageMapViewModelTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,9 +474,12 @@ public void Plotting_WithPrecursorIntensity_SomeNull_DoesNotCrash()
474474
vm.ColorBy = ColorResultsBy.PrecursorIntensity;
475475

476476
var matchWithIntensity = new DummySpectralmatch();
477+
matchWithIntensity.SetScore(200);
477478
var matchNullIntensity = new DummySpectralmatch();
479+
matchNullIntensity.SetScore(100);
478480
var backingField = typeof(SpectrumMatchFromTsv)
479481
.GetField("<PrecursorIntensity>k__BackingField", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
482+
backingField.SetValue(matchWithIntensity, 500000.0);
480483
backingField.SetValue(matchNullIntensity, null);
481484

482485
var result1 = new BioPolymerCoverageResultModel(matchWithIntensity, "ABC", 1, 2, BioPolymerCoverageType.Unique);
@@ -488,5 +491,29 @@ public void Plotting_WithPrecursorIntensity_SomeNull_DoesNotCrash()
488491
Assert.That(vm.CoverageDrawing, Is.Not.Null);
489492
}
490493

494+
[Test]
495+
public void Plotting_WithPrecursorIntensity_AllNull_FallsBackToScore()
496+
{
497+
var vm = new BioPolymerCoverageMapViewModel();
498+
vm.ColorBy = ColorResultsBy.PrecursorIntensity;
499+
500+
var match1 = new DummySpectralmatch();
501+
match1.SetScore(10);
502+
var match2 = new DummySpectralmatch();
503+
match2.SetScore(1000);
504+
var backingField = typeof(SpectrumMatchFromTsv)
505+
.GetField("<PrecursorIntensity>k__BackingField", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
506+
backingField.SetValue(match1, null);
507+
backingField.SetValue(match2, null);
508+
509+
var result1 = new BioPolymerCoverageResultModel(match1, "ABC", 1, 2, BioPolymerCoverageType.Unique);
510+
var result2 = new BioPolymerCoverageResultModel(match2, "ABC", 2, 3, BioPolymerCoverageType.Unique);
511+
512+
var group = new BioPolymerGroupViewModel("ACC", "Prot", "ABC", new[] { result1, result2 });
513+
vm.Group = group;
514+
515+
Assert.That(vm.CoverageDrawing, Is.Not.Null);
516+
}
517+
491518
#endregion
492519
}

0 commit comments

Comments
 (0)