|
10 | 10 | #include "Minuit2/FumiliBuilder.h"
|
11 | 11 | #include "Minuit2/FumiliStandardMaximumLikelihoodFCN.h"
|
12 | 12 | #include "Minuit2/GradientCalculator.h"
|
13 |
| -//#include "Minuit2/Numerical2PGradientCalculator.h" |
14 | 13 | #include "Minuit2/MinimumState.h"
|
15 | 14 | #include "Minuit2/MinimumError.h"
|
16 | 15 | #include "Minuit2/FunctionGradient.h"
|
@@ -237,6 +236,8 @@ FunctionMinimum FumiliBuilder::Minimum(const MnFcn &fcn, const GradientCalculato
|
237 | 236 |
|
238 | 237 | double lambda = (doLineSearch) ? 0.001 : 0;
|
239 | 238 |
|
| 239 | + MnFcnCaller fcnCaller{fcn}; |
| 240 | + |
240 | 241 | do {
|
241 | 242 |
|
242 | 243 | // const MinimumState& s0 = result.back();
|
@@ -269,7 +270,7 @@ FunctionMinimum FumiliBuilder::Minimum(const MnFcn &fcn, const GradientCalculato
|
269 | 270 | // take a full step
|
270 | 271 |
|
271 | 272 | //evaluate function only if doing a line search
|
272 |
| - double fval2 = (doLineSearch) ? fcn(s0.Vec() + step) : 0; |
| 273 | + double fval2 = (doLineSearch) ? fcnCaller(s0.Vec() + step) : 0; |
273 | 274 | MinimumParameters p(s0.Vec() + step, fval2);
|
274 | 275 |
|
275 | 276 | // check that taking the full step does not deteriorate minimum
|
@@ -324,7 +325,7 @@ FunctionMinimum FumiliBuilder::Minimum(const MnFcn &fcn, const GradientCalculato
|
324 | 325 |
|
325 | 326 | // if the proposed point (newton step) is inside the trust region radius accept it
|
326 | 327 | if (norm <= delta) {
|
327 |
| - p = MinimumParameters(s0.Vec() + step, fcn(s0.Vec() + step)); |
| 328 | + p = MinimumParameters(s0.Vec() + step, fcnCaller(s0.Vec() + step)); |
328 | 329 | print.Debug("Accept full Newton step - it is inside TR ",delta);
|
329 | 330 | } else {
|
330 | 331 | //step = - (delta/norm) * step;
|
@@ -403,7 +404,7 @@ FunctionMinimum FumiliBuilder::Minimum(const MnFcn &fcn, const GradientCalculato
|
403 | 404 | }
|
404 | 405 | print.Debug("New accepted step is ",step);
|
405 | 406 |
|
406 |
| - p = MinimumParameters(s0.Vec() + step, fcn(s0.Vec() + step)); |
| 407 | + p = MinimumParameters(s0.Vec() + step, fcnCaller(s0.Vec() + step)); |
407 | 408 | norm = delta;
|
408 | 409 | gdel = inner_product(step, s0.Gradient().Grad());
|
409 | 410 | }
|
|
0 commit comments