001 package org.expasy.jpl.commons.collection.stat;
002
003
004 /**
005 * A random variable that follow the Laplace-Gauss (Normal) Probability
006 * Distribution N(mean, variance).
007 *
008 * @author nikitin
009 *
010 * @version 1.0
011 */
012 public final class LaplaceGaussRandomVar extends Number {
013
014 private static final long serialVersionUID = 6291028259485532277L;
015
016 /** mean */
017 private double mean;
018
019 /** standard deviation */
020 private double stdDev;
021
022 // the density of relative frequency is the density of probability
023
024 /** the associated frequency or weight (the density (=1) by default) */
025 private double frequency;
026
027 private LaplaceGaussRandomVar(double mean, double stdDev) {
028 this.mean = mean;
029 this.stdDev = stdDev;
030 this.frequency = 1;
031 }
032
033 public static LaplaceGaussRandomVar withStdDev(double mean, double stdDev) {
034 return new LaplaceGaussRandomVar(mean, stdDev);
035 }
036
037 public static LaplaceGaussRandomVar withPPM(double mean, double ppm) {
038 return new LaplaceGaussRandomVar(mean, mean * ppm / 1000000);
039 }
040
041 /**
042 * @return the mean
043 */
044 public double getMean() {
045 return mean;
046 }
047
048 /**
049 * @return the stdDev
050 */
051 public double getStdDev() {
052 return stdDev;
053 }
054
055 /**
056 * @return the frequency
057 */
058 public double getFrequency() {
059 return frequency;
060 }
061
062 /**
063 * @param frequency the frequency to set
064 */
065 public void setFrequency(double frequency) {
066 this.frequency = frequency;
067 }
068
069 @Override
070 public double doubleValue() {
071 return mean;
072 }
073
074 @Override
075 public float floatValue() {
076 return (float) mean;
077 }
078
079 @Override
080 public int intValue() {
081 return (int) mean;
082 }
083
084 @Override
085 public long longValue() {
086 return (long) mean;
087 }
088
089 public String toString() {
090 return "mean=" + mean + ", stdev=" + stdDev;
091 }
092
093 }