Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingCalculationService.cs =================================================================== diff -u -r08e96a88960a9e011a8547c7ec851b8a73480554 -r85a052e3663239c7a914d63aff9fb01f72b1db74 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingCalculationService.cs (.../HydraRingCalculationService.cs) (revision 08e96a88960a9e011a8547c7ec851b8a73480554) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Service/HydraRingCalculationService.cs (.../HydraRingCalculationService.cs) (revision 85a052e3663239c7a914d63aff9fb01f72b1db74) @@ -19,12 +19,15 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using Ringtoets.HydraRing.Calculation.Data; using Ringtoets.HydraRing.Calculation.Data.Input; +using Ringtoets.HydraRing.Calculation.Data.Output; +using Ringtoets.HydraRing.Calculation.Parsers; using Ringtoets.HydraRing.Calculation.Providers; namespace Ringtoets.HydraRing.Calculation.Service @@ -35,22 +38,24 @@ public static class HydraRingCalculationService { /// - /// This method performs a single failure mechanism calculation via Hydra-Ring. + /// This method performs a type 2 calculation via Hydra-Ring ("iterate towards a target probability, provided as reliability index"). /// - /// The directory of the HLCD file that should be used for performing the failure mechanism calculation. - /// The id of the ring to perform the failure mechanism calculation for. - /// The to use while executing the failure mechanism calculation. - /// The to use while executing the failure mechanism calculation. - /// The failure mechanism calculation to perform. - public static void PerformFailureMechanismCalculation(string hlcdDirectory, string ringId, HydraRingTimeIntegrationSchemeType timeIntegrationSchemeType, HydraRingUncertaintiesType uncertaintiesType, HydraRingCalculationInput hydraRingCalculationInput) + /// The directory of the HLCD file that should be used for performing the calculation. + /// The id of the ring to perform the calculation for. + /// The to use while executing the calculation. + /// The to use while executing the calculation. + /// The input of the calculation to perform. + /// A or null when something went wrong. + public static TargetProbabilityCalculationOutput PerformCalculation(string hlcdDirectory, string ringId, HydraRingTimeIntegrationSchemeType timeIntegrationSchemeType, HydraRingUncertaintiesType uncertaintiesType, HydraRingCalculationInput hydraRingCalculationInput) { + return PerformCalculation(hlcdDirectory, ringId, timeIntegrationSchemeType, uncertaintiesType, hydraRingCalculationInput, (outputFilePath, ouputDatabasePath) => TargetProbabilityCalculationParser.Parse(outputFilePath, hydraRingCalculationInput.DikeSection.SectionId)); + } + + private static T PerformCalculation(string hlcdDirectory, string ringId, HydraRingTimeIntegrationSchemeType timeIntegrationSchemeType, HydraRingUncertaintiesType uncertaintiesType, HydraRingCalculationInput hydraRingCalculationInput, Func parseFunction) + { var hydraulicBoundaryLocationId = hydraRingCalculationInput.HydraulicBoundaryLocationId; var mechanismId = new FailureMechanismDefaultsProvider().GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType).MechanismId; - // Create a Hydra-Ring configuration service - var hydraRingConfigurationService = new HydraRingConfigurationService(ringId, timeIntegrationSchemeType, uncertaintiesType); - hydraRingConfigurationService.AddHydraRingCalculationInput(hydraRingCalculationInput); - // Calculation file names var outputFileName = "designTable.txt"; var logFileName = hydraulicBoundaryLocationId + ".log"; @@ -59,6 +64,8 @@ // Obtain some calculation file paths var workingDirectory = CreateWorkingDirectory(hydraulicBoundaryLocationId.ToString()); + var outputFilePath = Path.Combine(workingDirectory, outputFileName); + var outputDatabasePath = Path.Combine(workingDirectory, "temp.sqlite"); var iniFilePath = Path.Combine(workingDirectory, iniFileName); var dataBaseCreationScriptFilePath = Path.Combine(workingDirectory, dataBaseCreationScriptFileName); var hlcdFilePath = Path.Combine(hlcdDirectory, "HLCD.sqlite"); @@ -85,6 +92,8 @@ }); // Write the database creation script + var hydraRingConfigurationService = new HydraRingConfigurationService(ringId, timeIntegrationSchemeType, uncertaintiesType); + hydraRingConfigurationService.AddHydraRingCalculationInput(hydraRingCalculationInput); File.WriteAllText(dataBaseCreationScriptFilePath, hydraRingConfigurationService.GenerateDataBaseCreationScript()); // Perform the calculation @@ -101,7 +110,7 @@ hydraRingProcess.Start(); hydraRingProcess.WaitForExit(); - // TODO: Parse output + return parseFunction(outputFilePath, outputDatabasePath); } private static string CreateWorkingDirectory(string folderName) Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs =================================================================== diff -u -rde737ee4b24659d188bb137d385572159bc099ff -r85a052e3663239c7a914d63aff9fb01f72b1db74 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision de737ee4b24659d188bb137d385572159bc099ff) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision 85a052e3663239c7a914d63aff9fb01f72b1db74) @@ -610,7 +610,7 @@ protected override void OnRun() { - HydraRingCalculationService.PerformFailureMechanismCalculation(hlcdDirectory, ringId, timeIntegrationSchemeType, uncertaintiesType, new AssessmentLevelCalculationInput(hydraulicBoundaryLocationId, beta)); + HydraRingCalculationService.PerformCalculation(hlcdDirectory, ringId, timeIntegrationSchemeType, uncertaintiesType, new AssessmentLevelCalculationInput(hydraulicBoundaryLocationId, beta)); } protected override void OnCancel() @@ -627,7 +627,7 @@ { get { - return "Toetspeilen berekenen..."; + return string.Format("Toetspeil berekenen voor locatie {0}...", hydraulicBoundaryLocationId); } } }