10 #ifndef ROOT_Minuit2_MinosError
11 #define ROOT_Minuit2_MinosError
29 MinosError() : fParameter(0), fMinValue(0.), fUpper(MnCross()), fLower(MnCross()) {}
31 MinosError(
unsigned int par,
double min,
const MnCross& low,
const MnCross& up) : fParameter(par), fMinValue(min), fUpper(up), fLower(low) {}
35 MinosError(
const MinosError& err) : fParameter(err.fParameter), fMinValue(err.fMinValue), fUpper(err.fUpper), fLower(err.fLower) {}
37 MinosError& operator=(
const MinosError& ) =
default;
39 MinosError& operator()(
const MinosError& err) {
40 fParameter = err.fParameter;
41 fMinValue = err.fMinValue;
47 std::pair<double,double> operator()()
const {
48 return std::pair<double,double>(Lower(), Upper());
50 double Lower()
const {
51 if ( AtLowerLimit() )
return LowerState().Parameter( Parameter() ).LowerLimit() - fMinValue;
52 return -1.*LowerState().Error(Parameter())*(1. + fLower.Value());
54 double Upper()
const {
55 if ( AtUpperLimit() )
return UpperState().Parameter( Parameter() ).UpperLimit() - fMinValue;
56 return UpperState().Error(Parameter())*(1. + fUpper.Value());
58 unsigned int Parameter()
const {
return fParameter;}
59 const MnUserParameterState& LowerState()
const {
return fLower.State();}
60 const MnUserParameterState& UpperState()
const {
return fUpper.State();}
61 bool IsValid()
const {
return fLower.IsValid() && fUpper.IsValid();}
62 bool LowerValid()
const {
return fLower.IsValid();}
63 bool UpperValid()
const {
return fUpper.IsValid();}
64 bool AtLowerLimit()
const {
return fLower.AtLimit();}
65 bool AtUpperLimit()
const {
return fUpper.AtLimit();}
66 bool AtLowerMaxFcn()
const {
return fLower.AtMaxFcn();}
67 bool AtUpperMaxFcn()
const {
return fUpper.AtMaxFcn();}
68 bool LowerNewMin()
const {
return fLower.NewMinimum();}
69 bool UpperNewMin()
const {
return fUpper.NewMinimum();}
70 unsigned int NFcn()
const {
return fUpper.NFcn() + fLower.NFcn();}
71 double Min()
const {
return fMinValue;}
75 unsigned int fParameter;
85 #endif // ROOT_Minuit2_MinosError