mirror of
https://github.com/aportelli/LatAnalyze.git
synced 2024-11-10 00:45:36 +00:00
minimiser interface improvement
This commit is contained in:
parent
c294553991
commit
ca73ef1269
@ -49,9 +49,13 @@ void Minimizer::resize(const Index dim)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// limits //////////////////////////////////////////////////////////////////////
|
|
||||||
double Minimizer::getHighLimit(const Index i) const
|
double Minimizer::getHighLimit(const Index i) const
|
||||||
{
|
{
|
||||||
|
if (i >= getDim())
|
||||||
|
{
|
||||||
|
LATAN_ERROR(Size, "invalid variable index");
|
||||||
|
}
|
||||||
|
|
||||||
return highLimit_(i);
|
return highLimit_(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,6 +66,11 @@ const DVec & Minimizer::getHighLimit(const PlaceHolder ph __dumb) const
|
|||||||
|
|
||||||
double Minimizer::getLowLimit(const Index i) const
|
double Minimizer::getLowLimit(const Index i) const
|
||||||
{
|
{
|
||||||
|
if (i >= getDim())
|
||||||
|
{
|
||||||
|
LATAN_ERROR(Size, "invalid variable index");
|
||||||
|
}
|
||||||
|
|
||||||
return lowLimit_(i);
|
return lowLimit_(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,11 +81,21 @@ const DVec & Minimizer::getLowLimit(const PlaceHolder ph __dumb) const
|
|||||||
|
|
||||||
bool Minimizer::hasHighLimit(const Index i) const
|
bool Minimizer::hasHighLimit(const Index i) const
|
||||||
{
|
{
|
||||||
|
if (i >= getDim())
|
||||||
|
{
|
||||||
|
LATAN_ERROR(Size, "invalid variable index");
|
||||||
|
}
|
||||||
|
|
||||||
return hasHighLimit_(i);
|
return hasHighLimit_(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Minimizer::hasLowLimit(const Index i) const
|
bool Minimizer::hasLowLimit(const Index i) const
|
||||||
{
|
{
|
||||||
|
if (i >= getDim())
|
||||||
|
{
|
||||||
|
LATAN_ERROR(Size, "invalid variable index");
|
||||||
|
}
|
||||||
|
|
||||||
return hasLowLimit_(i);
|
return hasLowLimit_(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +103,7 @@ void Minimizer::setHighLimit(const Index i, const double l)
|
|||||||
{
|
{
|
||||||
if (i >= getDim())
|
if (i >= getDim())
|
||||||
{
|
{
|
||||||
LATAN_ERROR(Size, "invalid limit index");
|
resize(i + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -97,7 +116,7 @@ void Minimizer::setHighLimit(const PlaceHolder ph __dumb, const DVec &l)
|
|||||||
{
|
{
|
||||||
if (l.size() != getDim())
|
if (l.size() != getDim())
|
||||||
{
|
{
|
||||||
LATAN_ERROR(Size, "invalid limit vector size");
|
resize(l.size());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -110,7 +129,7 @@ void Minimizer::setLowLimit(const Index i, const double l)
|
|||||||
{
|
{
|
||||||
if (i >= getDim())
|
if (i >= getDim())
|
||||||
{
|
{
|
||||||
LATAN_ERROR(Size, "invalid limit index");
|
resize(i + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -123,7 +142,7 @@ void Minimizer::setLowLimit(const PlaceHolder ph __dumb, const DVec &l)
|
|||||||
{
|
{
|
||||||
if (l.size() != getDim())
|
if (l.size() != getDim())
|
||||||
{
|
{
|
||||||
LATAN_ERROR(Size, "invalid limit vector size");
|
resize(l.size());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -136,7 +155,7 @@ void Minimizer::useHighLimit(const Index i, const bool use)
|
|||||||
{
|
{
|
||||||
if (i >= getDim())
|
if (i >= getDim())
|
||||||
{
|
{
|
||||||
LATAN_ERROR(Size, "invalid limit index");
|
resize(i + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -153,7 +172,7 @@ void Minimizer::useLowLimit(const Index i, const bool use)
|
|||||||
{
|
{
|
||||||
if (i >= getDim())
|
if (i >= getDim())
|
||||||
{
|
{
|
||||||
LATAN_ERROR(Size, "invalid limit index");
|
resize(i + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -165,3 +184,13 @@ void Minimizer::useLowLimit(const PlaceHolder ph __dumb, const bool use)
|
|||||||
{
|
{
|
||||||
hasLowLimit_.fill(use);
|
hasLowLimit_.fill(use);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int Minimizer::getMaxPass(void) const
|
||||||
|
{
|
||||||
|
return maxPass_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Minimizer::setMaxPass(const unsigned int maxPass)
|
||||||
|
{
|
||||||
|
maxPass_ = maxPass;
|
||||||
|
}
|
||||||
|
@ -41,7 +41,6 @@ public:
|
|||||||
virtual ~Minimizer(void) = default;
|
virtual ~Minimizer(void) = default;
|
||||||
// access
|
// access
|
||||||
virtual void resize(const Index dim);
|
virtual void resize(const Index dim);
|
||||||
// limits
|
|
||||||
virtual double getHighLimit(const Index i) const ;
|
virtual double getHighLimit(const Index i) const ;
|
||||||
virtual const DVec & getHighLimit(const PlaceHolder ph = _) const;
|
virtual const DVec & getHighLimit(const PlaceHolder ph = _) const;
|
||||||
virtual double getLowLimit(const Index i) const;
|
virtual double getLowLimit(const Index i) const;
|
||||||
@ -58,11 +57,14 @@ public:
|
|||||||
virtual void useLowLimit(const Index i, const bool use = true);
|
virtual void useLowLimit(const Index i, const bool use = true);
|
||||||
virtual void useLowLimit(const PlaceHolder ph = _,
|
virtual void useLowLimit(const PlaceHolder ph = _,
|
||||||
const bool use = true);
|
const bool use = true);
|
||||||
|
virtual unsigned int getMaxPass(void) const;
|
||||||
|
virtual void setMaxPass(const unsigned int maxPass);
|
||||||
// minimization
|
// minimization
|
||||||
virtual const DVec & operator()(const DoubleFunction &f) = 0;
|
virtual const DVec & operator()(const DoubleFunction &f) = 0;
|
||||||
private:
|
private:
|
||||||
DVec highLimit_, lowLimit_;
|
DVec highLimit_, lowLimit_;
|
||||||
Vec<bool> hasHighLimit_, hasLowLimit_;
|
Vec<bool> hasHighLimit_, hasLowLimit_;
|
||||||
|
unsigned int maxPass_{5u};
|
||||||
};
|
};
|
||||||
|
|
||||||
END_LATAN_NAMESPACE
|
END_LATAN_NAMESPACE
|
||||||
|
@ -26,7 +26,6 @@ using namespace std;
|
|||||||
using namespace Latan;
|
using namespace Latan;
|
||||||
|
|
||||||
static constexpr double initErr = 0.1;
|
static constexpr double initErr = 0.1;
|
||||||
static constexpr unsigned int maxTry = 10u;
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* MinuitMinimizer implementation *
|
* MinuitMinimizer implementation *
|
||||||
@ -137,28 +136,21 @@ const DVec & MinuitMinimizer::operator()(const DoubleFunction &f)
|
|||||||
int status;
|
int status;
|
||||||
unsigned int n = 0;
|
unsigned int n = 0;
|
||||||
|
|
||||||
if (getVerbosity() >= Verbosity::Normal)
|
min->SetStrategy(2);
|
||||||
{
|
|
||||||
cout << "========== Minuit minimization, pass #1";
|
|
||||||
cout << " ==========" << endl;
|
|
||||||
}
|
|
||||||
min->SetStrategy(0);
|
|
||||||
min->Minimize();
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
n++;
|
|
||||||
if (getVerbosity() >= Verbosity::Normal)
|
if (getVerbosity() >= Verbosity::Normal)
|
||||||
{
|
{
|
||||||
cout << "========== Minuit minimization, pass #" << n + 1;
|
cout << "========== Minuit minimization, pass #" << n + 1;
|
||||||
cout << " ==========" << endl;
|
cout << " =========" << endl;
|
||||||
}
|
}
|
||||||
min->SetStrategy(2);
|
|
||||||
min->Minimize();
|
min->Minimize();
|
||||||
status = min->Status();
|
status = min->Status();
|
||||||
} while (status and (n < maxTry));
|
n++;
|
||||||
|
} while (status and (n < getMaxPass()));
|
||||||
if (getVerbosity() >= Verbosity::Normal)
|
if (getVerbosity() >= Verbosity::Normal)
|
||||||
{
|
{
|
||||||
cout << "======================================" << endl;
|
cout << "=================================================" << endl;
|
||||||
}
|
}
|
||||||
switch (status)
|
switch (status)
|
||||||
{
|
{
|
||||||
|
@ -27,7 +27,8 @@
|
|||||||
BEGIN_LATAN_NAMESPACE
|
BEGIN_LATAN_NAMESPACE
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* interface to CERN Minuit minimizer (http://www.cern.ch/minuit) *
|
* interface to CERN Minuit minimizer *
|
||||||
|
* ( http://www.cern.ch/minuit ) *
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
class MinuitMinimizer: public Minimizer
|
class MinuitMinimizer: public Minimizer
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user