package statalign.mcmc; public class UniformPrior implements PriorDistribution<Double> { double min = 0.0; double max = Double.POSITIVE_INFINITY; public UniformPrior() { } public UniformPrior(double a, double b) { if (a >= b) { throw new IllegalArgumentException("Lower bound, "+a+", in UniformPrior is not below the upper bound, "+b+"."); } min = a; max = b; } public double logDensity(Double x) { if (max == Double.POSITIVE_INFINITY) { throw new RuntimeException("Cannot normalise density for UniformPrior."); } else { return (logDensityUnnormalised(x) - Math.log(max-min)); } } public double logDensityUnnormalised(Double x) { if (x > min && x < max) { return 0; } else { return Double.NEGATIVE_INFINITY; } } }