| 47 |
|
|
| 48 |
Minuit2Minimizer::Minuit2Minimizer(ROOT::Minuit2::EMinimizerType type ) : |
Minuit2Minimizer::Minuit2Minimizer(ROOT::Minuit2::EMinimizerType type ) : |
| 49 |
fDim(0), |
fDim(0), |
|
fErrorCode(0), |
|
| 50 |
fMinimizer(0), |
fMinimizer(0), |
| 51 |
fMinuitFCN(0), |
fMinuitFCN(0), |
| 52 |
fMinimum(0) |
fMinimum(0) |
| 57 |
|
|
| 58 |
Minuit2Minimizer::Minuit2Minimizer(const char * type ) : |
Minuit2Minimizer::Minuit2Minimizer(const char * type ) : |
| 59 |
fDim(0), |
fDim(0), |
|
fErrorCode(0), |
|
| 60 |
fMinimizer(0), |
fMinimizer(0), |
| 61 |
fMinuitFCN(0), |
fMinuitFCN(0), |
| 62 |
fMinimum(0) |
fMinimum(0) |
| 315 |
for (unsigned int i = 0; i < fState.Params().size(); ++i) |
for (unsigned int i = 0; i < fState.Params().size(); ++i) |
| 316 |
std::cout << fState.Parameter(i).Name() << "\t = " << par[i] << "\t +/- " << err[i] << std::endl; |
std::cout << fState.Parameter(i).Name() << "\t = " << par[i] << "\t +/- " << err[i] << std::endl; |
| 317 |
} |
} |
| 318 |
fErrorCode = 0; |
fStatus = 0; |
| 319 |
return true; |
return true; |
| 320 |
} |
} |
| 321 |
else { |
else { |
| 327 |
} |
} |
| 328 |
if (min.HasMadePosDefCovar() ) { |
if (min.HasMadePosDefCovar() ) { |
| 329 |
if (debugLevel >= 1) std::cout << " Covar was made pos def" << std::endl; |
if (debugLevel >= 1) std::cout << " Covar was made pos def" << std::endl; |
| 330 |
fErrorCode = -11; |
fStatus = 1; |
| 331 |
return false; |
return false; |
| 332 |
} |
} |
| 333 |
if (min.HesseFailed() ) { |
if (min.HesseFailed() ) { |
| 334 |
if (debugLevel >= 1) std::cout << " Hesse is not valid" << std::endl; |
if (debugLevel >= 1) std::cout << " Hesse is not valid" << std::endl; |
| 335 |
fErrorCode = -12; |
fStatus = 2; |
| 336 |
return false; |
return false; |
| 337 |
} |
} |
| 338 |
if (min.IsAboveMaxEdm() ) { |
if (min.IsAboveMaxEdm() ) { |
| 339 |
if (debugLevel >= 1) std::cout << " Edm is above max" << std::endl; |
if (debugLevel >= 1) std::cout << " Edm is above max" << std::endl; |
| 340 |
fErrorCode = -13; |
fStatus = 3; |
| 341 |
return false; |
return false; |
| 342 |
} |
} |
| 343 |
if (min.HasReachedCallLimit() ) { |
if (min.HasReachedCallLimit() ) { |
| 344 |
if (debugLevel >= 1) std::cout << " Reached call limit" << std::endl; |
if (debugLevel >= 1) std::cout << " Reached call limit" << std::endl; |
| 345 |
fErrorCode = -14; |
fStatus = 4; |
| 346 |
return false; |
return false; |
| 347 |
} |
} |
| 348 |
fErrorCode = -10; |
fStatus = 5; |
| 349 |
return false; |
return false; |
| 350 |
} |
} |
| 351 |
return true; |
return true; |
| 354 |
double Minuit2Minimizer::CovMatrix(unsigned int i, unsigned int j) const { |
double Minuit2Minimizer::CovMatrix(unsigned int i, unsigned int j) const { |
| 355 |
// get value of covariance matrices (transform from external to internal indices) |
// get value of covariance matrices (transform from external to internal indices) |
| 356 |
if ( i >= fDim || i >= fDim) return 0; |
if ( i >= fDim || i >= fDim) return 0; |
| 357 |
if ( fErrorCode < 0 || !fState.HasCovariance() ) return 0; // no info available when minimization has failed |
if ( Status() || !fState.HasCovariance() ) return 0; // no info available when minimization has failed |
| 358 |
if (fState.Parameter(i).IsFixed() || fState.Parameter(i).IsConst() ) return 0; |
if (fState.Parameter(i).IsFixed() || fState.Parameter(i).IsConst() ) return 0; |
| 359 |
if (fState.Parameter(j).IsFixed() || fState.Parameter(j).IsConst() ) return 0; |
if (fState.Parameter(j).IsFixed() || fState.Parameter(j).IsConst() ) return 0; |
| 360 |
unsigned int k = fState.IntOfExt(i); |
unsigned int k = fState.IntOfExt(i); |
| 365 |
double Minuit2Minimizer::Correlation(unsigned int i, unsigned int j) const { |
double Minuit2Minimizer::Correlation(unsigned int i, unsigned int j) const { |
| 366 |
// get correlation between parameter i and j |
// get correlation between parameter i and j |
| 367 |
if ( i >= fDim || i >= fDim) return 0; |
if ( i >= fDim || i >= fDim) return 0; |
| 368 |
if ( fErrorCode < 0 || !fState.HasCovariance() ) return 0; // no info available when minimization has failed |
if ( Status() || !fState.HasCovariance() ) return 0; // no info available when minimization has failed |
| 369 |
if (fState.Parameter(i).IsFixed() || fState.Parameter(i).IsConst() ) return 0; |
if (fState.Parameter(i).IsFixed() || fState.Parameter(i).IsConst() ) return 0; |
| 370 |
if (fState.Parameter(j).IsFixed() || fState.Parameter(j).IsConst() ) return 0; |
if (fState.Parameter(j).IsFixed() || fState.Parameter(j).IsConst() ) return 0; |
| 371 |
unsigned int k = fState.IntOfExt(i); |
unsigned int k = fState.IntOfExt(i); |
| 383 |
|
|
| 384 |
if ( i >= fDim || i >= fDim) return 0; |
if ( i >= fDim || i >= fDim) return 0; |
| 385 |
// no info available when minimization has failed or has some problems |
// no info available when minimization has failed or has some problems |
| 386 |
if ( fErrorCode < 0 || !fState.HasGlobalCC() ) return 0; |
if ( Status() || !fState.HasGlobalCC() ) return 0; |
| 387 |
if (fState.Parameter(i).IsFixed() || fState.Parameter(i).IsConst() ) return 0; |
if (fState.Parameter(i).IsFixed() || fState.Parameter(i).IsConst() ) return 0; |
| 388 |
unsigned int k = fState.IntOfExt(i); |
unsigned int k = fState.IntOfExt(i); |
| 389 |
return fState.GlobalCC().GlobalCC()[k]; |
return fState.GlobalCC().GlobalCC()[k]; |
| 433 |
if (debugLevel == 0) { |
if (debugLevel == 0) { |
| 434 |
if (!me.IsValid() ) { |
if (!me.IsValid() ) { |
| 435 |
std::cout << "Error running Minos for parameter " << i << std::endl; |
std::cout << "Error running Minos for parameter " << i << std::endl; |
| 436 |
|
if ( fStatus%100 == 0 ) fStatus += 10; |
| 437 |
return false; |
return false; |
| 438 |
} |
} |
| 439 |
} |
} |