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" 27 if(
isFit_==
true)
return true;
30 ROOT::Minuit2::MnUserParameters MnPar;
31 for(
int i=0;
i<
par_.GetNrows();
i++){
38 int numberofcalls=200+
par_.GetNrows()*100+
par_.GetNrows()*
par_.GetNrows()*5;
42 ROOT::Minuit2::MnMinimize minimize(updator,MnPar);
43 ROOT::Minuit2::FunctionMinimum
min= minimize(numberofcalls,tolerance);
44 for(
unsigned int i=0;
i<=max && min.Edm()>edmMin;
i++){
45 if(
i==max)
return false;
46 min = minimize(
i*numberofcalls,tolerance);
49 if(min.IsAboveMaxEdm()){
edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Found Vertex that is above EDM " << std::endl;
return false;}
51 edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Failed min.IsValid()" << std::endl;
52 if(!min.HasValidParameters()){
edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Failed min.HasValidParameters()" << std::endl; }
53 if(!min.HasValidCovariance()){
edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Failed min.HasValidCovariance()" << std::endl; }
54 if(!min.HesseFailed()){
edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Failed min.HesseFailed()" << std::endl; }
55 if(!min.HasReachedCallLimit()){
edm::LogWarning(
"Chi2VertexFitter::Fit") <<
"Failed min.HasReachedCallLimit()" << std::endl; }
60 for(
int i=0;
i<
par_.GetNrows();
i++){
par_(
i)=min.UserParameters().Value(
i);}
62 for(
int i=0;
i<
par_.GetNrows();
i++){
63 for(
int j=0;j<
par_.GetNrows();j++){
virtual double Up() const
TMatrixTSym< double > parcov_
virtual TString freeParName(int Par)