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