45 parameters = m_parameters->full_parameter(parameters);
46 return m_function(xx, m_inputs, parameters);
62 void cbl::statistics::Model::stats_from_chains (
const std::vector<std::vector<double>> xx, std::vector<std::vector<double>> &median_model, std::vector<std::vector<double>> &low_model, std::vector<std::vector<double>> &up_model,
const int start,
const int thin)
65 if (m_dimension==Dim::_1D_) {
67 sz2 = int(xx[0].size());
69 else if (m_dimension==Dim::_2D_) {
70 sz1 = int(xx[0].size());
71 sz2 = int(xx[1].size());
74 ErrorCBL(
"wrong size for xx vector!",
"stats_from_chains",
"Model.cpp");
76 vector<double> _median(sz1*sz2, 0);
77 vector<double> _low(sz1*sz2, 0);
78 vector<double> _up(sz1*sz2, 0);
80 vector<vector<double>> models(floor((m_parameters->chain_size()-start)/thin)*m_parameters->chain_nwalkers(), vector<double>(0));
82 #pragma omp parallel num_threads(omp_get_max_threads())
84 #pragma omp for schedule(static,2)
85 for (
size_t j=start; j<m_parameters->chain_size(); j+=thin) {
87 for (
size_t i=0; i<m_parameters->chain_nwalkers(); i++) {
89 vector<double> parameters(m_parameters->nparameters());
90 for (
size_t k=0; k<m_parameters->nparameters(); k++)
91 parameters[k] = m_parameters->chain_value(k, j, i);
93 models[(j-start)/thin*m_parameters->chain_nwalkers()+i] =
flatten(this->
operator()(xx, parameters));
98 vector<vector<double>> tr_models =
transpose(models);
100 for (
size_t i=0; i<tr_models.size(); i++) {
101 vector<double> vv = tr_models[i];
102 sort(vv.begin(), vv.end());
103 int low = vv.size()*0.16;
104 int up = vv.size()*0.84;
105 int median = vv.size()*0.5;
106 _median[i] = vv[median];
111 median_model =
reshape(_median, sz1, sz2);
112 low_model =
reshape(_low, sz1, sz2);
113 up_model =
reshape(_up, sz1, sz2);
The class ModelParameters.
void set_parameters(const std::shared_ptr< ModelParameters > parameters)
set the model parameters
std::vector< std::vector< double > > operator()(const std::vector< std::vector< double >> xx, std::vector< double > ¶meters) const
evalueate the model function at xx, for Model1D
void stats_from_chains(const std::vector< std::vector< double >> xx, std::vector< std::vector< double >> &median_model, std::vector< std::vector< double >> &low_model, std::vector< std::vector< double >> &up_model, const int start=0, const int thin=1)
compute the median and percentiles of the model from MCMC chains
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
std::vector< T > flatten(std::vector< std::vector< T >> matrix)
flatten a matrix in a vector of size
std::vector< std::vector< T > > transpose(std::vector< std::vector< T >> matrix)
transpose a matrix
std::vector< std::vector< T > > reshape(std::vector< T > vec, const int size1, const int size2)
reshape a vector into a matrix of given number of rows and columns