12 #ifndef ROOT_Math_MinimizerVariable
13 #define ROOT_Math_MinimizerVariable
27 enum EMinimVariableType {
48 class MinimTransformVariable {
55 MinimTransformVariable () :
56 fFix(false), fLowBound(false), fUpBound(false), fBounds(false),
61 MinimTransformVariable (
double value) :
62 fFix(true), fLowBound(false), fUpBound(false), fBounds(false),
63 fLower(value), fUpper(value)
67 MinimTransformVariable (
double lower,
double upper, SinVariableTransformation * trafo) :
68 fFix(false), fLowBound(false), fUpBound(false), fBounds(true),
70 fLower(lower), fUpper(upper)
74 MinimTransformVariable (
double lower, SqrtLowVariableTransformation * trafo) :
75 fFix(false), fLowBound(true), fUpBound(false), fBounds(false),
76 fTransform(trafo), fLower(lower), fUpper(lower)
80 MinimTransformVariable (
double upper, SqrtUpVariableTransformation * trafo) :
81 fFix(false), fLowBound(true), fUpBound(false), fBounds(false),
82 fTransform(trafo), fLower(upper), fUpper(upper)
86 MinimTransformVariable (
const MinimTransformVariable & rhs) :
87 fFix(rhs.fFix), fLowBound(rhs.fLowBound), fUpBound(rhs.fUpBound), fBounds(rhs.fBounds),
88 fLower(rhs.fLower), fUpper(rhs.fUpper)
91 fTransform.swap( const_cast<MinimTransformVariable &>( rhs).fTransform) ;
95 MinimTransformVariable & operator= (
const MinimTransformVariable & rhs) {
96 if (&rhs ==
this)
return *
this;
98 fLowBound = rhs.fLowBound;
99 fUpBound = rhs.fUpBound;
100 fBounds = rhs.fBounds;
101 fLower = rhs.fLower; fUpper = rhs.fUpper;
104 fTransform.swap( const_cast<MinimTransformVariable &>( rhs).fTransform) ;
109 bool IsFixed()
const {
return fFix; }
111 bool IsLimited()
const {
return fBounds || fLowBound || fUpBound; }
113 bool HasLowerBound()
const {
return fLowBound || fBounds; }
115 bool HasUpperBound()
const {
return fUpBound || fBounds; }
117 double LowerBound()
const {
return fLower; }
119 double UpperBound()
const {
return fUpper; }
121 double FixValue()
const {
return fLower; }
124 double InternalToExternal(
double x)
const {
125 return (fTransform.get() ) ? fTransform->Int2ext(x, fLower, fUpper) : x;
129 double DerivativeIntToExt (
double x)
const {
130 return (fTransform.get() ) ? fTransform->DInt2Ext( x, fLower, fUpper) : 1.0;
134 double ExternalToInternal(
double x)
const {
135 return (fTransform.get() ) ? fTransform->Ext2int(x, fLower, fUpper) : x;
144 std::unique_ptr< MinimizerVariableTransformation> fTransform;