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    }