//----------------------------------------------------------------------- // // Copyright (c) 2010 Deltares. All rights reserved. // // B.S.T.I.M. The // tom.the@deltares.nl // 17-11-2010 // Perform DAM calculations for a time serie of waterlevels //----------------------------------------------------------------------- namespace Deltares.Dam.Data { using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using Deltares.Piping.Data; public class TimeSerieCalculatorException : ApplicationException { public TimeSerieCalculatorException(string message) : base(message) { } } public class TimeSerieProbablisticCalculator { /// /// Constructor /// public TimeSerieProbablisticCalculator() { } /// /// Combine 3 timeserielists to one probabilistic list /// /// /// /// /// public List CreateProbabilisticTimeSerieList(List meanTimeSerieList, List stdTimeSerieList, List distTimeSerieList) { ThrowHelper.ThrowWhenConditionIsTrue("Input timeseries do not have equal length", () => (meanTimeSerieList.Count() != stdTimeSerieList.Count()) || meanTimeSerieList.Count() != distTimeSerieList.Count()); List probabilisticTimeSerieList = new List(); for (int timeSerieIndex = 0; timeSerieIndex < meanTimeSerieList.Count(); timeSerieIndex++) { TimeSerie meanTimeSerie = meanTimeSerieList[timeSerieIndex]; TimeSerie stdTimeSerie = stdTimeSerieList[timeSerieIndex]; TimeSerie distTimeSerie = distTimeSerieList[timeSerieIndex]; ThrowHelper.ThrowWhenConditionIsTrue("Input timeseries do not have equal length", () => (meanTimeSerie.Entries.Count() != stdTimeSerie.Entries.Count()) || meanTimeSerie.Entries.Count() != distTimeSerie.Entries.Count()); TimeSerie probabilisticTimeSerie = TimeSerie.CreateTimeSerie(meanTimeSerie, "WaterLevelProbabilistic"); for (int timeSerieEntryIndex = 0; timeSerieEntryIndex < meanTimeSerie.Entries.Count(); timeSerieEntryIndex++) { TimeSerieEntry probabilisticTimeSerieEntry = new TimeSerieEntry(); probabilisticTimeSerieEntry = meanTimeSerie.Entries[timeSerieEntryIndex].GetShallowCopy(); Stochast stochastValue = new Stochast(); stochastValue.Mean = meanTimeSerie.Entries[timeSerieEntryIndex].Value; stochastValue.StandardDeviation = stdTimeSerie.Entries[timeSerieEntryIndex].Value; stochastValue.Distribution = (int)Math.Round(distTimeSerie.Entries[timeSerieEntryIndex].Value); probabilisticTimeSerieEntry.StochastValue = stochastValue; probabilisticTimeSerie.Entries.Add(probabilisticTimeSerieEntry); } probabilisticTimeSerieList.Add(probabilisticTimeSerie); } return probabilisticTimeSerieList; } } }