00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "Minuit2/VariableMetricEDMEstimator.h"
00011 #include "Minuit2/FunctionGradient.h"
00012 #include "Minuit2/MinimumError.h"
00013
00014 namespace ROOT {
00015
00016 namespace Minuit2 {
00017
00018
00019 double similarity(const LAVector&, const LASymMatrix&);
00020
00021 double VariableMetricEDMEstimator::Estimate(const FunctionGradient& g, const MinimumError& e) const {
00022
00023
00024
00025 if(e.InvHessian().size() == 1)
00026 return 0.5*g.Grad()(0)*g.Grad()(0)*e.InvHessian()(0,0);
00027
00028 double rho = similarity(g.Grad(), e.InvHessian());
00029 return 0.5*rho;
00030 }
00031
00032 }
00033
00034 }