public double getNormalDistribution(double lowerLimit, double upperLimit, double standardDeviationSpread) {
    if (standardDeviationSpread < 1.0 || standardDeviationSpread > 5.0) // if standardDeviationSpread is < 1.0 there is a risk of excessive iterations of the range-checking do-while() loop
      throw new IllegalArgumentException();
    double range = upperLimit - lowerLimit + 1.0;
    double mean = (lowerLimit + upperLimit) / 2.0;
    double calculatedRandom;
    do {
      // next.Gaussian() returns a value with 1-standard deviation worth range between -1.0 and +1.0 (i.e. about 68% of values)
      calculatedRandom = (random.nextGaussian() * (range / 2.0) / standardDeviationSpread) + mean;
    } while (calculatedRandom < lowerLimit || calculatedRandom > upperLimit);
    return calculatedRandom;
  } // end getNormalDistribution()