// Copyright (C) Stichting Deltares 2016. 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 Core.Common.Base.Data; using Ringtoets.Common.Data.Properties; namespace Ringtoets.Common.Data.Probabilistics { /// /// Extension for to support variation coefficient. /// public static class IDistributionExtensions { /// /// Gets the variation coefficient ( / ) of the distribution. /// /// The distribution. /// The variation coefficient. public static RoundedDouble GetVariationCoefficient(this IDistribution distribution) { return new RoundedDouble(distribution.Mean.NumberOfDecimalPlaces, (distribution.Mean == 0) ? double.PositiveInfinity : distribution.StandardDeviation/distribution.Mean); } /// /// Sets the of the distribution ( * ). /// /// The distribution. /// The variation coefficient. /// Standard deviation is less than 0. public static void SetStandardDeviationFromVariationCoefficient(this IDistribution distribution, double variationCoefficient) { distribution.StandardDeviation = (RoundedDouble) variationCoefficient*distribution.Mean; } /// /// Sets the of the distribution ( / ). /// /// The distribution. /// The variation coefficient. /// Thrown when is less than or equal to 0. public static void SetMeanFromVariationCoefficient(this IDistribution distribution, double variationCoefficient) { if (variationCoefficient <= 0) { throw new ArgumentOutOfRangeException("variationCoefficient", Resources.VariationCoefficient_Should_be_greater_than_zero); } distribution.Mean = (RoundedDouble) (distribution.StandardDeviation/variationCoefficient); } } }