Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionResultAssemblyFactory.cs =================================================================== diff -u -r30887a6122283cc84b13770b8dad382ff3242612 -r4e9e1bc4a1133138ee51c3a62a885010832f6d7f --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionResultAssemblyFactory.cs (.../PipingFailureMechanismSectionResultAssemblyFactory.cs) (revision 30887a6122283cc84b13770b8dad382ff3242612) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanismSectionResultAssemblyFactory.cs (.../PipingFailureMechanismSectionResultAssemblyFactory.cs) (revision 4e9e1bc4a1133138ee51c3a62a885010832f6d7f) @@ -25,10 +25,10 @@ using Ringtoets.AssemblyTool.KernelWrapper.Calculators; using Ringtoets.AssemblyTool.KernelWrapper.Calculators.Assembly; using Ringtoets.AssemblyTool.KernelWrapper.Kernels; -using Ringtoets.Common.Data.AssemblyTool; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Exceptions; using Ringtoets.Common.Data.Probability; +using Ringtoets.Common.Primitives; namespace Ringtoets.Piping.Data { @@ -113,18 +113,11 @@ try { - IEnumerable categories = - AssemblyToolCategoriesFactory.CreateFailureMechanismSectionAssemblyCategories( - assessmentSection.FailureMechanismContribution.SignalingNorm, - assessmentSection.FailureMechanismContribution.LowerLimitNorm, - failureMechanism.Contribution, - failureMechanism.PipingProbabilityAssessmentInput.GetN(failureMechanism.PipingProbabilityAssessmentInput.SectionLength)); - return calculator.AssembleDetailedAssessment( failureMechanismSectionResult.DetailedAssessmentResult, failureMechanismSectionResult.GetDetailedAssessmentProbability(calculationScenarios, failureMechanism, assessmentSection), - categories, - failureMechanism.PipingProbabilityAssessmentInput.GetN(failureMechanismSectionResult.Section.Length)); + failureMechanism.PipingProbabilityAssessmentInput.GetN(failureMechanismSectionResult.Section.Length), + CreateAssemblyCategoriesInput(failureMechanism, assessmentSection)); } catch (FailureMechanismSectionAssemblyCalculatorException e) { @@ -169,18 +162,11 @@ try { - IEnumerable categories = - AssemblyToolCategoriesFactory.CreateFailureMechanismSectionAssemblyCategories( - assessmentSection.FailureMechanismContribution.SignalingNorm, - assessmentSection.FailureMechanismContribution.LowerLimitNorm, - failureMechanism.Contribution, - failureMechanism.PipingProbabilityAssessmentInput.GetN(failureMechanism.PipingProbabilityAssessmentInput.SectionLength)); - return calculator.AssembleTailorMadeAssessment( failureMechanismSectionResult.TailorMadeAssessmentResult, failureMechanismSectionResult.TailorMadeAssessmentProbability, - categories, - failureMechanism.PipingProbabilityAssessmentInput.GetN(failureMechanismSectionResult.Section.Length)); + failureMechanism.PipingProbabilityAssessmentInput.GetN(failureMechanismSectionResult.Section.Length), + CreateAssemblyCategoriesInput(failureMechanism, assessmentSection)); } catch (FailureMechanismSectionAssemblyCalculatorException e) { @@ -245,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