Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
MinosError.h
Go to the documentation of this file.
1 // @(#)root/minuit2:$Id$
2 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei 2003-2005
3 
4 /**********************************************************************
5  * *
6  * Copyright (c) 2005 LCG ROOT Math team, CERN/PH-SFT *
7  * *
8  **********************************************************************/
9 
10 #ifndef ROOT_Minuit2_MinosError
11 #define ROOT_Minuit2_MinosError
12 
13 #include "Minuit2/MnCross.h"
14 #include <iostream>
15 
16 namespace ROOT {
17 
18  namespace Minuit2 {
19 
20 //____________________________________________________________________________________
21 /**
22  Class holding the result of Minos (lower and upper values) for a specific parameter
23  */
24 
25 class MinosError {
26 
27 public:
28 
29  MinosError() : fParameter(0), fMinValue(0.), fUpper(MnCross()), fLower(MnCross()) {}
30 
31  MinosError(unsigned int par, double min, const MnCross& low, const MnCross& up) : fParameter(par), fMinValue(min), fUpper(up), fLower(low) {}
32 
33  ~MinosError() {}
34 
35  MinosError(const MinosError& err) : fParameter(err.fParameter), fMinValue(err.fMinValue), fUpper(err.fUpper), fLower(err.fLower) {}
36 
37  MinosError& operator=(const MinosError& ) = default;
38 
39  MinosError& operator()(const MinosError& err) {
40  fParameter = err.fParameter;
41  fMinValue = err.fMinValue;
42  fUpper = err.fUpper;
43  fLower = err.fLower;
44  return *this;
45  }
46 
47  std::pair<double,double> operator()() const {
48  return std::pair<double,double>(Lower(), Upper());
49  }
50  double Lower() const {
51  if ( AtLowerLimit() ) return LowerState().Parameter( Parameter() ).LowerLimit() - fMinValue;
52  return -1.*LowerState().Error(Parameter())*(1. + fLower.Value());
53  }
54  double Upper() const {
55  if ( AtUpperLimit() ) return UpperState().Parameter( Parameter() ).UpperLimit() - fMinValue;
56  return UpperState().Error(Parameter())*(1. + fUpper.Value());
57  }
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;}
72 
73 private:
74 
75  unsigned int fParameter;
76  double fMinValue;
77  MnCross fUpper;
78  MnCross fLower;
79 };
80 
81  } // namespace Minuit2
82 
83 } // namespace ROOT
84 
85 #endif // ROOT_Minuit2_MinosError