package org.jlab.groot.math;


/**
 * Creates a StatNumber object with a number and an error.
 * @author Erin Kirby
 * @version 061714
 */
public class StatNumber {

	private double number;
	private double error;
	
	/**
	 * Creates a default StatNumber object with a number and error set to 0.0.
	 */
	public StatNumber() {
		number = 0.0;
		error = 0.0;
	}
	
	/**
	 * Creates a StatNumber object with the specified number and error.
	 * 
	 * @param num		The number
	 * @param err		The error
	 */
	public StatNumber(double num, double err) {
		number = num;
		error = err;
	}
	
	/**
	 * Creates a StatNumber object with the specified number and calculates its error.
	 * 
	 * @param num		What number to store in the StatNumber object.
	 */
	public StatNumber(double num) {
		number = num;
		error = Math.sqrt(Math.abs(num));
	}
	
	/**
	 * Sets the number and error of the StatNumber object
	 * 
	 * @param num		What to set the number to
	 * @param err		What to set the error to
	 */
	public void set(double num, double err) {
		number = num;
		error = err;
	}
	
	/**
	 * 
	 * @return the number stored in the StatNumber object.
	 */
	public double number() {
		return number;
	}
	
	/**
	 * 
	 * @return the error stored in the StatNumber object.
	 */
	public double error() {
		return error;
	}
	
	/**
	 * Adds two StatNumber objects.
	 * 
	 * @param num 		The StatNumber to add to this object.
	 */
	public void add(StatNumber num) {
		number += num.number();
		error = Math.sqrt((error * error) + (num.error() * num.error()));
	}
	
	/**
	 * Divides the current object by the parameter StatNumber
	 * 
	 * @param num		The StatNumber to divide this object by
	 */
	public void divide(StatNumber num) {
        double  _fnum = 0;
        if(num.number()!=0) _fnum = this.number()/num.number();
        double  _n1   = this.number();
        double  _n2   = num.number();
        double  _e1   = this.error();
        double  _e2   = num.error();
        double  _r12   = 0;
        double  _r22   = 0;
        if(_n1!=0) _r12 = (_e1/_n1)*(_e1/_n1);
        if(_n2!=0) _r22 = (_e2/_n2)*(_e2/_n2);
        number = _fnum;
        error  = _fnum*Math.sqrt(_r12+_r22);
	}
	
	/**
	 * Multiplies the parameter and the current StatNumber
	 * 
	 * @param num		The StatNumber object to multiply this object by
	 */
	public void multiply(StatNumber num) {
		double  _fnum = this.number()*num.number();
        double  _n1   = this.number();
        double  _n2   = num.number();
        double  _e1   = this.error();
        double  _e2   = num.error();
        double  _r12   = 0;
        double  _r22   = 0;
        if(_n1!=0) _r12 = (_e1/_n1)*(_e1/_n1);
        if(_n2!=0) _r22 = (_e2/_n2)*(_e2/_n2);
        number = _fnum;
        error  = _fnum * Math.sqrt(_r12+_r22);
	}
	
	/**
	 * Subtracts the parameter from the current object
	 * 
	 * @param num		The StatNumber to subtract from the current StatNumber object
	 */
	public void subtract(StatNumber num) {
		number -= num.number();
		error = Math.sqrt((error * error) 
                + (num.error()*num.error()));
	}
}

 

Ads help maintain this website.