Index: Ringtoets/Piping/src/Ringtoets.Piping.Calculation/Ringtoets.Piping.Calculation.csproj =================================================================== diff -u -rdcffe8961a89f7147663f1c9b3ee4606fe611c67 -r1d8e1d2a0bb1d08433a9d6046942fa778b019489 --- Ringtoets/Piping/src/Ringtoets.Piping.Calculation/Ringtoets.Piping.Calculation.csproj (.../Ringtoets.Piping.Calculation.csproj) (revision dcffe8961a89f7147663f1c9b3ee4606fe611c67) +++ Ringtoets/Piping/src/Ringtoets.Piping.Calculation/Ringtoets.Piping.Calculation.csproj (.../Ringtoets.Piping.Calculation.csproj) (revision 1d8e1d2a0bb1d08433a9d6046942fa778b019489) @@ -93,6 +93,10 @@ Core.Common.Version False + + {d4200f43-3f72-4f42-af0a-8ced416a38ec} + Ringtoets.Common.Data + {ce994cc9-6f6a-48ac-b4be-02c30a21f4db} Ringtoets.Piping.Data Index: Ringtoets/Piping/src/Ringtoets.Piping.Calculation/SemiProbabilistic/PipingSemiProbabilisticResultTransformer.cs =================================================================== diff -u -r019c82bf6273ff150976c8c2ea9b895258951455 -r1d8e1d2a0bb1d08433a9d6046942fa778b019489 --- Ringtoets/Piping/src/Ringtoets.Piping.Calculation/SemiProbabilistic/PipingSemiProbabilisticResultTransformer.cs (.../PipingSemiProbabilisticResultTransformer.cs) (revision 019c82bf6273ff150976c8c2ea9b895258951455) +++ Ringtoets/Piping/src/Ringtoets.Piping.Calculation/SemiProbabilistic/PipingSemiProbabilisticResultTransformer.cs (.../PipingSemiProbabilisticResultTransformer.cs) (revision 1d8e1d2a0bb1d08433a9d6046942fa778b019489) @@ -9,25 +9,58 @@ /// public class PipingSemiProbabilisticResultTransformer { - private readonly PipingOutput result; + private readonly double heaveFactorOfSafety; + private readonly double upliftFactorOfSafety; + private readonly double sellmeijerFactorOfSafety; + private readonly int returnPeriod; private readonly double constantA; private readonly double constantB; private readonly double assessmentSectionLength; private readonly double contribution; /// + /// Calculates the semi-probabilistic results given a with . + /// + /// + /// + public static void Transform(PipingCalculation calculation) + { + GeneralPipingInput semiProbabilisticParameters = calculation.SemiProbabilisticParameters; + var result = calculation.Output; + + var calculator = new PipingSemiProbabilisticResultTransformer( + result.SellmeijerFactorOfSafety, + result.UpliftFactorOfSafety, + result.HeaveFactorOfSafety, + semiProbabilisticParameters.Norm, + semiProbabilisticParameters.A, + semiProbabilisticParameters.B, + semiProbabilisticParameters.SectionLength, + semiProbabilisticParameters.Contribution/100); + + calculation.SemiProbabilisticOutput = new PipingSemiProbabilisticOutput + { + PipingFactorOfSafety = calculator.FactorOfSafety() + }; + } + + /// /// Creates a new instance of . /// - /// The object containing results for piping's sub mechanisms. + /// + /// + /// /// The return period. /// The constant a. /// The constant b. /// The length of the assessment section. /// The contribution of piping to the total failure. - public PipingSemiProbabilisticResultTransformer(PipingOutput result, int returnPeriod, double constantA, double constantB, double assessmentSectionLength, double contribution) + public PipingSemiProbabilisticResultTransformer(double sellmeijerFactorOfSafety, double upliftFactorOfSafety, double heaveFactorOfSafety, int returnPeriod, double constantA, double constantB, double assessmentSectionLength, double contribution) { - this.result = result; + this.heaveFactorOfSafety = heaveFactorOfSafety; + this.upliftFactorOfSafety = upliftFactorOfSafety; + this.sellmeijerFactorOfSafety = sellmeijerFactorOfSafety; this.returnPeriod = returnPeriod; this.constantA = constantA; this.constantB = constantB; @@ -41,8 +74,7 @@ /// A value represening failure probability. public double FailureProbabilityUplift() { - var factorOfSafety = result.UpliftFactorOfSafety; - return FailureProbability(factorOfSafety, upliftFactors); + return FailureProbability(upliftFactorOfSafety, upliftFactors); } /// @@ -51,8 +83,7 @@ /// A value represening failure probability. public double FailureProbabilityHeave() { - var factorOfSafety = result.HeaveFactorOfSafety; - return FailureProbability(factorOfSafety, heaveFactors); + return FailureProbability(heaveFactorOfSafety, heaveFactors); } /// @@ -61,8 +92,7 @@ /// A value represening failure probability. public double FailureProbabilitySellmeijer() { - var factorOfSafety = result.SellmeijerFactorOfSafety; - return FailureProbability(factorOfSafety, sellmeijerFactors); + return FailureProbability(sellmeijerFactorOfSafety, sellmeijerFactors); } /// Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculation.cs =================================================================== diff -u -r1c01ea681887e96b5b80fb7d23680a4eeac9bd50 -r1d8e1d2a0bb1d08433a9d6046942fa778b019489 --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculation.cs (.../PipingCalculation.cs) (revision 1c01ea681887e96b5b80fb7d23680a4eeac9bd50) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingCalculation.cs (.../PipingCalculation.cs) (revision 1d8e1d2a0bb1d08433a9d6046942fa778b019489) @@ -50,6 +50,7 @@ Comments = new InputPlaceholder(Resources.Comments_DisplayName); InputParameters = new PipingInput(generalInputParameters); + SemiProbabilisticParameters = generalInputParameters; } /// @@ -58,6 +59,11 @@ public PlaceholderWithReadonlyName Comments { get; private set; } /// + /// Gets the parameters required to perform a semi-probabilistic assessment. + /// + public GeneralPipingInput SemiProbabilisticParameters { get; private set; } + + /// /// Gets the input parameters to perform a piping calculation with. /// public PipingInput InputParameters { get; private set; } @@ -68,6 +74,11 @@ public PipingOutput Output { get; set; } /// + /// Gets or sets the semi-probabilistic calculation result. + /// + public PipingSemiProbabilisticOutput SemiProbabilisticOutput { get; set; } + + /// /// Gets or sets the name of this calculation. /// public string Name { get; set; } Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationActivity.cs =================================================================== diff -u -r4512af7782ee31b36941bb280b54d9da2953dd71 -r1d8e1d2a0bb1d08433a9d6046942fa778b019489 --- Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationActivity.cs (.../PipingCalculationActivity.cs) (revision 4512af7782ee31b36941bb280b54d9da2953dd71) +++ Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationActivity.cs (.../PipingCalculationActivity.cs) (revision 1d8e1d2a0bb1d08433a9d6046942fa778b019489) @@ -20,6 +20,7 @@ // All rights reserved. using Core.Common.Base.Service; +using Ringtoets.Piping.Calculation.SemiProbabilistic; using Ringtoets.Piping.Data; namespace Ringtoets.Piping.Service @@ -60,6 +61,7 @@ calculation.Output = null; PipingCalculationService.Calculate(calculation); + PipingSemiProbabilisticResultTransformer.Transform(calculation); } protected override void OnCancel() Index: Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/Ringtoets.Piping.Calculation.Test.csproj =================================================================== diff -u -rdcffe8961a89f7147663f1c9b3ee4606fe611c67 -r1d8e1d2a0bb1d08433a9d6046942fa778b019489 --- Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/Ringtoets.Piping.Calculation.Test.csproj (.../Ringtoets.Piping.Calculation.Test.csproj) (revision dcffe8961a89f7147663f1c9b3ee4606fe611c67) +++ Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/Ringtoets.Piping.Calculation.Test.csproj (.../Ringtoets.Piping.Calculation.Test.csproj) (revision 1d8e1d2a0bb1d08433a9d6046942fa778b019489) @@ -79,6 +79,10 @@ {D749EE4C-CE50-4C17-BF01-9A953028C126} Core.Common.TestUtil + + {d4200f43-3f72-4f42-af0a-8ced416a38ec} + Ringtoets.Common.Data + {ce994cc9-6f6a-48ac-b4be-02c30a21f4db} Ringtoets.Piping.Data Index: Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/SemiProbabilistic/PipingSemiProbabilisticResultTransformerTest.cs =================================================================== diff -u -r019c82bf6273ff150976c8c2ea9b895258951455 -r1d8e1d2a0bb1d08433a9d6046942fa778b019489 --- Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/SemiProbabilistic/PipingSemiProbabilisticResultTransformerTest.cs (.../PipingSemiProbabilisticResultTransformerTest.cs) (revision 019c82bf6273ff150976c8c2ea9b895258951455) +++ Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/SemiProbabilistic/PipingSemiProbabilisticResultTransformerTest.cs (.../PipingSemiProbabilisticResultTransformerTest.cs) (revision 1d8e1d2a0bb1d08433a9d6046942fa778b019489) @@ -1,4 +1,5 @@ -using NUnit.Framework; +using System; +using NUnit.Framework; using Ringtoets.Piping.Calculation.SemiProbabilistic; using Ringtoets.Piping.Data; @@ -16,7 +17,7 @@ { // Setup var calculatorResult = new PipingOutput(double.NaN, factorOfSafety, double.NaN, double.NaN, double.NaN, double.NaN); - var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult, norm, double.NaN, double.NaN, double.NaN, double.NaN); + var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult.SellmeijerFactorOfSafety, calculatorResult.UpliftFactorOfSafety, calculatorResult.HeaveFactorOfSafety, norm, double.NaN, double.NaN, double.NaN, double.NaN); // Call double result = transformer.FailureProbabilityUplift(); @@ -34,7 +35,7 @@ { // Setup var calculatorResult = new PipingOutput(double.NaN, double.NaN, double.NaN, factorOfSafety, double.NaN, double.NaN); - var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult, norm, double.NaN, double.NaN, double.NaN, double.NaN); + var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult.SellmeijerFactorOfSafety, calculatorResult.UpliftFactorOfSafety, calculatorResult.HeaveFactorOfSafety, norm, double.NaN, double.NaN, double.NaN, double.NaN); // Call double result = transformer.FailureProbabilityHeave(); @@ -52,7 +53,7 @@ { // Setup var calculatorResult = new PipingOutput(double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, factorOfSafety); - var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult, norm, double.NaN, double.NaN, double.NaN, double.NaN); + var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult.SellmeijerFactorOfSafety, calculatorResult.UpliftFactorOfSafety, calculatorResult.HeaveFactorOfSafety, norm, double.NaN, double.NaN, double.NaN, double.NaN); // Call double result = transformer.FailureProbabilitySellmeijer(); @@ -72,7 +73,7 @@ { // Setup var calculatorResult = new PipingOutput(double.NaN, fosUplift, double.NaN, fosHeave, double.NaN, fosSellmeijer); - var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult, norm, double.NaN, double.NaN, double.NaN, double.NaN); + var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult.SellmeijerFactorOfSafety, calculatorResult.UpliftFactorOfSafety, calculatorResult.HeaveFactorOfSafety, norm, double.NaN, double.NaN, double.NaN, double.NaN); // Call double result = transformer.BetaCrossPiping(); @@ -91,7 +92,7 @@ { // Setup var calculatorResult = new PipingOutput(double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN); - var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult, norm, a, b, assessmentSectionLength, contribution); + var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult.SellmeijerFactorOfSafety, calculatorResult.UpliftFactorOfSafety, calculatorResult.HeaveFactorOfSafety, norm, a, b, assessmentSectionLength, contribution); // Call double result = transformer.BetaCrossAllowed(); @@ -115,7 +116,7 @@ double expectedResult = 1.134713444; var calculatorResult = new PipingOutput(double.NaN, fosUplift, double.NaN, fosHeave, double.NaN, fosSellmeijer); - var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult, norm, a, b, assessmentSectionLength, contribution); + var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult.SellmeijerFactorOfSafety, calculatorResult.UpliftFactorOfSafety, calculatorResult.HeaveFactorOfSafety, norm, a, b, assessmentSectionLength, contribution); // Call double result = transformer.FactorOfSafety(); @@ -138,7 +139,7 @@ { // Setup var calculatorResult = new PipingOutput(double.NaN, fosUplift, double.NaN, fosHeave, double.NaN, fosSellmeijer); - var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult, norm, a, b, assessmentSectionLength, contribution); + var transformer = new PipingSemiProbabilisticResultTransformer(calculatorResult.SellmeijerFactorOfSafety, calculatorResult.UpliftFactorOfSafety, calculatorResult.HeaveFactorOfSafety, norm, a, b, assessmentSectionLength, contribution); var betaAllowed = transformer.BetaCrossAllowed(); var betaPiping = transformer.BetaCrossPiping(); @@ -149,5 +150,28 @@ // Assert Assert.AreEqual(betaAllowed/betaPiping, result, 1e-8); } + + [Test] + public void Transform_CompleteInput_ReturnsPipingSemiProbabilisticOutputWithValues() + { + // Setup + var generalInput = new GeneralPipingInput + { + SectionLength = 6000, + Norm = 30000, + Contribution = 24 + }; + var pipingOutput = new PipingOutput(double.NaN, 1.2, double.NaN, 0.6, double.NaN, 0.9); + var pipingCalculation = new PipingCalculation(generalInput) + { + Output = pipingOutput + }; + + // Call + PipingSemiProbabilisticResultTransformer.Transform(pipingCalculation); + + // Assert + Assert.AreEqual(1.134713444, pipingCalculation.SemiProbabilisticOutput.PipingFactorOfSafety, 1e-8); + } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationTest.cs =================================================================== diff -u -r1c01ea681887e96b5b80fb7d23680a4eeac9bd50 -r1d8e1d2a0bb1d08433a9d6046942fa778b019489 --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationTest.cs (.../PipingCalculationTest.cs) (revision 1c01ea681887e96b5b80fb7d23680a4eeac9bd50) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingCalculationTest.cs (.../PipingCalculationTest.cs) (revision 1d8e1d2a0bb1d08433a9d6046942fa778b019489) @@ -3,6 +3,7 @@ using Core.Common.Base; using NUnit.Framework; using Rhino.Mocks; +using Ringtoets.Piping.Calculation.SemiProbabilistic; using Ringtoets.Piping.Calculation.TestUtil; namespace Ringtoets.Piping.Data.Test @@ -36,6 +37,7 @@ Assert.IsFalse(calculation.HasOutput); Assert.IsNull(calculation.Output); + Assert.IsNull(calculation.SemiProbabilisticOutput); } [Test] Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/Ringtoets.Piping.Data.Test.csproj =================================================================== diff -u -r019c82bf6273ff150976c8c2ea9b895258951455 -r1d8e1d2a0bb1d08433a9d6046942fa778b019489 --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/Ringtoets.Piping.Data.Test.csproj (.../Ringtoets.Piping.Data.Test.csproj) (revision 019c82bf6273ff150976c8c2ea9b895258951455) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/Ringtoets.Piping.Data.Test.csproj (.../Ringtoets.Piping.Data.Test.csproj) (revision 1d8e1d2a0bb1d08433a9d6046942fa778b019489) @@ -100,6 +100,10 @@ {70f8cc9c-5bc8-4fb2-b201-eae7fa8088c2} Ringtoets.HydraRing.Data + + {D64E4F0E-E341-496F-82B2-941AD202B4E3} + Ringtoets.Piping.Calculation + {ce994cc9-6f6a-48ac-b4be-02c30a21f4db} Ringtoets.Piping.Data