Class GaussianFitter.ParameterGuesser

java.lang.Object
org.apache.commons.math3.optimization.fitting.GaussianFitter.ParameterGuesser
Enclosing class:
GaussianFitter

public static class GaussianFitter.ParameterGuesser extends Object
Guesses the parameters norm, mean, and sigma of a Gaussian.Parametric based on the specified observed points.
  • Field Details

    • norm

      private final double norm
      Normalization factor.
    • mean

      private final double mean
      Mean.
    • sigma

      private final double sigma
      Standard deviation.
  • Constructor Details

    • ParameterGuesser

      public ParameterGuesser(WeightedObservedPoint[] observations)
      Constructs instance with the specified observed points.
      Parameters:
      observations - Observed points from which to guess the parameters of the Gaussian.
      Throws:
      NullArgumentException - if observations is null.
      NumberIsTooSmallException - if there are less than 3 observations.
  • Method Details

    • guess

      public double[] guess()
      Gets an estimation of the parameters.
      Returns:
      the guessed parameters, in the following order:
      • Normalization factor
      • Mean
      • Standard deviation
    • sortObservations

      private WeightedObservedPoint[] sortObservations(WeightedObservedPoint[] unsorted)
      Sort the observations.
      Parameters:
      unsorted - Input observations.
      Returns:
      the input observations, sorted.
    • basicGuess

      private double[] basicGuess(WeightedObservedPoint[] points)
      Guesses the parameters based on the specified observed points.
      Parameters:
      points - Observed points, sorted.
      Returns:
      the guessed parameters (normalization factor, mean and sigma).
    • findMaxY

      private int findMaxY(WeightedObservedPoint[] points)
      Finds index of point in specified points with the largest Y.
      Parameters:
      points - Points to search.
      Returns:
      the index in specified points array.
    • interpolateXAtY

      private double interpolateXAtY(WeightedObservedPoint[] points, int startIdx, int idxStep, double y) throws OutOfRangeException
      Interpolates using the specified points to determine X at the specified Y.
      Parameters:
      points - Points to use for interpolation.
      startIdx - Index within points from which to start the search for interpolation bounds points.
      idxStep - Index step for searching interpolation bounds points.
      y - Y value for which X should be determined.
      Returns:
      the value of X for the specified Y.
      Throws:
      ZeroException - if idxStep is 0.
      OutOfRangeException - if specified y is not within the range of the specified points.
    • getInterpolationPointsForY

      private WeightedObservedPoint[] getInterpolationPointsForY(WeightedObservedPoint[] points, int startIdx, int idxStep, double y) throws OutOfRangeException
      Gets the two bounding interpolation points from the specified points suitable for determining X at the specified Y.
      Parameters:
      points - Points to use for interpolation.
      startIdx - Index within points from which to start search for interpolation bounds points.
      idxStep - Index step for search for interpolation bounds points.
      y - Y value for which X should be determined.
      Returns:
      the array containing two points suitable for determining X at the specified Y.
      Throws:
      ZeroException - if idxStep is 0.
      OutOfRangeException - if specified y is not within the range of the specified points.
    • isBetween

      private boolean isBetween(double value, double boundary1, double boundary2)
      Determines whether a value is between two other values.
      Parameters:
      value - Value to test whether it is between boundary1 and boundary2.
      boundary1 - One end of the range.
      boundary2 - Other end of the range.
      Returns:
      true if value is between boundary1 and boundary2 (inclusive), false otherwise.