Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Data/StabilityPointStructuresFailureMechanismSectionResultAssemblyFactory.cs
===================================================================
diff -u -r02a11872033c745f92623cedf5dcd8136048e255 -r7003456bfaf9a95b3a222c764aba69ed4f75c67b
--- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Data/StabilityPointStructuresFailureMechanismSectionResultAssemblyFactory.cs (.../StabilityPointStructuresFailureMechanismSectionResultAssemblyFactory.cs) (revision 02a11872033c745f92623cedf5dcd8136048e255)
+++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Data/StabilityPointStructuresFailureMechanismSectionResultAssemblyFactory.cs (.../StabilityPointStructuresFailureMechanismSectionResultAssemblyFactory.cs) (revision 7003456bfaf9a95b3a222c764aba69ed4f75c67b)
@@ -20,12 +20,14 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
using Ringtoets.AssemblyTool.Data;
using Ringtoets.AssemblyTool.KernelWrapper.Calculators;
using Ringtoets.AssemblyTool.KernelWrapper.Calculators.Assembly;
using Ringtoets.AssemblyTool.KernelWrapper.Kernels;
using Ringtoets.Common.Data.AssessmentSection;
using Ringtoets.Common.Data.Exceptions;
+using Ringtoets.Common.Primitives;
namespace Ringtoets.StabilityPointStructures.Data
{
@@ -106,10 +108,7 @@
return calculator.AssembleDetailedAssessment(
failureMechanismSectionResult.DetailedAssessmentResult,
failureMechanismSectionResult.GetDetailedAssessmentProbability(failureMechanism, assessmentSection),
- new AssemblyCategoriesInput(failureMechanism.GeneralInput.N,
- failureMechanism.Contribution,
- assessmentSection.FailureMechanismContribution.SignalingNorm,
- assessmentSection.FailureMechanismContribution.LowerLimitNorm));
+ CreateAssemblyCategoriesInput(failureMechanism, assessmentSection));
}
catch (FailureMechanismSectionAssemblyCalculatorException e)
{
@@ -157,10 +156,7 @@
return calculator.AssembleTailorMadeAssessment(
failureMechanismSectionResult.TailorMadeAssessmentResult,
failureMechanismSectionResult.TailorMadeAssessmentProbability,
- new AssemblyCategoriesInput(failureMechanism.GeneralInput.N,
- failureMechanism.Contribution,
- assessmentSection.FailureMechanismContribution.SignalingNorm,
- assessmentSection.FailureMechanismContribution.LowerLimitNorm));
+ CreateAssemblyCategoriesInput(failureMechanism, assessmentSection));
}
catch (FailureMechanismSectionAssemblyCalculatorException e)
{
@@ -216,5 +212,84 @@
throw new AssemblyException(e.Message, e);
}
}
+
+ ///
+ /// Assembles the failure mechanism assembly.
+ ///
+ /// The failure mechanism section results to
+ /// get the assembly for.
+ /// The failure mechanism to assemble for.
+ /// The the failure mechanism belongs to.
+ /// Indicator whether the manual assembly should be used in the assembly.
+ /// A .
+ /// Thrown when any parameter is null.
+ /// Thrown when the
+ /// could not be created.
+ public static FailureMechanismAssembly AssembleFailureMechanism(
+ IEnumerable failureMechanismSectionResults,
+ StabilityPointStructuresFailureMechanism failureMechanism,
+ IAssessmentSection assessmentSection,
+ bool considerManualAssembly = true)
+ {
+ if (failureMechanismSectionResults == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanismSectionResults));
+ }
+
+ if (failureMechanism == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanism));
+ }
+
+ if (assessmentSection == null)
+ {
+ throw new ArgumentNullException(nameof(assessmentSection));
+ }
+
+ IAssemblyToolCalculatorFactory calculatorFactory = AssemblyToolCalculatorFactory.Instance;
+ IFailureMechanismSectionAssemblyCalculator sectionCalculator =
+ calculatorFactory.CreateFailureMechanismSectionAssemblyCalculator(AssemblyToolKernelFactory.Instance);
+
+ AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(failureMechanism, assessmentSection);
+ var sectionAssemblies = new List();
+
+ try
+ {
+ foreach (StabilityPointStructuresFailureMechanismSectionResult sectionResult in failureMechanismSectionResults)
+ {
+ if (sectionResult.UseManualAssemblyProbability && considerManualAssembly)
+ {
+ sectionAssemblies.Add(sectionCalculator.AssembleDetailedAssessment(
+ DetailedAssessmentProbabilityOnlyResultType.Probability,
+ sectionResult.ManualAssemblyProbability,
+ assemblyCategoriesInput));
+ }
+ else
+ {
+ sectionAssemblies.Add(AssembleCombinedAssessment(sectionResult,
+ failureMechanism,
+ assessmentSection));
+ }
+ }
+
+ IFailureMechanismAssemblyCalculator calculator =
+ calculatorFactory.CreateFailureMechanismAssemblyCalculator(AssemblyToolKernelFactory.Instance);
+
+ return calculator.AssembleFailureMechanism(sectionAssemblies, assemblyCategoriesInput);
+ }
+ catch (Exception e) when (e is FailureMechanismAssemblyCalculatorException || e is FailureMechanismSectionAssemblyCalculatorException)
+ {
+ throw new AssemblyException(e.Message, e);
+ }
+ }
+
+ private static AssemblyCategoriesInput CreateAssemblyCategoriesInput(StabilityPointStructuresFailureMechanism failureMechanism,
+ IAssessmentSection assessmentSection)
+ {
+ return new AssemblyCategoriesInput(failureMechanism.GeneralInput.N,
+ failureMechanism.Contribution,
+ assessmentSection.FailureMechanismContribution.SignalingNorm,
+ assessmentSection.FailureMechanismContribution.LowerLimitNorm);
+ }
}
}
\ No newline at end of file