package org.freehep.math.minuit;

import java.util.List;

/**
 * MnScan scans the value of the user function by varying one parameter. It is sometimes 
 * useful for debugging the user function or finding a reasonable starting point.
 * @version $Id: MnScan.java 8584 2006-08-10 23:06:37Z duns $
 */
public class MnScan extends MnApplication
{
   /** construct from FCNBase + double[] for parameters and errors with default strategy */
   public MnScan(FCNBase fcn, double[] par, double[] err)
   {
      this(fcn,par,err,DEFAULT_STRATEGY);
   }
  /** construct from FCNBase + double[] for parameters and errors */
  public MnScan(FCNBase fcn, double[] par, double[] err, int stra)
  {
     this(fcn, new MnUserParameterState(par,err), new MnStrategy(stra));
  }
  /** construct from FCNBase + double[] for parameters and MnUserCovariance with default strategy */
  public MnScan(FCNBase fcn, double[] par, MnUserCovariance cov)
  {
     this(fcn,par,cov,DEFAULT_STRATEGY);
  }
  /** construct from FCNBase + double[] for parameters and MnUserCovariance */
  public MnScan(FCNBase fcn, double[] par, MnUserCovariance cov, int stra)
  {
     this(fcn, new MnUserParameterState(par, cov), new MnStrategy(stra));
  } 
  /** construct from FCNBase + MnUserParameters with default strategy */
  public MnScan(FCNBase fcn, MnUserParameters par)
  {
     this(fcn,par,DEFAULT_STRATEGY);
  }
  /** construct from FCNBase + MnUserParameters */
  public MnScan(FCNBase fcn, MnUserParameters par, int stra )
  {
     this(fcn, new MnUserParameterState(par), new MnStrategy(stra));
  }
  /** construct from FCNBase + MnUserParameters + MnUserCovariance with default strategy */
  public MnScan(FCNBase fcn, MnUserParameters par, MnUserCovariance cov)
  {
     this(fcn,par,cov,DEFAULT_STRATEGY);
  }
  /** construct from FCNBase + MnUserParameters + MnUserCovariance */
  public MnScan(FCNBase fcn, MnUserParameters par, MnUserCovariance cov, int stra)
  {
     this(fcn, new MnUserParameterState(par, cov), new MnStrategy(stra));
  }
  /** construct from FCNBase + MnUserParameterState + MnStrategy */
  public MnScan(FCNBase fcn, MnUserParameterState par, MnStrategy str)
  {
     super(fcn, par, str);
  }
   
   ModularFunctionMinimizer minimizer()
   {
      return theMinimizer;
   }
   
   public List scan(int par)
   {
      return scan(par,41);
   }
   public List scan(int par, int maxsteps)
   {
      return scan(par,maxsteps,0,0);
   }
   /**
    * Scans the value of the user function by varying parameter number par, leaving all
    * other parameters fixed at the current value. If par is not specified, all variable
    * parameters are scanned in sequence. The number of points npoints in the scan is
    * 40 by default, and cannot exceed 100. The range of the scan is by default 2 standard
    * deviations on each side of the current best value, but can be specified as from low
    * to high. After each scan, if a new minimum is found, the best parameter values are
    * retained as start values for future scans or minimizations. The curve resulting from
    * each scan can be plotted on the output terminal using MnPlot in order to show
    * the approximate behaviour of the function.
    */
   public List scan(int par, int maxsteps, double low, double high)
   {
      MnParameterScan scan = new MnParameterScan(theFCN, theState.parameters());
      double amin = scan.fval();
      
      List result = scan.scan(par, maxsteps, low, high);
      if(scan.fval() < amin)
      {
         theState.setValue(par, scan.parameters().value(par));
         amin = scan.fval();
      }
      return result;
   }
   
   private ScanMinimizer theMinimizer = new ScanMinimizer();
}

 

Ads help maintain this website.