package hep.aida.ref.histogram; import hep.aida.IMeasurement; import hep.aida.ref.event.AIDAObservable; import hep.aida.ref.event.IsObservable; /** * Basic user-level interface class for holding a single "measurement" * with positive and negative errors (to allow for asymmetric errors). * "IMeasurement" = "value" + "errorPlus" - "errorMinus" * * @author The AIDA team * */ public class Measurement extends AIDAObservable implements IMeasurement, IsObservable { private double value; private double errorPlus; private double errorMinus; // Constructors public Measurement() { super(); setIsValidAfterNotify(true); value = Double.NaN; errorPlus = Double.NaN; errorMinus = Double.NaN; } public Measurement(IMeasurement m) { super(); setIsValidAfterNotify(true); value = m.value(); errorPlus = m.errorPlus(); errorMinus = m.errorMinus(); } public Measurement(double val) { super(); setIsValidAfterNotify(true); value = val; errorPlus = Double.NaN; errorMinus = Double.NaN; } public Measurement(double val, double err) { super(); setIsValidAfterNotify(true); value = val; errorPlus = err; errorMinus = err; } public Measurement(double val, double errMinus, double errPlus) { super(); setIsValidAfterNotify(true); value = val; errorPlus = errMinus; errorMinus = errPlus; } // End of Constructors public double value() { return value; } public double errorPlus() { if ( Double.isNaN(errorPlus) ) return 0.; return errorPlus; } public double errorMinus() { if ( Double.isNaN(errorMinus) ) return errorPlus(); return errorMinus; } public void setValue(double value) throws IllegalArgumentException { this.value = value; if (isValid) fireStateChanged(); } public void setErrorPlus(double errorPlus) throws IllegalArgumentException { if (errorPlus < 0.) throw new IllegalArgumentException("Attempt to set negative value for \"errorPlus\" in Measurement"); this.errorPlus = errorPlus; if (isValid) fireStateChanged(); } public void setErrorMinus(double errorMinus) throws IllegalArgumentException { if (errorMinus < 0.) throw new IllegalArgumentException("Attempt to set negative value for \"errorMinus\" in Measurement"); this.errorMinus = errorMinus; if (isValid) fireStateChanged(); } } // class or interface