38 FunctionMinimum FumiliMinimizer::Minimize(
const FCNBase& fcn,
const MnUserParameterState& st,
const MnStrategy& strategy,
unsigned int maxfcn,
double toler)
const {
42 MnUserFcn mfcn(fcn, st.Trafo());
43 Numerical2PGradientCalculator gc(mfcn, st.Trafo(), strategy);
45 unsigned int npar = st.VariableParameters();
46 if(maxfcn == 0) maxfcn = 200 + 100*npar + 5*npar*npar;
48 maxfcn = int(0.1*maxfcn);
50 MinimumSeed mnseeds = SeedGenerator()(mfcn, gc, st, strategy);
56 FumiliFCNBase * fumiliFcn =
dynamic_cast< FumiliFCNBase *
>(
const_cast<FCNBase *
>(&fcn) );
58 MN_ERROR_MSG(
"FumiliMinimizer: Error : wrong FCN type. Try to use default minimizer");
59 return FunctionMinimum(mnseeds, fcn.Up() );
63 FumiliGradientCalculator fgc(*fumiliFcn, st.Trafo(), npar);
65 std::cout <<
"Minuit::Minimize using FumiliMinimizer" << std::endl;
67 return ModularFunctionMinimizer::Minimize(mfcn, fgc, mnseeds, strategy, maxfcn, toler);
72 FunctionMinimum FumiliMinimizer::Minimize(
const FCNGradientBase& fcn,
const MnUserParameterState& st,
const MnStrategy& strategy,
unsigned int maxfcn,
double toler)
const {
77 MnUserFcn mfcn(fcn, st.Trafo() );
78 AnalyticalGradientCalculator gc(fcn, st.Trafo());
80 unsigned int npar = st.VariableParameters();
81 if(maxfcn == 0) maxfcn = 200 + 100*npar + 5*npar*npar;
83 MinimumSeed mnseeds = SeedGenerator()(mfcn, gc, st, strategy);
87 FumiliFCNBase * fumiliFcn =
dynamic_cast< FumiliFCNBase *
>(
const_cast<FCNGradientBase *
>(&fcn) );
89 MN_ERROR_MSG(
"FumiliMinimizer: Error : wrong FCN type. Try to use default minimizer");
90 return FunctionMinimum(mnseeds, fcn.Up() );
94 FumiliGradientCalculator fgc(*fumiliFcn, st.Trafo(), npar);
96 std::cout <<
"Minuit::Minimize using FumiliMinimizer" << std::endl;
98 return ModularFunctionMinimizer::Minimize(mfcn, fgc, mnseeds, strategy, maxfcn, toler);