mirror of
https://github.com/aportelli/LatAnalyze.git
synced 2025-04-10 19:20:44 +01:00
Minuit minimiser: interface to choose algorithm
This commit is contained in:
parent
6202ed4518
commit
af3023038b
@ -62,11 +62,17 @@ double MinuitMinimizer::MinuitFunction::Up(void) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// constructor /////////////////////////////////////////////////////////////////
|
// constructor /////////////////////////////////////////////////////////////////
|
||||||
MinuitMinimizer::MinuitMinimizer(const Index dim)
|
MinuitMinimizer::MinuitMinimizer(const Index dim, const Algorithm algorithm)
|
||||||
: Minimizer(dim)
|
: Minimizer(dim)
|
||||||
|
, algorithm_(algorithm)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
// access //////////////////////////////////////////////////////////////////////
|
// access //////////////////////////////////////////////////////////////////////
|
||||||
|
MinuitMinimizer::Algorithm MinuitMinimizer::getAlgorithm(void) const
|
||||||
|
{
|
||||||
|
return algorithm_;
|
||||||
|
}
|
||||||
|
|
||||||
double MinuitMinimizer::getPrecision(void) const
|
double MinuitMinimizer::getPrecision(void) const
|
||||||
{
|
{
|
||||||
LATAN_ERROR(Implementation,
|
LATAN_ERROR(Implementation,
|
||||||
@ -75,6 +81,11 @@ double MinuitMinimizer::getPrecision(void) const
|
|||||||
return 0.;
|
return 0.;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MinuitMinimizer::setAlgorithm(const Algorithm algorithm)
|
||||||
|
{
|
||||||
|
algorithm_ = algorithm;
|
||||||
|
}
|
||||||
|
|
||||||
void MinuitMinimizer::setPrecision(const double precision __dumb)
|
void MinuitMinimizer::setPrecision(const double precision __dumb)
|
||||||
{
|
{
|
||||||
LATAN_ERROR(Implementation,
|
LATAN_ERROR(Implementation,
|
||||||
@ -134,13 +145,21 @@ const DVec & MinuitMinimizer::operator()(const DoubleFunction &f)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// minimization and output
|
// minimization and output
|
||||||
MnMigrad minimizer(minuitF, parameters, 2);
|
unique_ptr<MnApplication> minimizer(nullptr);
|
||||||
|
if (algorithm_ == Algorithm::Migrad)
|
||||||
|
{
|
||||||
|
minimizer.reset(new MnMigrad(minuitF, parameters, 2));
|
||||||
|
}
|
||||||
|
else if (algorithm_ == Algorithm::Simplex)
|
||||||
|
{
|
||||||
|
minimizer.reset(new MnSimplex(minuitF, parameters, 2));
|
||||||
|
}
|
||||||
unsigned int iTry = 0;
|
unsigned int iTry = 0;
|
||||||
FunctionMinimum min = minimizer();
|
FunctionMinimum min = (*minimizer)();
|
||||||
|
|
||||||
while ((!min.IsValid())&&(iTry < maxTry))
|
while ((!min.IsValid())&&(iTry < maxTry))
|
||||||
{
|
{
|
||||||
min = minimizer();
|
min = (*minimizer)();
|
||||||
iTry++;
|
iTry++;
|
||||||
}
|
}
|
||||||
if (!min.IsValid())
|
if (!min.IsValid())
|
||||||
|
@ -33,6 +33,12 @@ BEGIN_LATAN_NAMESPACE
|
|||||||
|
|
||||||
class MinuitMinimizer: public Minimizer
|
class MinuitMinimizer: public Minimizer
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
enum class Algorithm
|
||||||
|
{
|
||||||
|
Migrad = 1,
|
||||||
|
Simplex = 2
|
||||||
|
};
|
||||||
private:
|
private:
|
||||||
class MinuitFunction: public ROOT::Minuit2::FCNBase
|
class MinuitFunction: public ROOT::Minuit2::FCNBase
|
||||||
{
|
{
|
||||||
@ -49,14 +55,19 @@ private:
|
|||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
// constructor
|
// constructor
|
||||||
explicit MinuitMinimizer(const Index dim);
|
explicit MinuitMinimizer(const Index dim,
|
||||||
|
const Algorithm algorithm = Algorithm::Migrad);
|
||||||
// destructor
|
// destructor
|
||||||
virtual ~MinuitMinimizer(void) = default;
|
virtual ~MinuitMinimizer(void) = default;
|
||||||
// access
|
// access
|
||||||
virtual double getPrecision(void) const;
|
virtual double getPrecision(void) const;
|
||||||
|
Algorithm getAlgorithm(void) const;
|
||||||
virtual void setPrecision(const double precision);
|
virtual void setPrecision(const double precision);
|
||||||
|
void setAlgorithm(const Algorithm algorithm);
|
||||||
// minimization
|
// minimization
|
||||||
virtual const DVec & operator()(const DoubleFunction &f);
|
virtual const DVec & operator()(const DoubleFunction &f);
|
||||||
|
private:
|
||||||
|
Algorithm algorithm_;
|
||||||
};
|
};
|
||||||
|
|
||||||
END_LATAN_NAMESPACE
|
END_LATAN_NAMESPACE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user