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_MnCross
11 #define ROOT_Minuit2_MnCross
12 
13 #include "Minuit2/MnUserParameterState.h"
14 
15 namespace ROOT {
16 
17 namespace Minuit2 {
18 
19 class MnCross {
20 
21 public:
22    class CrossParLimit {
23    };
24    class CrossFcnLimit {
25    };
26    class CrossNewMin {
27    };
28 
29 public:
MnCross()30    MnCross()
31       : fValue(0.), fState(MnUserParameterState()), fNFcn(0), fValid(false), fLimset(false), fMaxFcn(false),
32         fNewMin(false)
33    {
34    }
35 
MnCross(unsigned int nfcn)36    MnCross(unsigned int nfcn)
37       : fValue(0.), fState(MnUserParameterState()), fNFcn(nfcn), fValid(false), fLimset(false), fMaxFcn(false),
38         fNewMin(false)
39    {
40    }
41 
MnCross(const MnUserParameterState & state,unsigned int nfcn)42    MnCross(const MnUserParameterState &state, unsigned int nfcn)
43       : fValue(0.), fState(state), fNFcn(nfcn), fValid(false), fLimset(false), fMaxFcn(false), fNewMin(false)
44    {
45    }
46 
MnCross(double value,const MnUserParameterState & state,unsigned int nfcn)47    MnCross(double value, const MnUserParameterState &state, unsigned int nfcn)
48       : fValue(value), fState(state), fNFcn(nfcn), fValid(true), fLimset(false), fMaxFcn(false), fNewMin(false)
49    {
50    }
51 
MnCross(const MnUserParameterState & state,unsigned int nfcn,CrossParLimit)52    MnCross(const MnUserParameterState &state, unsigned int nfcn, CrossParLimit)
53       : fValue(0.), fState(state), fNFcn(nfcn), fValid(true), fLimset(true), fMaxFcn(false), fNewMin(false)
54    {
55    }
56 
MnCross(const MnUserParameterState & state,unsigned int nfcn,CrossFcnLimit)57    MnCross(const MnUserParameterState &state, unsigned int nfcn, CrossFcnLimit)
58       : fValue(0.), fState(state), fNFcn(nfcn), fValid(false), fLimset(false), fMaxFcn(true), fNewMin(false)
59    {
60    }
61 
MnCross(const MnUserParameterState & state,unsigned int nfcn,CrossNewMin)62    MnCross(const MnUserParameterState &state, unsigned int nfcn, CrossNewMin)
63       : fValue(0.), fState(state), fNFcn(nfcn), fValid(false), fLimset(false), fMaxFcn(false), fNewMin(true)
64    {
65    }
66 
~MnCross()67    ~MnCross() {}
68 
MnCross(const MnCross & cross)69    MnCross(const MnCross &cross)
70       : fValue(cross.fValue), fState(cross.fState), fNFcn(cross.fNFcn), fValid(cross.fValid), fLimset(cross.fLimset),
71         fMaxFcn(cross.fMaxFcn), fNewMin(cross.fNewMin)
72    {
73    }
74 
75    MnCross &operator=(const MnCross &) = default;
76 
operator()77    MnCross &operator()(const MnCross &cross)
78    {
79       fValue = cross.fValue;
80       fState = cross.fState;
81       fNFcn = cross.fNFcn;
82       fValid = cross.fValid;
83       fLimset = cross.fLimset;
84       fMaxFcn = cross.fMaxFcn;
85       fNewMin = cross.fNewMin;
86       return *this;
87    }
88 
Value()89    double Value() const { return fValue; }
State()90    const MnUserParameterState &State() const { return fState; }
IsValid()91    bool IsValid() const { return fValid; }
AtLimit()92    bool AtLimit() const { return fLimset; }
AtMaxFcn()93    bool AtMaxFcn() const { return fMaxFcn; }
NewMinimum()94    bool NewMinimum() const { return fNewMin; }
NFcn()95    unsigned int NFcn() const { return fNFcn; }
96 
97 private:
98    double fValue;
99    MnUserParameterState fState;
100    unsigned int fNFcn;
101    bool fValid;
102    bool fLimset;
103    bool fMaxFcn;
104    bool fNewMin;
105 };
106 
107 } // namespace Minuit2
108 
109 } // namespace ROOT
110 
111 #endif // ROOT_Minuit2_MnCross
112