package org.freehep.math.minuit;

import java.util.List;

/**
 * API class for the user interaction with the parameters.
 * Serves as input to the minimizer as well as output from it;
 * users can interact: fix/release parameters, set values and errors, etc.;
 * parameters can be accessed via their parameter number or via their 
 * user-specified name.
 * @version $Id: MnUserParameters.java 8584 2006-08-10 23:06:37Z duns $
 */
public class MnUserParameters
{
   private MnUserTransformation theTransformation;
   /** Creates a new instance of MnUserParameters */
   public MnUserParameters()
   {
      theTransformation = new MnUserTransformation();
   }
   public MnUserParameters(double[] par, double[] err)
   {
      theTransformation = new MnUserTransformation(par,err);
   }
   protected MnUserParameters clone()
   {
      return new MnUserParameters(this);
   }
   private MnUserParameters(MnUserParameters other)
   {
      theTransformation = other.theTransformation.clone();
   }
   MnUserTransformation trafo()
   {
      return theTransformation;
   }
   
   public int variableParameters()
   {
      return theTransformation.variableParameters();
   }
   
   /** access to parameters (row-wise) */
   List parameters()
   {
      return theTransformation.parameters();
   }
   
   /** access to parameters and errors in column-wise representation */
   double[] params()
   {
      return theTransformation.params();
   }
   double[] errors()
   {
      return theTransformation.errors();
   }
   
   /** access to single parameter */
   MinuitParameter parameter(int index)
   {
      return theTransformation.parameter(index);
   }
   
   /**
    * Add free parameter name, value, error
    * 

* When adding parameters, MINUIT assigns indices to each parameter which will be * the same as in the double[] in the FCNBase.valueOf(). That means the * first parameter the user adds gets index 0, the second index 1, and so on. When * calculating the function value inside FCN, MINUIT will call FCNBase.valueOf() with * the elements at their respective positions. */ public void add(String name, double val, double err) { theTransformation.add(name,val,err); } /** * Add limited parameter name, value, lower bound, upper bound */ public void add(String name, double val, double err, double low, double up) { theTransformation.add(name,val,err,low,up); } /** * Add const parameter name, value */ public void add(String name, double val) { theTransformation.add(name,val); } /// interaction via external number of parameter /** * Fixes the specified parameter (so that the minimizer will no longer vary it) */ public void fix(int index) { theTransformation.fix(index); } /** * Releases the specified parameter (so that the minimizer can vary it) */ public void release(int index) { theTransformation.release(index); } /** * Set the value of parameter. The parameter in * question may be variable, fixed, or constant, but must be defined. */ public void setValue(int index, double val) { theTransformation.setValue(index,val); } public void setError(int index, double err) { theTransformation.setError(index, err); } /** * Set the lower and upper bound on the specified variable. */ public void setLimits(int index, double low, double up) { theTransformation.setLimits(index,low,up); } public void setUpperLimit(int index, double up) { theTransformation.setUpperLimit(index, up); } public void setLowerLimit(int index, double low) { theTransformation.setLowerLimit(index,low); } public void removeLimits(int index) { theTransformation.removeLimits(index); } public double value(int index) { return theTransformation.value(index); } public double error(int index) { return theTransformation.error(index); } /// interaction via name of parameter /** * Fixes the specified parameter (so that the minimizer will no longer vary it) */ public void fix(String name) { theTransformation.fix(name); } /** * Releases the specified parameter (so that the minimizer can vary it) */ public void release(String name) { theTransformation.release(name); } /** * Set the value of parameter. The parameter in * question may be variable, fixed, or constant, but must be defined. */ public void setValue(String name, double val) { theTransformation.setValue(name,val); } public void setError(String name, double err) { theTransformation.setError(name,err); } /** * Set the lower and upper bound on the specified variable. */ public void setLimits(String name, double low, double up) { theTransformation.setLimits(name,low,up); } public void setUpperLimit(String name, double up) { theTransformation.setUpperLimit(name,up); } public void setLowerLimit(String name, double low) { theTransformation.setLowerLimit(name,low); } public void removeLimits(String name) { theTransformation.removeLimits(name); } public double value(String name) { return theTransformation.value(name); } public double error(String name) { return theTransformation.error(name); } /** convert name into external number of parameter */ int index(String name) { return theTransformation.index(name); } /** convert external number into name of parameter */ String name(int index) { return theTransformation.name(index); } public MnMachinePrecision precision() { return theTransformation.precision(); } public void setPrecision(double eps) { theTransformation.setPrecision(eps); } public String toString() { return MnPrint.toString(this); } }

Ads help maintain this website.