package hep.aida.ref.pdf;

import hep.aida.IFitData;
import hep.aida.IManagedObject;
import hep.aida.ref.fitter.fitData.FitData;

/**
 * A Dependent. Dependents take their values from a data set.
 *
 * @author The FreeHEP team @ SLAC.
 */
public class Dependent extends Variable implements RangeSetListener {
    
    private double value;
    private RangeSet range;
    private FitData data = null;
    
    public Dependent(String name, double lowerEdge, double upperEdge) {
        super(name, Variable.DEPENDENT);
        range = new RangeSet(lowerEdge, upperEdge);
    }
    
    public double value() {
        return value;
    }

    protected void setVariableValue(double value) {
        if ( range.isInRange(value) )
            this.value = value;
        else
            throw new IllegalArgumentException("Value "+value+" is out of the current range.");
    }
        
    public RangeSet range() {
        return range;
    }
    
    public void rangeSetChanged() {
        notifyVariableChanged(Variable.RANGE_CHANGED);
    }
    
    public void connectToData(Object dataObject) {
        if ( dataObject instanceof FitData )
            this.data = (FitData) dataObject;
        else {
            data = new FitData();
            data.create1DConnection(dataObject);
        }
    }
    
    public boolean isConnected() {
        return data != null;
    }
    
    public IFitData data() {
        return data;
    }
}
