/// <summary> /// Calculate std method. /// </summary> /// <param name="convoluted"> /// The convoluted. /// </param> /// <param name="windowLen"> /// The window len. /// </param> public void CalculateStd(ComplexChain convoluted, int windowLen) { var geometricMean = new GeometricMean(); var arithmeticMean = new ArithmeticMean(); foreach (KeyValuePair<List<string>, List<int>> accord in fullEntry.Entry()) { PositionFilter.Filtrate(accord.Value, windowLen); var temp = new ComplexChain(accord.Value); double geometric = geometricMean.Calculate(temp, convoluted.Anchor); double arithmetic = arithmeticMean.Calculate(temp, convoluted.Anchor); double std = 1 - (1 / Math.Abs(arithmetic - geometric)); if (!wordPriority.ContainsKey(std)) { wordPriority.Add(std, accord); } } }
/// <summary> /// Calculation method. /// </summary> /// <param name="chain"> /// Source sequence. /// </param> /// <param name="link"> /// Link of intervals in chain. /// </param> /// <returns> /// Descriptive informations count as <see cref="double"/>. /// </returns> public double Calculate(CongenericChain chain, Link link) { var calculator = new ArithmeticMean(); double arithmeticMean = calculator.Calculate(chain, link); return arithmeticMean == 0 ? 1 : Math.Pow(arithmeticMean, 1 / arithmeticMean); }