45 if (m_likelihood_type==statistics::LikelihoodType::_NotSet_)
46 ErrorCBL(
"a dataset should be provided!",
"operator ()",
"Chi2.cpp");
48 return -2*m_log_likelihood_function(pp, m_likelihood_inputs);
55 cbl::statistics::Chi2::Chi2 (
const std::shared_ptr<data::Data> data,
const std::shared_ptr<Model> model,
const bool use_covariance,
const std::vector<size_t> x_index,
const int w_index)
63 set_function(LikelihoodType::_Gaussian_Covariance_, m_x_index, m_w_index);
65 set_function(LikelihoodType::_Gaussian_Error_, m_x_index, m_w_index);
67 m_likelihood_inputs = make_shared<STR_likelihood_inputs>(
STR_likelihood_inputs(m_data, m_model, m_x_index, m_w_index));
74 void cbl::statistics::Chi2::minimize (
const vector<double> start, vector<vector<double>> parameter_limits,
const unsigned int max_iter,
const double tol,
const double epsilon)
76 if (m_likelihood_type==statistics::LikelihoodType::_NotSet_)
77 ErrorCBL(
"a dataset should be provided!",
"minimize",
"Chi2.cpp");
79 unsigned int npar = m_model->parameters()->nparameters_free();
82 ErrorCBL(
"there is no parameter free to vary!",
"minimize",
"Chi2.cpp");
83 if (start.size() != npar && parameter_limits.size()!=0)
84 ErrorCBL(
"wrong size for the vector of starting parameters!",
"minimize",
"Chi2.cpp");
85 if (parameter_limits.size() != npar && parameter_limits.size()!=0)
86 ErrorCBL(
"wrong size for the vector of parameter limits!",
"minimize",
"Chi2.cpp");
89 function<double(vector<double> &)> func = [
this](vector<double> & pp) {
90 return this->operator()(pp);
93 coutCBL <<
"Minimizing..." << endl;
95 coutCBL <<
"Done!" << endl << endl;
97 m_model->parameters()->set_bestfit_values(result);
99 m_model->parameters()->write_bestfit_info();
100 coutCBL <<
"Chi2 = " << this->operator()(result) << endl << endl;
#define coutCBL
CBL print message.
Chi2()
default constructor
double operator()(std::vector< double > &pp) const
evaluate the
void minimize(const std::vector< double > start, const std::vector< std::vector< double >> parameter_limits, const unsigned int max_iter=10000, const double tol=1.e-6, const double epsilon=1.e-3)
function that minimizes the , finds the best-fit parameters and stores them in model parameters
std::vector< double > GSL_minimize_nD(FunctionDoubleVector func, const std::vector< double > start, const std::vector< std::vector< double >> ranges, const unsigned int max_iter=1000, const double tol=1.e-6, const double epsilon=0.1)
minimize the provided function using GSL procedure
The global namespace of the CosmoBolognaLib
int ErrorCBL(const std::string msg, const std::string functionCBL, const std::string fileCBL, const cbl::glob::ExitCode exitCode=cbl::glob::ExitCode::_error_)
throw an exception: it is used for handling exceptions inside the CosmoBolognaLib