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"
24 using namespace tauImpactParameter;
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++) {
TMatrixTSym< double > parcov_
virtual TString freeParName(int Par)
double Up() const override
Log< level::Warning, false > LogWarning