Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionResultAssemblyFactory.cs
===================================================================
diff -u -rd9740335fddaaba932a70c4089a3711f256d1d9f -r4e9e1bc4a1133138ee51c3a62a885010832f6d7f
--- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionResultAssemblyFactory.cs (.../PipingFailureMechanismSectionResultAssemblyFactory.cs) (revision d9740335fddaaba932a70c4089a3711f256d1d9f)
+++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionResultAssemblyFactory.cs (.../PipingFailureMechanismSectionResultAssemblyFactory.cs) (revision 4e9e1bc4a1133138ee51c3a62a885010832f6d7f)
@@ -28,6 +28,7 @@
using Ringtoets.Common.Data.AssessmentSection;
using Ringtoets.Common.Data.Exceptions;
using Ringtoets.Common.Data.Probability;
+using Ringtoets.Common.Primitives;
namespace Ringtoets.Piping.Data
{
@@ -116,11 +117,7 @@
failureMechanismSectionResult.DetailedAssessmentResult,
failureMechanismSectionResult.GetDetailedAssessmentProbability(calculationScenarios, failureMechanism, assessmentSection),
failureMechanism.PipingProbabilityAssessmentInput.GetN(failureMechanismSectionResult.Section.Length),
- new AssemblyCategoriesInput(failureMechanism.PipingProbabilityAssessmentInput.GetN(
- failureMechanism.PipingProbabilityAssessmentInput.SectionLength),
- failureMechanism.Contribution,
- assessmentSection.FailureMechanismContribution.SignalingNorm,
- assessmentSection.FailureMechanismContribution.LowerLimitNorm));
+ CreateAssemblyCategoriesInput(failureMechanism, assessmentSection));
}
catch (FailureMechanismSectionAssemblyCalculatorException e)
{
@@ -169,11 +166,7 @@
failureMechanismSectionResult.TailorMadeAssessmentResult,
failureMechanismSectionResult.TailorMadeAssessmentProbability,
failureMechanism.PipingProbabilityAssessmentInput.GetN(failureMechanismSectionResult.Section.Length),
- new AssemblyCategoriesInput(failureMechanism.PipingProbabilityAssessmentInput.GetN(
- failureMechanism.PipingProbabilityAssessmentInput.SectionLength),
- failureMechanism.Contribution,
- assessmentSection.FailureMechanismContribution.SignalingNorm,
- assessmentSection.FailureMechanismContribution.LowerLimitNorm));
+ CreateAssemblyCategoriesInput(failureMechanism, assessmentSection));
}
catch (FailureMechanismSectionAssemblyCalculatorException e)
{
@@ -238,5 +231,98 @@
throw new AssemblyException(e.Message, e);
}
}
+
+ ///
+ /// Assembles the failure mechanism assembly.
+ ///
+ /// The failure mechanism section results to
+ /// get the assembly for.
+ /// The calculation scenarios belonging to this failure mechanism.
+ /// The failure mechanism this 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,
+ IEnumerable calculationScenarios,
+ PipingFailureMechanism failureMechanism,
+ IAssessmentSection assessmentSection,
+ bool considerManualAssembly = true)
+ {
+ if (failureMechanismSectionResults == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanismSectionResults));
+ }
+
+ if (calculationScenarios == null)
+ {
+ throw new ArgumentNullException(nameof(calculationScenarios));
+ }
+
+ 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 (PipingFailureMechanismSectionResult sectionResult in failureMechanismSectionResults)
+ {
+ if (sectionResult.UseManualAssemblyProbability && considerManualAssembly)
+ {
+ sectionAssemblies.Add(sectionCalculator.AssembleDetailedAssessment(
+ DetailedAssessmentProbabilityOnlyResultType.Probability,
+ sectionResult.ManualAssemblyProbability,
+ failureMechanism.PipingProbabilityAssessmentInput.GetN(sectionResult.Section.Length),
+ assemblyCategoriesInput));
+ }
+ else
+ {
+ sectionAssemblies.Add(AssembleCombinedAssessment(sectionResult,
+ calculationScenarios,
+ failureMechanism,
+ assessmentSection));
+ }
+ }
+
+ IFailureMechanismAssemblyCalculator calculator =
+ calculatorFactory.CreateFailureMechanismAssemblyCalculator(AssemblyToolKernelFactory.Instance);
+
+ return calculator.AssembleFailureMechanism(sectionAssemblies, assemblyCategoriesInput);
+ }
+ catch (FailureMechanismSectionAssemblyCalculatorException e)
+ {
+ throw new AssemblyException(e.Message, e);
+ }
+ catch (FailureMechanismAssemblyCalculatorException e)
+ {
+ throw new AssemblyException(e.Message, e);
+ }
+ }
+
+ private static AssemblyCategoriesInput CreateAssemblyCategoriesInput(PipingFailureMechanism failureMechanism,
+ IAssessmentSection assessmentSection)
+ {
+ return new AssemblyCategoriesInput(failureMechanism.PipingProbabilityAssessmentInput.GetN(
+ failureMechanism.PipingProbabilityAssessmentInput.SectionLength),
+ failureMechanism.Contribution,
+ assessmentSection.FailureMechanismContribution.SignalingNorm,
+ assessmentSection.FailureMechanismContribution.LowerLimitNorm);
+ }
}
}
\ No newline at end of file