| 12 |
#include "Minuit2/LaSum.h" |
#include "Minuit2/LaSum.h" |
| 13 |
#include "Minuit2/LaProd.h" |
#include "Minuit2/LaProd.h" |
| 14 |
|
|
| 15 |
|
//#define DEBUG |
| 16 |
|
|
| 17 |
|
#if defined(DEBUG) || defined(WARNINGMSG) |
| 18 |
|
#include "Minuit2/MnPrint.h" |
| 19 |
|
#endif |
| 20 |
|
|
| 21 |
|
|
| 22 |
|
|
| 23 |
namespace ROOT { |
namespace ROOT { |
| 24 |
|
|
| 25 |
namespace Minuit2 { |
namespace Minuit2 { |
| 44 |
double delgam = inner_product(dx, dg); |
double delgam = inner_product(dx, dg); |
| 45 |
double gvg = similarity(dg, v0); |
double gvg = similarity(dg, v0); |
| 46 |
|
|
| 47 |
// std::cout<<"delgam= "<<delgam<<" gvg= "<<gvg<<std::endl; |
#ifdef DEBUG |
| 48 |
|
std::cout << "dx = " << dx << std::endl; |
| 49 |
|
std::cout << "dg = " << dg << std::endl; |
| 50 |
|
std::cout<<"delgam= "<<delgam<<" gvg= "<<gvg<<std::endl; |
| 51 |
|
#endif |
| 52 |
|
if (delgam <= 0 ) { |
| 53 |
|
MN_INFO_MSG("DavidonErrorUpdator: delgam < 0 : cannot update - return same matrix "); |
| 54 |
|
return s0.Error(); |
| 55 |
|
} |
| 56 |
|
if (gvg <= 0 ) { |
| 57 |
|
// since v0 is pos def this gvg can be only = 0 if dg = 0 - should never be here |
| 58 |
|
MN_INFO_MSG("DavidonErrorUpdator: gvg <= 0 : cannot update - return same matrix "); |
| 59 |
|
return s0.Error(); |
| 60 |
|
} |
| 61 |
|
|
| 62 |
|
|
| 63 |
MnAlgebraicVector vg = v0*dg; |
MnAlgebraicVector vg = v0*dg; |
| 64 |
|
|
| 65 |
MnAlgebraicSymMatrix vUpd = Outer_product(dx)/delgam - Outer_product(vg)/gvg; |
MnAlgebraicSymMatrix vUpd = Outer_product(dx)/delgam - Outer_product(vg)/gvg; |