92 std::string algoname(type);
93 std::transform(algoname.begin(), algoname.end(), algoname.begin(), (
int(*)(
int)) tolower );
95 if (algoname.find(
"robust") != std::string::npos)
fRobust =
true;
111 Error(
"TLinearMinimizer::SetFunction(IMultiGenFunction)",
"Wrong type of function used for Linear fitter");
115 const Chi2Func * chi2func =
dynamic_cast<const Chi2Func *
>(&objfunc);
116 if (chi2func ==
nullptr) {
117 Error(
"TLinearMinimizer::SetFunction(IMultiGenFunction)",
"Wrong type of function used for Linear fitter");
124 const ModelFunc * modfunc =
dynamic_cast<const ModelFunc*
>( &(chi2func->ModelFunction()) );
125 assert(modfunc !=
nullptr);
127 fDim = chi2func->NDim();
132 for (
unsigned int i = 0; i <
fDim; ++i) {
139 std::string fname =
"_LinearMinimimizer_BasisFunction_" +
151 fFitter->SetBasisFunctions(&flist);
156 std::vector<double> xc(data.NDim());
157 for (
unsigned int i = 0; i < data.Size(); ++i) {
159 const double * x1 = data.GetPoint(i,
y);
161 if (! data.Opt().fErrors1) {
165 double binVolume = 1.;
166 double *
x =
nullptr;
167 if (data.Opt().fBinVolume) {
169 const double * x2 = data.BinUpEdge(i);
170 for (
unsigned int j = 0; j < data.NDim(); ++j) {
171 binVolume *= (x2[j]-x1[j]);
173 xc[j] = 0.5 * (x2[j]+ x1[j]);
175 if (data.Opt().fNormBinVolume) binVolume /= data.RefVolume();
181 x =
const_cast<double*
>(x1);
192 fFitter->FixParameter(ivar, val);
211 std::cout <<
"TLinearMinimizer: Robust fitting with h = " <<
h << std::endl;
217 Warning(
"Minimize",
"TLinearFitter failed in finding the solution");
226 for (
unsigned int i = 0; i <
fDim; ++i) {
231 double * cov =
fFitter->GetCovarianceMatrix();
Error("WriteTObject","The current directory (%s) is not associated with a file. The object (%s) has not been written.", GetName(), objname)
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
Class describing the binned data sets : vectors of x coordinates, y values and optionally error on y ...
Chi2FCN class for binned fits using the least square methods.
virtual bool HasGradient() const
double Tolerance() const
Absolute tolerance.
int fStatus
status of minimizer
int PrintLevel() const
Set print level.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
void SetFunction(const ROOT::Math::IMultiGenFunction &func) override
set the fit model function
~TLinearMinimizer() override
Destructor (no operations).
bool fRobust
return reference to the objective function virtual const ROOT::Math::IGenFunction & Function() const;
const ROOT::Math::IMultiGradFunction * fObjFunc
bool Minimize() override
method to perform the minimization
std::vector< double > fParams
TLinearMinimizer(int type=0)
Default constructor.
std::vector< double > fCovar
std::vector< double > fErrors
bool SetFixedVariable(unsigned int, const std::string &, double) override
set fixed variable (override if minimizer supports them )
void Add(TObject *obj) override
This class defines a UUID (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDent...
const char * AsString() const
Return UUID as string. Copy string immediately since it will be reused.
IMultiGenFunctionTempl< double > IMultiGenFunction
ParamFunctorTempl< double > ParamFunctor
IParametricGradFunctionMultiDim IParamMultiGradFunction
double operator()(double *x, double *)
BasisFunction(const Func &f, int k)