// Copyright (C) Stichting Deltares 2018. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System;
using Assembly.Kernel.Exceptions;
using Assembly.Kernel.Interfaces;
using Assembly.Kernel.Model;
using Assembly.Kernel.Model.AssessmentResultTypes;
using Assembly.Kernel.Model.CategoryLimits;
using Assembly.Kernel.Model.FmSectionTypes;
using Ringtoets.Common.Primitives;
using Riskeer.AssemblyTool.Data;
using Riskeer.AssemblyTool.KernelWrapper.Creators;
using Riskeer.AssemblyTool.KernelWrapper.Kernels;
using IFailureMechanismSectionAssemblyCalculatorKernel = Assembly.Kernel.Interfaces.IAssessmentResultsTranslator;
namespace Riskeer.AssemblyTool.KernelWrapper.Calculators.Assembly
{
///
/// Class representing a failure mechanism section assembly calculator.
///
public class FailureMechanismSectionAssemblyCalculator : IFailureMechanismSectionAssemblyCalculator
{
private readonly IAssemblyToolKernelFactory factory;
///
/// Creates a new instance of .
///
/// The factory responsible for creating the assembly kernel.
/// Thrown when any parameter is null.
public FailureMechanismSectionAssemblyCalculator(IAssemblyToolKernelFactory factory)
{
if (factory == null)
{
throw new ArgumentNullException(nameof(factory));
}
this.factory = factory;
}
#region Simple Assessment
public FailureMechanismSectionAssembly AssembleSimpleAssessment(SimpleAssessmentResultType input)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResultWithProbability output = kernel.TranslateAssessmentResultWbi0E1(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeE1(input));
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
public FailureMechanismSectionAssembly AssembleSimpleAssessment(SimpleAssessmentValidityOnlyResultType input)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResultWithProbability output = kernel.TranslateAssessmentResultWbi0E3(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeE2(input));
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
#endregion
#region Detailed Assessment
public FailureMechanismSectionAssemblyCategoryGroup AssembleDetailedAssessment(DetailedAssessmentResultType detailedAssessmentResult)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0G1(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG1(detailedAssessmentResult));
return FailureMechanismSectionAssemblyCreator.CreateFailureMechanismSectionAssemblyCategoryGroup(output.Result);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
public FailureMechanismSectionAssembly AssembleDetailedAssessment(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult,
double probability,
AssemblyCategoriesInput assemblyCategoriesInput)
{
return GetDetailedAssembly(detailedAssessmentResult, probability, assemblyCategoriesInput);
}
public FailureMechanismSectionAssembly AssembleDetailedAssessment(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult,
double probability,
double failureMechanismSectionN,
AssemblyCategoriesInput assemblyCategoriesInput)
{
return GetDetailedAssembly(detailedAssessmentResult, probability, failureMechanismSectionN, assemblyCategoriesInput);
}
public FailureMechanismSectionAssembly AssembleDetailedAssessment(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult,
double probability,
double normativeNorm,
double failureMechanismN,
double failureMechanismContribution)
{
try
{
ICategoryLimitsCalculator categoriesKernel = factory.CreateAssemblyCategoriesKernel();
CategoriesList categories = categoriesKernel.CalculateFmSectionCategoryLimitsWbi02(
normativeNorm,
new FailureMechanism(failureMechanismN, failureMechanismContribution));
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResultWithProbability output =
kernel.TranslateAssessmentResultWbi0G3(GetAssessmentResultTypeG2(detailedAssessmentResult, probability),
probability,
categories);
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
public FailureMechanismSectionAssemblyCategoryGroup AssembleDetailedAssessment(
DetailedAssessmentResultType detailedAssessmentResultForFactorizedSignalingNorm,
DetailedAssessmentResultType detailedAssessmentResultForSignalingNorm,
DetailedAssessmentResultType detailedAssessmentResultForMechanismSpecificLowerLimitNorm,
DetailedAssessmentResultType detailedAssessmentResultForLowerLimitNorm,
DetailedAssessmentResultType detailedAssessmentResultForFactorizedLowerLimitNorm)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0G6(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateCategoryCompliancyResults(
detailedAssessmentResultForFactorizedSignalingNorm,
detailedAssessmentResultForSignalingNorm,
detailedAssessmentResultForMechanismSpecificLowerLimitNorm,
detailedAssessmentResultForLowerLimitNorm,
detailedAssessmentResultForFactorizedLowerLimitNorm));
return FailureMechanismSectionAssemblyCreator.CreateFailureMechanismSectionAssemblyCategoryGroup(output.Result);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
private FailureMechanismSectionAssembly GetDetailedAssembly(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult,
double probability,
AssemblyCategoriesInput assemblyCategoriesInput)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResultWithProbability output =
kernel.TranslateAssessmentResultWbi0G3(GetAssessmentResultTypeG2(detailedAssessmentResult, probability),
probability,
GetWbi01Categories(assemblyCategoriesInput));
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
private FailureMechanismSectionAssembly GetDetailedAssembly(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult,
double probability,
double failureMechanismSectionN,
AssemblyCategoriesInput assemblyCategoriesInput)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResultWithProbability output = kernel.TranslateAssessmentResultWbi0G5(failureMechanismSectionN,
GetAssessmentResultTypeG2(detailedAssessmentResult, probability),
probability,
GetWbi01Categories(assemblyCategoriesInput));
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
private static EAssessmentResultTypeG2 GetAssessmentResultTypeG2(DetailedAssessmentProbabilityOnlyResultType detailedAssessmentResult, double probability)
{
return double.IsNaN(probability) && detailedAssessmentResult == DetailedAssessmentProbabilityOnlyResultType.Probability
? EAssessmentResultTypeG2.Gr
: FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG2(detailedAssessmentResult);
}
#endregion
#region Tailor Made Assessment
public FailureMechanismSectionAssemblyCategoryGroup AssembleTailorMadeAssessment(TailorMadeAssessmentResultType tailorMadeAssessmentResult)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0T1(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT1(tailorMadeAssessmentResult));
return FailureMechanismSectionAssemblyCreator.CreateFailureMechanismSectionAssemblyCategoryGroup(output.Result);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
public FailureMechanismSectionAssembly AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityAndDetailedCalculationResultType tailorMadeAssessmentResult,
double probability,
double normativeNorm,
double failureMechanismN,
double failureMechanismContribution)
{
try
{
ICategoryLimitsCalculator categoriesKernel = factory.CreateAssemblyCategoriesKernel();
CategoriesList categories = categoriesKernel.CalculateFmSectionCategoryLimitsWbi02(
normativeNorm,
new FailureMechanism(failureMechanismN, failureMechanismContribution));
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0T7(
double.IsNaN(probability) && tailorMadeAssessmentResult == TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.Probability
? EAssessmentResultTypeT4.Gr
: FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT4(tailorMadeAssessmentResult),
probability,
categories);
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
public FailureMechanismSectionAssembly AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityCalculationResultType tailorMadeAssessmentResult,
double probability,
AssemblyCategoriesInput assemblyCategoriesInput)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResultWithProbability output = kernel.TranslateAssessmentResultWbi0T3(
double.IsNaN(probability) && tailorMadeAssessmentResult == TailorMadeAssessmentProbabilityCalculationResultType.Probability
? EAssessmentResultTypeT3.Gr
: FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT3(tailorMadeAssessmentResult),
probability,
GetWbi01Categories(assemblyCategoriesInput));
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
private CategoriesList GetWbi01Categories(AssemblyCategoriesInput assemblyCategoriesInput)
{
ICategoryLimitsCalculator categoriesKernel = factory.CreateAssemblyCategoriesKernel();
return categoriesKernel.CalculateFmSectionCategoryLimitsWbi01(
new AssessmentSection(1, assemblyCategoriesInput.SignalingNorm, assemblyCategoriesInput.LowerLimitNorm),
new FailureMechanism(assemblyCategoriesInput.N, assemblyCategoriesInput.FailureMechanismContribution));
}
public FailureMechanismSectionAssembly AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityCalculationResultType tailorMadeAssessmentResult,
double probability,
double failureMechanismSectionN,
AssemblyCategoriesInput assemblyCategoriesInput)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResultWithProbability output = kernel.TranslateAssessmentResultWbi0T5(
failureMechanismSectionN,
double.IsNaN(probability) && tailorMadeAssessmentResult == TailorMadeAssessmentProbabilityCalculationResultType.Probability
? EAssessmentResultTypeT3.Gr
: FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT3(tailorMadeAssessmentResult),
probability,
GetWbi01Categories(assemblyCategoriesInput));
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
public FailureMechanismSectionAssemblyCategoryGroup AssembleTailorMadeAssessment(
TailorMadeAssessmentCategoryGroupResultType tailorMadeAssessmentResult)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
Tuple input =
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT3WithCategoryGroupResult(
tailorMadeAssessmentResult);
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0T4(input.Item1, input.Item2);
return FailureMechanismSectionAssemblyCreator.CreateFailureMechanismSectionAssemblyCategoryGroup(output.Result);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
#endregion
#region Combined Assembly
public FailureMechanismSectionAssembly AssembleCombined(FailureMechanismSectionAssembly simpleAssembly)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResultWithProbability output = kernel.TranslateAssessmentResultWbi0A1(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(simpleAssembly),
null,
null);
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
public FailureMechanismSectionAssembly AssembleCombined(FailureMechanismSectionAssembly simpleAssembly,
FailureMechanismSectionAssembly detailedAssembly,
FailureMechanismSectionAssembly tailorMadeAssembly)
{
try
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResultWithProbability output = kernel.TranslateAssessmentResultWbi0A1(
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(simpleAssembly),
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(detailedAssembly),
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(tailorMadeAssembly));
return FailureMechanismSectionAssemblyCreator.Create(output);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
public FailureMechanismSectionAssemblyCategoryGroup AssembleCombined(FailureMechanismSectionAssemblyCategoryGroup simpleAssembly)
{
try
{
return AssembleCombined(FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(simpleAssembly),
null,
null);
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
public FailureMechanismSectionAssemblyCategoryGroup AssembleCombined(FailureMechanismSectionAssemblyCategoryGroup simpleAssembly,
FailureMechanismSectionAssemblyCategoryGroup tailorMadeAssembly)
{
try
{
return AssembleCombined(FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(simpleAssembly),
null,
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(tailorMadeAssembly));
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
public FailureMechanismSectionAssemblyCategoryGroup AssembleCombined(FailureMechanismSectionAssemblyCategoryGroup simpleAssembly,
FailureMechanismSectionAssemblyCategoryGroup detailedAssembly,
FailureMechanismSectionAssemblyCategoryGroup tailorMadeAssembly)
{
try
{
return AssembleCombined(FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(simpleAssembly),
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(detailedAssembly),
FailureMechanismSectionAssemblyCalculatorInputCreator.CreateFailureMechanismSectionAssemblyDirectResult(tailorMadeAssembly));
}
catch (AssemblyException e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateErrorMessage(e.Errors), e);
}
catch (Exception e)
{
throw new FailureMechanismSectionAssemblyCalculatorException(AssemblyErrorMessageCreator.CreateGenericErrorMessage(), e);
}
}
///
/// Assembles the combined assembly based on the input parameters.
///
/// The simple assembly result.
/// The simple assembly result.
/// The tailor made assembly result.
/// A .
/// Thrown when an error occurs while assembling.
private FailureMechanismSectionAssemblyCategoryGroup AssembleCombined(FmSectionAssemblyDirectResult simpleAssemblyResult,
FmSectionAssemblyDirectResult detailedAssemblyResult,
FmSectionAssemblyDirectResult tailorMadeAssemblyResult)
{
IFailureMechanismSectionAssemblyCalculatorKernel kernel = factory.CreateFailureMechanismSectionAssemblyKernel();
FmSectionAssemblyDirectResult output = kernel.TranslateAssessmentResultWbi0A1(
simpleAssemblyResult,
detailedAssemblyResult,
tailorMadeAssemblyResult);
return FailureMechanismSectionAssemblyCreator.CreateFailureMechanismSectionAssemblyCategoryGroup(output.Result);
}
#endregion
#region Manual Assembly
public FailureMechanismSectionAssembly AssembleManual(double probability,
AssemblyCategoriesInput assemblyCategoriesInput)
{
return GetDetailedAssembly(DetailedAssessmentProbabilityOnlyResultType.Probability, probability, assemblyCategoriesInput);
}
public FailureMechanismSectionAssembly AssembleManual(double probability,
double failureMechanismSectionN,
AssemblyCategoriesInput assemblyCategoriesInput)
{
return GetDetailedAssembly(DetailedAssessmentProbabilityOnlyResultType.Probability, probability, failureMechanismSectionN, assemblyCategoriesInput);
}
#endregion
}
}