Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionDetailedAssessmentResultExtensions.cs =================================================================== diff -u -r4cced5dc46fe7dd8896ad15d1ec190dec9b2358e -r40cbb4e66eedb0468bc0256f49b1d1c02a1b6086 --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionDetailedAssessmentResultExtensions.cs (.../PipingFailureMechanismSectionDetailedAssessmentResultExtensions.cs) (revision 4cced5dc46fe7dd8896ad15d1ec190dec9b2358e) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionDetailedAssessmentResultExtensions.cs (.../PipingFailureMechanismSectionDetailedAssessmentResultExtensions.cs) (revision 40cbb4e66eedb0468bc0256f49b1d1c02a1b6086) @@ -38,17 +38,17 @@ /// /// Gets the value for the detailed assessment of safety per failure mechanism section as a probability. /// - /// The section result to get the assessment layer 2A for. + /// The section result to get the detailed assessment probability for. /// All calculations in the failure mechanism. /// The failure mechanism the calculations belong to. /// The assessment section the calculations belong to. - /// The calculated assessment layer 2A; or when there are no - /// performed calculations. + /// The calculated detailed assessment probability; or when there are no + /// performed or relevant calculations. /// Thrown when any parameter is null. public static double GetDetailedAssessmentProbability(this PipingFailureMechanismSectionResult sectionResult, - IEnumerable calculations, - PipingFailureMechanism failureMechanism, - IAssessmentSection assessmentSection) + IEnumerable calculations, + PipingFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) { if (sectionResult == null) { @@ -70,8 +70,21 @@ throw new ArgumentNullException(nameof(assessmentSection)); } + PipingCalculationScenario[] relevantScenarios = sectionResult.GetCalculationScenarios(calculations).ToArray(); + bool relevantScenarioAvailable = relevantScenarios.Length != 0; + + if (relevantScenarioAvailable && Math.Abs(sectionResult.GetTotalContribution(relevantScenarios) - 1.0) > 1e-6) + { + return double.NaN; + } + + if (!relevantScenarioAvailable || sectionResult.GetCalculationScenarioStatus(relevantScenarios) != CalculationScenarioStatus.Done) + { + return double.NaN; + } + IEnumerable calculationScenarios = sectionResult - .GetCalculationScenarios(calculations) + .GetCalculationScenarios(relevantScenarios) .Where(cs => cs.Status == CalculationScenarioStatus.Done); if (calculationScenarios.Any()) Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismSectionResultRow.cs =================================================================== diff -u -r4cced5dc46fe7dd8896ad15d1ec190dec9b2358e -r40cbb4e66eedb0468bc0256f49b1d1c02a1b6086 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismSectionResultRow.cs (.../PipingFailureMechanismSectionResultRow.cs) (revision 4cced5dc46fe7dd8896ad15d1ec190dec9b2358e) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismSectionResultRow.cs (.../PipingFailureMechanismSectionResultRow.cs) (revision 40cbb4e66eedb0468bc0256f49b1d1c02a1b6086) @@ -22,9 +22,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using System.Linq; using Ringtoets.Common.Data.AssessmentSection; -using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Forms.TypeConverters; using Ringtoets.Common.Forms.Views; using Ringtoets.Common.Primitives; @@ -120,20 +118,7 @@ { get { - PipingCalculationScenario[] relevantScenarios = SectionResult.GetCalculationScenarios(calculations).ToArray(); - bool relevantScenarioAvailable = relevantScenarios.Length != 0; - - if (relevantScenarioAvailable && Math.Abs(SectionResult.GetTotalContribution(relevantScenarios) - 1.0) > tolerance) - { - return double.NaN; - } - - if (!relevantScenarioAvailable || SectionResult.GetCalculationScenarioStatus(relevantScenarios) != CalculationScenarioStatus.Done) - { - return double.NaN; - } - - return SectionResult.GetDetailedAssessmentProbability(relevantScenarios, failureMechanism, assessmentSection); + return SectionResult.GetDetailedAssessmentProbability(calculations, failureMechanism, assessmentSection); } } Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismSectionDetailedAssessmentResultExtensionsTest.cs =================================================================== diff -u -r4cced5dc46fe7dd8896ad15d1ec190dec9b2358e -r40cbb4e66eedb0468bc0256f49b1d1c02a1b6086 --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismSectionDetailedAssessmentResultExtensionsTest.cs (.../PipingFailureMechanismSectionDetailedAssessmentResultExtensionsTest.cs) (revision 4cced5dc46fe7dd8896ad15d1ec190dec9b2358e) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismSectionDetailedAssessmentResultExtensionsTest.cs (.../PipingFailureMechanismSectionDetailedAssessmentResultExtensionsTest.cs) (revision 40cbb4e66eedb0468bc0256f49b1d1c02a1b6086) @@ -86,8 +86,8 @@ var failureMechanismSectionResult = new PipingFailureMechanismSectionResult(section); // Call - TestDelegate call = () => failureMechanismSectionResult.GetDetailedAssessmentProbability(Enumerable.Empty(), - null, + TestDelegate call = () => failureMechanismSectionResult.GetDetailedAssessmentProbability(Enumerable.Empty(), + null, assessmentSection); // Assert @@ -104,8 +104,8 @@ var failureMechanismSectionResult = new PipingFailureMechanismSectionResult(section); // Call - TestDelegate call = () => failureMechanismSectionResult.GetDetailedAssessmentProbability(Enumerable.Empty(), - new PipingFailureMechanism(), + TestDelegate call = () => failureMechanismSectionResult.GetDetailedAssessmentProbability(Enumerable.Empty(), + new PipingFailureMechanism(), null); // Assert @@ -114,7 +114,7 @@ } [Test] - public void GetDetailedAssessmentProbability_MultipleScenarios_ReturnsValueBasedOnRelevantAndDoneScenarios() + public void GetDetailedAssessmentProbability_MultipleScenarios_ReturnsValueBasedOnRelevantScenarios() { // Setup var failureMechanism = new PipingFailureMechanism(); @@ -126,30 +126,23 @@ FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); var failureMechanismSectionResult = new PipingFailureMechanismSectionResult(section); - const double contribution1 = 0.2; - const double contribution2 = 0.8; - PipingCalculationScenario pipingCalculationScenario1 = PipingCalculationScenarioTestFactory.CreatePipingCalculationScenario(section); PipingCalculationScenario pipingCalculationScenario2 = PipingCalculationScenarioTestFactory.CreatePipingCalculationScenario(section); PipingCalculationScenario pipingCalculationScenario3 = PipingCalculationScenarioTestFactory.CreatePipingCalculationScenario(section); - PipingCalculationScenario pipingCalculationScenario4 = PipingCalculationScenarioTestFactory.CreateNotCalculatedPipingCalculationScenario(section); pipingCalculationScenario1.IsRelevant = true; - pipingCalculationScenario1.Contribution = (RoundedDouble) contribution1; + pipingCalculationScenario1.Contribution = (RoundedDouble) 0.2; pipingCalculationScenario2.IsRelevant = true; - pipingCalculationScenario2.Contribution = (RoundedDouble) contribution2; + pipingCalculationScenario2.Contribution = (RoundedDouble) 0.8; pipingCalculationScenario3.IsRelevant = false; - pipingCalculationScenario4.IsRelevant = true; - var calculations = new[] { pipingCalculationScenario1, pipingCalculationScenario2, - pipingCalculationScenario3, - pipingCalculationScenario4 + pipingCalculationScenario3 }; // Call @@ -282,6 +275,40 @@ } [Test] + [TestCase(0.2, 0.8 - 1e5)] + [TestCase(0.0, 0.5)] + [TestCase(0.3, 0.7 + 1e-5)] + [TestCase(-5, -8)] + [TestCase(13, 2)] + public void GetDetailedAssessmentProbability_RelevantScenarioContributionDontAddUpTo1_ReturnNaN(double contributionA, double contributionB) + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new PipingFailureMechanism(); + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + PipingCalculationScenario scenarioA = PipingCalculationScenarioTestFactory.CreateNotCalculatedPipingCalculationScenario(section); + PipingCalculationScenario scenarioB = PipingCalculationScenarioTestFactory.CreateNotCalculatedPipingCalculationScenario(section); + scenarioA.Contribution = (RoundedDouble) contributionA; + scenarioB.Contribution = (RoundedDouble) contributionB; + + var result = new PipingFailureMechanismSectionResult(section); + + // Call + double detailedAssessment = result.GetDetailedAssessmentProbability(new[] + { + scenarioA, + scenarioB + }, failureMechanism, assessmentSection); + + // Assert + Assert.IsNaN(detailedAssessment); + mocks.VerifyAll(); + } + + [Test] public void GetTotalContribution_Always_ReturnsTotalRelevantScenarioContribution() { // Setup Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingFailureMechanismSectionResultRowTest.cs =================================================================== diff -u -r4cced5dc46fe7dd8896ad15d1ec190dec9b2358e -r40cbb4e66eedb0468bc0256f49b1d1c02a1b6086 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingFailureMechanismSectionResultRowTest.cs (.../PipingFailureMechanismSectionResultRowTest.cs) (revision 4cced5dc46fe7dd8896ad15d1ec190dec9b2358e) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingFailureMechanismSectionResultRowTest.cs (.../PipingFailureMechanismSectionResultRowTest.cs) (revision 40cbb4e66eedb0468bc0256f49b1d1c02a1b6086) @@ -161,93 +161,6 @@ } [Test] - public void DetailedAssessment_NoScenarios_ReturnNaN() - { - // Setup - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - mocks.ReplayAll(); - - var failureMechanism = new PipingFailureMechanism(); - - FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); - var result = new PipingFailureMechanismSectionResult(section); - - // Call - var row = new PipingFailureMechanismSectionResultRow(result, Enumerable.Empty(), - failureMechanism, assessmentSection); - - // Assert - Assert.IsNaN(row.DetailedAssessment); - mocks.VerifyAll(); - } - - [Test] - [TestCase(0.2, 0.8 - 1e5)] - [TestCase(0.0, 0.5)] - [TestCase(0.3, 0.7 + 1e-5)] - [TestCase(-5, -8)] - [TestCase(13, 2)] - public void DetailedAssessment_RelevantScenarioContributionDontAddUpTo1_ReturnNaN(double contributionA, double contributionB) - { - // Setup - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - mocks.ReplayAll(); - - var failureMechanism = new PipingFailureMechanism(); - - FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); - - PipingCalculationScenario scenarioA = PipingCalculationScenarioTestFactory.CreateNotCalculatedPipingCalculationScenario(section); - PipingCalculationScenario scenarioB = PipingCalculationScenarioTestFactory.CreateNotCalculatedPipingCalculationScenario(section); - scenarioA.Contribution = (RoundedDouble) contributionA; - scenarioB.Contribution = (RoundedDouble) contributionB; - - var result = new PipingFailureMechanismSectionResult(section); - var row = new PipingFailureMechanismSectionResultRow(result, new[] - { - scenarioA, - scenarioB - }, failureMechanism, assessmentSection); - - // Call - double detailedAssessment = row.DetailedAssessment; - - // Assert - Assert.IsNaN(detailedAssessment); - mocks.VerifyAll(); - } - - [Test] - public void DetailedAssessment_NoRelevantScenariosDone_ReturnNaN() - { - // Setup - var mocks = new MockRepository(); - var assessmentSection = mocks.Stub(); - mocks.ReplayAll(); - - var failureMechanism = new PipingFailureMechanism(); - - FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); - - PipingCalculationScenario scenario = PipingCalculationScenarioTestFactory.CreateNotCalculatedPipingCalculationScenario(section); - - var result = new PipingFailureMechanismSectionResult(section); - var row = new PipingFailureMechanismSectionResultRow(result, new[] - { - scenario - }, failureMechanism, assessmentSection); - - // Call - double detailedAssessment = row.DetailedAssessment; - - // Assert - Assert.IsNaN(detailedAssessment); - mocks.VerifyAll(); - } - - [Test] public void DetailedAssessment_RelevantScenariosDone_ResultOfSection() { // Setup