13 #ifndef ROOT_Fit_Chi2FCN
14 #define ROOT_Fit_Chi2FCN
16 #include "Fit/BasicFCN.h"
48 template<
class DerivFunType,
class ModelFunType = ROOT::Math::IParamMultiFunction>
49 class Chi2FCN :
public BasicFCN<DerivFunType, ModelFunType, BinData> {
53 typedef typename ModelFunType::BackendType
T;
54 typedef BasicFCN<DerivFunType, ModelFunType, BinData>
BaseFCN;
66 Chi2FCN (
const std::shared_ptr<BinData> & data,
const std::shared_ptr<IModelFunction> & func, const ::ROOT::Fit::ExecutionPolicy &executionPolicy = ::ROOT::Fit::ExecutionPolicy::kSerial) :
69 fGrad ( std::vector<double> ( func->NPar() ) ),
77 Chi2FCN (
const BinData & data,
const IModelFunction & func, const ::ROOT::Fit::ExecutionPolicy &executionPolicy = ::ROOT::Fit::ExecutionPolicy::kSerial) :
80 fGrad ( std::vector<double> ( func.NPar() ) ),
92 BaseFCN(f.DataPtr(), f.ModelFunctionPtr() ),
102 SetData(rhs.DataPtr() );
103 SetModelFunction(rhs.ModelFunctionPtr() );
117 using BaseObjFunction::operator();
121 virtual double DataElement(
const double *x,
unsigned int i,
double *g)
const {
122 if (i==0) this->UpdateNCalls();
127 virtual void Gradient(
const double *x,
double *g)
const {
147 virtual double DoEval (
const double * x)
const {
148 this->UpdateNCalls();
149 if (BaseFCN::Data().HaveCoordErrors() || BaseFCN::Data().HaveAsymErrors())
156 virtual double DoDerivative(
const double * x,
unsigned int icoord )
const {
158 return fGrad[icoord];
BaseObjFunction::BaseFunction BaseFunction
virtual double DoDerivative(const double *x, unsigned int icoord) const
virtual BaseObjFunction::Type_t Type() const
get type of fit method function
virtual BaseFunction * Clone() const
Chi2FCN & operator=(const Chi2FCN &rhs)
virtual void Gradient(const double *x, double *g) const
Chi2FCN(const BinData &data, const IModelFunction &func, const ::ROOT::Fit::ExecutionPolicy &executionPolicy=::ROOT::Fit::ExecutionPolicy::kSerial)
std::vector< double > fGrad
::ROOT::Math::IParamMultiFunctionTempl< T > IModelFunction
BasicFCN< DerivFunType, ModelFunType, BinData > BaseFCN
ModelFunType::BackendType T
virtual void SetNFitPoints(unsigned int n) const
set number of fit points (need to be called in const methods, make it const)
Chi2FCN(const Chi2FCN &f)
::ROOT::Math::BasicFitMethodFunction< DerivFunType > BaseObjFunction
virtual double DoEval(const double *x) const
BaseObjFunction::Type_t Type_t
::ROOT::Fit::ExecutionPolicy fExecutionPolicy
virtual double DataElement(const double *x, unsigned int i, double *g) const
i-th chi-square residual
Chi2FCN(const std::shared_ptr< BinData > &data, const std::shared_ptr< IModelFunction > &func, const ::ROOT::Fit::ExecutionPolicy &executionPolicy=::ROOT::Fit::ExecutionPolicy::kSerial)
Type_t
enumeration specyfing the possible fit method types
FunctionType::BaseFunc BaseFunction
Chi2FCN< ROOT::Math::IMultiGenFunction, ROOT::Math::IParamMultiFunction > Chi2Function
Chi2FCN< ROOT::Math::IMultiGradFunction, ROOT::Math::IParamMultiFunction > Chi2GradFunction
static double EvalChi2Effective(const IModelFunctionTempl< double > &func, const BinData &data, const double *p, unsigned int &nPoints)
static void EvalChi2Gradient(const IModelFunctionTempl< double > &func, const BinData &data, const double *p, double *g, unsigned int &nPoints, ROOT::Fit::ExecutionPolicy executionPolicy=ROOT::Fit::ExecutionPolicy::kSerial, unsigned nChunks=0)
static double EvalChi2(const IModelFunction &func, const BinData &data, const double *p, unsigned int &nPoints, ROOT::Fit::ExecutionPolicy executionPolicy, unsigned nChunks=0)
static double EvalChi2Residual(const IModelFunctionTempl< double > &func, const BinData &data, const double *p, unsigned int i, double *g=0)