package org.freehep.math.minuit;
/**
*
* @version $Id: CombinedMinimumBuilder.java 8584 2006-08-10 23:06:37Z duns $
*/
class CombinedMinimumBuilder implements MinimumBuilder
{
public FunctionMinimum minimum(MnFcn fcn, GradientCalculator gc, MinimumSeed seed, MnStrategy strategy, int maxfcn, double toler)
{
FunctionMinimum min = theVMMinimizer.minimize(fcn, gc, seed, strategy, maxfcn, toler);
if(!min.isValid())
{
System.err.println("CombinedMinimumBuilder: migrad method fails, will try with simplex method first.");
MnStrategy str = new MnStrategy(2);
FunctionMinimum min1 = theSimplexMinimizer.minimize(fcn, gc, seed, str, maxfcn, toler);
if(!min1.isValid())
{
System.err.println("CombinedMinimumBuilder: both migrad and simplex method fail.");
return min1;
}
MinimumSeed seed1 = theVMMinimizer.seedGenerator().generate(fcn, gc, min1.userState(), str);
FunctionMinimum min2 = theVMMinimizer.minimize(fcn, gc, seed1, str, maxfcn, toler);
if(!min2.isValid())
{
System.err.println("CombinedMinimumBuilder: both migrad and method fails also at 2nd attempt.");
System.err.println("CombinedMinimumBuilder: return simplex minimum.");
return min1;
}
return min2;
}
return min;
}
private VariableMetricMinimizer theVMMinimizer = new VariableMetricMinimizer();
private SimplexMinimizer theSimplexMinimizer = new SimplexMinimizer();
}