/* * FitParameterSettings.java * * Created on August 21, 2002, 12:44 PM */ package hep.aida.ref.optimizer; import hep.aida.ext.IVariableSettings; /** * * @author The AIDA team @ SLAC. * */ public class VariableSettings implements IVariableSettings { private String name; private double stepSize; private double upperBound; private double lowerBound; private boolean isFixed; private double currentValue; private final double stepSizeDef = 1.0; private final boolean isFixedDef = false; private final double upperBoundDef = Double.POSITIVE_INFINITY; private final double lowerBoundDef = Double.NEGATIVE_INFINITY; private final double defValue = Double.NaN; public VariableSettings(String name) { reset(); this.name = name; } public String name() { return name; } public double stepSize() { return stepSize; } public double upperBound() { return upperBound; } public double lowerBound() { return lowerBound; } public boolean isBound() { if ( upperBound == Double.POSITIVE_INFINITY && lowerBound == Double.NEGATIVE_INFINITY ) return false; return true; } public boolean isFixed() { return isFixed; } public void setStepSize(double step) { if ( step > 0 ) stepSize = step; else throw new IllegalArgumentException("Illegal step size "+step+" it has to be positive!"); } public void setBounds(double lo, double up) { if ( up < lo ) throw new IllegalArgumentException("Lower bound cannot be less than upper bound : "+lo+" > "+up); if ( ! Double.isNaN( value() ) ) if ( value() < lo || value() > up ) throw new IllegalArgumentException("The value "+value()+" is outside of the range "+lo+" "+up); upperBound = up; lowerBound = lo; } public void removeBounds() { upperBound = upperBoundDef; lowerBound = lowerBoundDef; } public void setFixed(boolean isFixed) { this.isFixed = isFixed; } public void reset() { setStepSize(stepSizeDef); setFixed(isFixedDef); setBounds(lowerBoundDef,upperBoundDef); setValue(defValue); } public double value() { return currentValue; } public void setValue(double value) { if ( value < lowerBound() || value > upperBound() ) throw new IllegalArgumentException("The value "+value+" is outside of the bounds "+lowerBound()+" "+upperBound()); this.currentValue = value; } }