46   fValid(false), fNormalized(false), fNFree(0), fNdf(0), fNCalls(0),
 
   47   fStatus(-1), fCovStatus(0), fVal(0), fEdm(-1), fChi2(-1)
 
   64   fParams(std::vector<
double>( fconfig.NPar() ) ),
 
   65   fErrors(std::vector<
double>( fconfig.NPar() ) ),
 
   66   fParNames(std::vector<std::string> ( fconfig.NPar() ) )
 
   75   if ( (
fMinimType.find(
"Fumili") == std::string::npos) &&
 
   76        (
fMinimType.find(
"GSLMultiFit") == std::string::npos)
 
   82   unsigned int npar = fconfig.
NPar();
 
   83   for (
unsigned int i = 0; i < npar; ++i ) {
 
   97   std::cout << 
"create fit result from config - nfree " << 
fNFree << std::endl;
 
  113   fVal  =  min->MinValue();
 
  124   const unsigned int npar = min->NDim();
 
  125   if (npar == 0) 
return;
 
  128      fParams = std::vector<double>(min->X(), min->X() + npar);
 
  132      for (
unsigned int i = 0; i < npar; ++i ) {
 
  137   if (sizeOfData >  min->NFree() ) 
fNdf = sizeOfData - min->NFree();
 
  151      for (
unsigned int i = 0; i < npar; ++i ) {
 
  158   unsigned int nfree = 0;
 
  159   for (
unsigned int ipar = 0; ipar < npar; ++ipar) {
 
  172      MATH_ERROR_MSG(
"FitResult",
"FitConfiguration and Minimizer result are not consistent");
 
  173      std::cout << 
"Number of free parameters from FitConfig = " << nfree << std::endl;
 
  174      std::cout << 
"Number of free parameters from Minimizer = " << 
fNFree << std::endl;
 
  190   if (min->Errors() != 0) {
 
  192      fErrors = std::vector<double>(min->Errors(), min->Errors() + npar ) ;
 
  195         unsigned int r = npar * (  npar + 1 )/2;
 
  197         for (
unsigned int i = 0; i < npar; ++i)
 
  198            for (
unsigned int j = 0; j <= i; ++j)
 
  205      for (
unsigned int i = 0; i < npar; ++i) {
 
  206         double globcc = min->GlobalCC(i);
 
  207         if (globcc < 0) 
break; 
 
  229   if (
this == &rhs) 
return *
this;  
 
  279   const unsigned int npar = 
fParams.size();
 
  280   if (min->NDim() != npar ) {
 
  284   if (min->X() == 0 ) {
 
  289   if (
fNFree != min->NFree() ) {
 
  296   fVal = min->MinValue();
 
  302   if ( min->NCalls() > 0)   
fNCalls = min->NCalls();
 
  306   std::copy(min->X(), min->X() + npar, 
fParams.begin());
 
  312   if (min->Errors() != 0)  {
 
  316      std::copy(min->Errors(), min->Errors() + npar, 
fErrors.begin() ) ;
 
  321         unsigned int r = npar * (  npar + 1 )/2;
 
  324         for (
unsigned int i = 0; i < npar; ++i) {
 
  325            for (
unsigned int j = 0; j <= i; ++j)
 
  332      for (
unsigned int i = 0; i < npar; ++i) {
 
  333         double globcc = min->GlobalCC(i);
 
  350   for (
unsigned int i = 0; i < 
fErrors.size() ; ++i)
 
  352   for (
unsigned int i = 0; i < 
fCovMatrix.size() ; ++i)
 
  366   std::map<unsigned int, std::pair<double,double> >::const_iterator itr = 
fMinosErrors.find(i);
 
  374   std::map<unsigned int, std::pair<double,double> >::const_iterator itr = 
fMinosErrors.find(i);
 
  381   std::map<unsigned int, std::pair<double,double> >::const_iterator itr = 
fMinosErrors.find(i);
 
  393   unsigned int npar = 
fParams.size();
 
  394   for (
unsigned int i = 0; i < npar; ++i)
 
  409   std::map<unsigned int, unsigned int>::const_iterator itr =  
fBoundParams.find(ipar);
 
  411      lower =  -std::numeric_limits<Double_t>::infinity();
 
  412      upper =  std::numeric_limits<Double_t>::infinity();
 
  431   unsigned int npar = 
fParams.size();
 
  433      os << 
"<Empty FitResult>\n";
 
  436   os << 
"\n****************************************\n";
 
  439         os << 
"         Invalid FitResult";
 
  440         os << 
"  (status = " << 
fStatus << 
" )";
 
  443         os << 
"      FitResult before fitting";
 
  445      os << 
"\n****************************************\n";
 
  449   os << 
"Minimizer is " << 
fMinimType << std::endl;
 
  450   const unsigned int nw = 25; 
 
  451   const unsigned int nn = 12; 
 
  452   const std::ios_base::fmtflags prFmt = os.setf(std::ios::left,std::ios::adjustfield); 
 
  455      os << std::left << std::setw(nw) << 
"MinFCN" << 
" = " << std::right << std::setw(nn) << 
fVal << std::endl;
 
  457      os << std::left << std::setw(nw) <<  
"Chi2"         << 
" = " << std::right << std::setw(nn) << 
fChi2 << std::endl;
 
  458   os << std::left << std::setw(nw) << 
"NDf"              << 
" = " << std::right << std::setw(nn) << 
fNdf << std::endl;
 
  459   if (
fMinimType.find(
"Linear") == std::string::npos) {  
 
  460      if (
fEdm >=0) os << std::left << std::setw(nw) << 
"Edm"    << 
" = " << std::right << std::setw(nn) << 
fEdm << std::endl;
 
  461      os << std::left << std::setw(nw) << 
"NCalls" << 
" = " << std::right << std::setw(nn) << 
fNCalls << std::endl;
 
  463   for (
unsigned int i = 0; i < npar; ++i) {
 
  465      os << 
" = " << std::right << std::setw(nn) << 
fParams[i];
 
  467         os << std::setw(9) << 
" "  << std::setw(nn) << 
" " << 
" \t (fixed)";
 
  470            os << 
"   +/-   " << std::left << std::setw(nn) << 
fErrors[i] << std::right;
 
  472            os << 
"  " << std::left  << std::setw(nn) << 
LowerError(i) << 
" +" << std::setw(nn) << 
UpperError(i)
 
  475            os << 
" \t (limited)";
 
  481   if (prFmt != os.flags() ) os.setf(prFmt, std::ios::adjustfield);
 
  491   os << 
"\nCovariance Matrix:\n\n";
 
  492   unsigned int npar = 
fParams.size();
 
  494   const int kWidth = 8;
 
  496   const int matw = kWidth+4;
 
  499   int prevPrec = os.precision(kPrec);
 
  500   const std::ios_base::fmtflags prevFmt = os.flags();
 
  502   os << std::setw(parw) << 
" " << 
"\t";
 
  503   for (
unsigned int i = 0; i < npar; ++i) {
 
  509   for (
unsigned int i = 0; i < npar; ++i) {
 
  512         for (
unsigned int j = 0; j < npar; ++j) {
 
  514               os.precision(kPrec); os.width(kWidth);  os << std::right << std::setw(matw) << 
CovMatrix(i,j);
 
  521   os << 
"\nCorrelation Matrix:\n\n";
 
  522   os << std::setw(parw) << 
" " << 
"\t";
 
  523   for (
unsigned int i = 0; i < npar; ++i) {
 
  529   for (
unsigned int i = 0; i < npar; ++i) {
 
  531         os << std::left << std::setw(parw) << std::left << 
GetParameterName(i) << 
"\t";
 
  532         for (
unsigned int j = 0; j < npar; ++j) {
 
  534               os.precision(kPrec); os.width(kWidth);  os << std::right << std::setw(matw) << 
Correlation(i,j);
 
  541   os.setf(prevFmt, std::ios::adjustfield);
 
  542   os.precision(prevPrec);
 
  554      MATH_ERROR_MSG(
"FitResult::GetConfidenceIntervals",
"Cannot compute Confidence Intervals without fit model function");
 
  560   double corrFactor = 1;
 
  561   if (
fChi2 <= 0 || 
fNdf == 0) norm = 
false;
 
  570   unsigned int ndim = 
fFitFunc->NDim();
 
  571   unsigned int npar = 
fFitFunc->NPar();
 
  573   std::vector<double> xpoint(ndim);
 
  574   std::vector<double> grad(npar);
 
  575   std::vector<double> vsum(npar);
 
  578   for (
unsigned int ipoint = 0; ipoint < 
n; ++ipoint) {
 
  580      for (
unsigned int kdim = 0; kdim < ndim; ++kdim) {
 
  581         unsigned int i = ipoint * stride1 + kdim * stride2;
 
  588      for (
unsigned int ipar = 0; ipar < npar; ++ipar) {
 
  591            d.SetFunction(fadapter);
 
  595               d.SetStepSize( std::max( 
fErrors[ipar]*1.E-5, 1.E-15) );
 
  597               d.SetStepSize( std::min(std::max(
fParams[ipar]*1.E-5, 1.E-15), 0.0001 ) );
 
  606      vsum.assign(npar,0.0);
 
  607      for (
unsigned int ipar = 0; ipar < npar; ++ipar) {
 
  608         for (
unsigned int jpar = 0; jpar < npar; ++jpar) {
 
  609             vsum[ipar] += 
CovMatrix(ipar,jpar) * grad[jpar];
 
  614      for (
unsigned int ipar = 0; ipar < npar; ++ipar) {
 
  615         r2 += grad[ipar] * vsum[ipar];
 
  617      double r = std::sqrt(r2);
 
  618      ci[ipoint] = 
r * corrFactor;
 
  626   unsigned int ndim = data.
NDim();
 
  627   unsigned int np = data.
NPoints();
 
  628   std::vector<double> xdata( ndim * np );
 
  629   for (
unsigned int i = 0; i < np ; ++i) {
 
  630      const double * 
x = data.
Coords(i);
 
  631      std::vector<double>::iterator itr = xdata.begin()+ ndim * i;
 
  632      std::copy(
x,
x+ndim,itr);
 
  642    std::vector<double> result;
 
  644       result.resize(data->
NPoints() );
 
  648      MATH_ERROR_MSG(
"FitResult::GetConfidenceIntervals",
"Cannot compute Confidence Intervals without the fit bin data");
 
  680   if (!pntsx || !pntsy || !npoints)
 
  684      MATH_ERROR_MSG(
"FitResult::Scan", 
"Minimizer is not available - cannot Scan");
 
  699bool FitResult::Contour(
unsigned int ipar, 
unsigned int jpar, 
unsigned int &npoints, 
double *pntsx, 
double *pntsy, 
double confLevel)
 
  701   if (!pntsx || !pntsy || !npoints)
 
  705      MATH_ERROR_MSG(
"FitResult::Contour", 
"Minimizer is not available - cannot produce Contour");
 
  717   bool ret = 
fMinimizer->Contour(ipar, jpar, npoints, pntsx, pntsy);
 
#define MATH_ERROR_MSG(loc, str)
 
Class describing the binned data sets : vectors of x coordinates, y values and optionally error on y ...
 
Class describing the configuration of the fit, options and parameter settings using the ROOT::Fit::Pa...
 
const std::string & MinimizerAlgoType() const
return type of minimizer algorithms
 
unsigned int NPar() const
number of parameters settings
 
std::string MinimizerName() const
return Minimizer full name (type / algorithm)
 
const std::string & MinimizerType() const
return type of minimizer package
 
const ParameterSettings & ParSettings(unsigned int i) const
get the parameter settings for the i-th parameter (const method)
 
unsigned int NPoints() const
return number of fit points
 
unsigned int NDim() const
return coordinate data dimension
 
const double * Coords(unsigned int ipoint) const
return a pointer to the coordinates data for the given fit point
 
class containg the result of the fit and all the related information (fitted parameter values,...
 
std::vector< double > fGlobalCC
 
bool Update(const std::shared_ptr< ROOT::Math::Minimizer > &min, const ROOT::Fit::FitConfig &fconfig, bool isValid, unsigned int ncalls=0)
Update the fit result with a new minimization status To be run only if same fit is performed with sam...
 
std::map< unsigned int, unsigned int > fBoundParams
 
const BinData * FittedBinData() const
return BinData used in the fit (return a nullptr in case a different fit is done or the data are not ...
 
double UpperError(unsigned int i) const
upper Minos error. If Minos has not run for parameter i return the parabolic error
 
void FillResult(const std::shared_ptr< ROOT::Math::Minimizer > &min, const FitConfig &fconfig, const std::shared_ptr< IModelFunction > &f, bool isValid, unsigned int sizeOfData=0, bool binFit=true, const ROOT::Math::IMultiGenFunction *chi2func=0, unsigned int ncalls=0)
Fill the fit result from a Minimizer instance after fitting Run also Minos if requested from the conf...
 
FitResult & operator=(const FitResult &rhs)
Assignment operator.
 
std::vector< double > fErrors
 
std::shared_ptr< ROOT::Math::Minimizer > fMinimizer
 
bool IsParameterFixed(unsigned int ipar) const
query if a parameter is fixed
 
double Error(unsigned int i) const
parameter error by index
 
double CovMatrix(unsigned int i, unsigned int j) const
retrieve covariance matrix element
 
void GetConfidenceIntervals(unsigned int n, unsigned int stride1, unsigned int stride2, const double *x, double *ci, double cl=0.95, bool norm=false) const
get confidence intervals for an array of n points x.
 
bool Scan(unsigned int ipar, unsigned int &npoints, double *pntsx, double *pntsy, double xmin=0, double xmax=0)
scan likelihood value of parameter and fill the given graph.
 
FitResult()
Default constructor for an empty (non valid) fit result.
 
std::shared_ptr< FitData > fFitData
model function resulting from the fit.
 
std::string GetParameterName(unsigned int ipar) const
get name of parameter (deprecated)
 
bool ParameterBounds(unsigned int ipar, double &lower, double &upper) const
retrieve parameter bounds - return false if parameter is not bound
 
std::vector< double > fParams
 
std::vector< double > fCovMatrix
 
void SetMinosError(unsigned int i, double elow, double eup)
set the Minos errors for parameter i (called by the Fitter class when running Minos)
 
void Print(std::ostream &os, bool covmat=false) const
print the result and optionaly covariance matrix and correlations
 
double LowerError(unsigned int i) const
lower Minos error. If Minos has not run for parameter i return the parabolic error
 
void PrintCovMatrix(std::ostream &os) const
print error matrix and correlations
 
bool Contour(unsigned int ipar, unsigned int jpar, unsigned int &npoints, double *pntsx, double *pntsy, double confLevel=0.683)
create contour of two parameters around the minimum pass as option confidence level: default is a val...
 
bool HasMinosError(unsigned int i) const
query if parameter i has the Minos error
 
std::vector< std::pair< double, double > > fParamBounds
 
std::shared_ptr< IModelFunction > fFitFunc
objective function used for fitting
 
std::map< unsigned int, bool > fFixedParams
data set used in the fit
 
double Correlation(unsigned int i, unsigned int j) const
retrieve correlation elements
 
std::shared_ptr< ROOT::Math::IMultiGenFunction > fObjFunc
minimizer object used for fitting
 
virtual ~FitResult()
Destructor.
 
int Index(const std::string &name) const
get index for parameter name (return -1 if not found)
 
double Prob() const
p value of the fit (chi2 probability)
 
std::string ParName(unsigned int i) const
name of the parameter
 
void NormalizeErrors()
normalize errors using chi2/ndf for chi2 fits
 
bool IsParameterBound(unsigned int ipar) const
query if a parameter is bound
 
std::vector< std::string > fParNames
 
std::map< unsigned int, std::pair< double, double > > fMinosErrors
 
Class, describing value, limits and step size of the parameters Provides functionality also to set/re...
 
bool IsFixed() const
check if is fixed
 
bool HasUpperLimit() const
check if parameter has upper limit
 
double LowerLimit() const
return lower limit value
 
const std::string & Name() const
return name
 
bool HasLowerLimit() const
check if parameter has lower limit
 
double Value() const
copy constructor and assignment operators (leave them to the compiler)
 
double StepSize() const
return step size
 
double UpperLimit() const
return upper limit value
 
bool IsBound() const
check if is bound
 
Documentation for the abstract class IBaseFunctionMultiDim.
 
OneDimParamFunctionAdapter class to wrap a multi-dim parameteric function in one dimensional one.
 
User class for calculating the derivatives of a function.
 
double chisquared_cdf_c(double x, double r, double x0=0)
Complement of the cumulative distribution function of the  distribution with  degrees of freedom (upp...
 
double normal_quantile(double z, double sigma)
Inverse ( ) of the cumulative distribution function of the lower tail of the normal (Gaussian) distri...
 
TFitResultPtr Fit(FitObject *h1, TF1 *f1, Foption_t &option, const ROOT::Math::MinimizerOptions &moption, const char *goption, ROOT::Fit::DataRange &range)
 
const int gInitialResultStatus
 
std::string ToString(const T &val)
Utility function for conversion to strings.
 
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
 
Double_t ChisquareQuantile(Double_t p, Double_t ndf)
Evaluate the quantiles of the chi-squared probability distribution function.
 
Double_t StudentQuantile(Double_t p, Double_t ndf, Bool_t lower_tail=kTRUE)
Computes quantiles of the Student's t-distribution 1st argument is the probability,...