9 #include "Minuit2/FunctionMinimum.h" 10 #include "Minuit2/MnUserParameters.h" 11 #include "Minuit2/MnPrint.h" 12 #include "Minuit2/MnMigrad.h" 13 #include "Minuit2/MnSimplex.h" 14 #include "Minuit2/CombinedMinimizer.h" 15 #include "Minuit2/MnMinimize.h" 16 #include "Minuit2/MnMinos.h" 17 #include "Minuit2/MnHesse.h" 18 #include "Minuit2/MnContours.h" 19 #include "Minuit2/MnPlot.h" 20 #include "Minuit2/MinosError.h" 21 #include "Minuit2/ContoursError.h" 32 ROOT::Minuit2::MnUserParameters MnPar;
33 for (
int i = 0;
i <
par_.GetNrows();
i++) {
36 MnPar.Add(name.Data(),
43 unsigned int max = 10;
44 int numberofcalls = 200 +
par_.GetNrows() * 100 +
par_.GetNrows() *
par_.GetNrows() * 5;
48 ROOT::Minuit2::MnMinimize minimize(updator, MnPar);
49 ROOT::Minuit2::FunctionMinimum
min = minimize(numberofcalls, tolerance);
50 for (
unsigned int i = 0;
i <= max && min.Edm() > edmMin;
i++) {
53 min = minimize(
i * numberofcalls, tolerance);
56 if (min.IsAboveMaxEdm()) {
57 edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Found Vertex that is above EDM " << std::endl;
61 edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Failed min.IsValid()" << std::endl;
62 if (!min.HasValidParameters()) {
63 edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Failed min.HasValidParameters()" << std::endl;
65 if (!min.HasValidCovariance()) {
66 edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Failed min.HasValidCovariance()" << std::endl;
68 if (!min.HesseFailed()) {
69 edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Failed min.HesseFailed()" << std::endl;
71 if (!min.HasReachedCallLimit()) {
72 edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Failed min.HasReachedCallLimit()" << std::endl;
78 for (
int i = 0;
i <
par_.GetNrows();
i++) {
79 par_(
i) = min.UserParameters().Value(
i);
82 for (
int i = 0;
i <
par_.GetNrows();
i++) {
83 for (
int j = 0;
j <
par_.GetNrows();
j++) {
double Up() const override
TMatrixTSym< double > parcov_
virtual TString freeParName(int Par)