39 using namespace statistics;
49 switch (m_parameter_type[p]) {
50 case statistics::ParameterType::_Base_:
57 case statistics::ParameterType::_Correlated_:
61 case statistics::ParameterType::_Derived_:
66 ErrorCBL(
"no such kind of parameter!",
"status",
"PosteriorParameters.cpp");
79 for (
size_t i=0; i<m_nparameters; i++) {
80 switch (m_parameter_type[i]) {
81 case statistics::ParameterType::_Base_:
83 stat.push_back(
"FIXED");
85 stat.push_back(
"FREE");
88 case statistics::ParameterType::_Correlated_:
89 stat.push_back(
"FREE");
92 case statistics::ParameterType::_Derived_:
93 stat.push_back(
"OUTPUT");
97 ErrorCBL(
"no such kind of parameter!",
"status",
"PosteriorParameters.cpp");
107 if (parameter_value.size()==m_nparameters_free) {
108 vector<double> all_parameters(m_nparameters, 0);
110 for (
size_t i=0; i<m_nparameters_free; i++)
111 all_parameters[m_free_parameter[i]] = parameter_value[i];
113 for (
size_t i=0; i<m_nparameters_fixed; i++)
114 all_parameters[m_fixed_parameter[i]] = m_parameter_prior[m_fixed_parameter[i]]->sample();
116 for (
size_t i=0; i<m_nparameters_derived; i++)
117 all_parameters[m_derived_parameter[i]] = 0.;
119 return all_parameters;
121 else if (parameter_value.size() == m_nparameters) {
122 vector<double> all_parameters = parameter_value;
124 for (
size_t i=0; i<m_nparameters_fixed; i++)
125 all_parameters[m_fixed_parameter[i]] = m_parameter_prior[m_fixed_parameter[i]]->sample();
127 return all_parameters;
130 ErrorCBL(
"the vector of free parameters has the wrong size!",
"full_parameter",
"PosteriorParameters.cpp");
142 m_nparameters_free = 0;
143 m_nparameters_fixed = 0;
144 m_nparameters_base = 0;
145 m_nparameters_correlated = 0;
146 m_nparameters_derived = 0;
148 m_base_parameter.erase(m_base_parameter.begin(), m_base_parameter.end());
149 m_fixed_parameter.erase(m_fixed_parameter.begin(), m_fixed_parameter.end());
150 m_free_parameter.erase(m_free_parameter.begin(), m_free_parameter.end());
151 m_derived_parameter.erase(m_derived_parameter.begin(), m_derived_parameter.end());
153 for (
size_t i=0; i<m_nparameters; i++) {
154 switch (m_parameter_type[i]) {
155 case statistics::ParameterType::_Base_:
156 if (m_parameter_prior[i] != NULL) {
157 if (m_parameter_prior[i]->distributionType()==glob::DistributionType::_Constant_) {
158 m_nparameters_fixed ++;
159 m_fixed_parameter.push_back(i);
162 m_nparameters_free ++;
163 m_free_parameter.push_back(i);
165 m_nparameters_base ++;
166 m_base_parameter.push_back(i);
170 case statistics::ParameterType::_Correlated_:
171 m_nparameters_free ++;
172 m_free_parameter.push_back(i);
173 m_nparameters_correlated ++;
174 m_nparameters_base ++;
175 m_base_parameter.push_back(i);
178 case statistics::ParameterType::_Derived_:
179 m_nparameters_derived ++;
180 m_derived_parameter.push_back(i);
184 ErrorCBL(
"no such kind of parameter!",
"m_set_parameter_type",
"PosteriorParameters.cpp");
195 set_parameters(nparameters, priorDistribution, parameterTypes, parameterNames);
207 ErrorCBL(
"nparameters must be >0!",
"set_parameters",
"PosteriorParameters.cpp");
209 if ((parameterTypes.size()!=nparameters) && (parameterTypes.size()!=0))
210 ErrorCBL(
"the size of parameterTypes is incorrect!",
"set_parameters",
"PosteriorParameters.cpp");
212 if ((parameterNames.size()!=nparameters) && (parameterNames.size()!=0))
213 ErrorCBL(
"the size of parameterNames is incorrect!",
"set_parameters",
"PosteriorParameters.cpp");
216 if ((parameterTypes.size()==nparameters) && (parameterNames.size()==nparameters)) {
217 m_nparameters = nparameters;
218 m_parameter_type = parameterTypes;
219 m_parameter_name = parameterNames;
221 else if ((parameterTypes.size()==0) && (parameterNames.size()==0)) {
222 m_nparameters = nparameters;
223 vector<ParameterType> pTypes(m_nparameters);
224 vector<string> pNames(m_nparameters);
225 for (
size_t i=0; i<m_nparameters; i++) {
226 pTypes[i] = ParameterType::_Base_;
229 m_parameter_type = pTypes;
230 m_parameter_name = pNames;
232 else if ((parameterTypes.size()==nparameters) && (parameterNames.size()==0)) {
233 m_nparameters = nparameters;
234 vector<string> pNames(m_nparameters);
235 for (
size_t i=0; i<m_nparameters; i++)
238 m_parameter_type = parameterTypes;
239 m_parameter_name = pNames;
241 else if ((parameterTypes.size()==0) && (parameterNames.size()==0)) {
242 m_nparameters = nparameters;
243 vector<ParameterType> pTypes(m_nparameters);
244 for (
size_t i=0; i<m_nparameters; i++)
245 pTypes[i] = ParameterType::_Base_;
247 m_parameter_type = pTypes;
248 m_parameter_name = parameterNames;
251 ModelParameters::m_set_parameter_type();
252 m_parameter_bestfit_value.erase(m_parameter_bestfit_value.begin(), m_parameter_bestfit_value.end());
254 set_prior_distribution(priorDistribution);
263 vector<vector<double>> values;
265 for (
size_t i=0; i<m_nparameters; i++)
266 values.push_back(parameter_chain_values(i, start, thin));
277 return m_parameter_covariance[i][j];
286 return m_parameter_covariance;
295 switch (m_parameter_type[p]) {
297 case statistics::ParameterType::_Base_:
298 m_parameter_prior[p] = priorDistribution;
301 case statistics::ParameterType::_Correlated_:
302 m_parameter_prior[p] = priorDistribution;
305 case statistics::ParameterType::_Derived_:
306 m_parameter_prior[p] = NULL;
307 WarningMsgCBL(m_parameter_name[p]+
" is a derived parameter!",
"set_prior_distribution",
"PosteriorParameters.cpp");
311 ErrorCBL(
"no such kind of parameter!",
"set_prior_distribution",
"PosteriorParameters.cpp");
321 size_t priorSize = priorDistribution.size();
322 size_t diff = priorSize-m_nparameters_base+m_nparameters_correlated;
324 m_parameter_prior.erase(m_parameter_prior.begin(), m_parameter_prior.end());
325 m_parameter_prior.resize(m_nparameters, NULL);
326 m_correlated_parameter_prior.erase(m_correlated_parameter_prior.begin(), m_correlated_parameter_prior.end());
327 m_correlated_parameter_prior.resize(diff, NULL);
328 m_multipriors.erase(m_multipriors.begin(), m_multipriors.end());
329 m_multipriors.resize(diff, 0);
331 if (m_nparameters_correlated==0 and diff>0)
332 ErrorCBL (
"The size of the prior vector is incorrect!",
"set_prior_distribution",
"PosteriorParameters.cpp");
334 else if (m_nparameters_correlated>0) {
335 WarningMsgCBL(
"I'm assuming that the correlated parameters have been included as last, with "+
conv(diff,
par::fINT)+
" multidimensional prior(s)!",
"set_prior_distribution",
"PosteriorParameters.cpp");
337 for (
size_t i=diff; i --> 0;) {
338 m_correlated_parameter_prior[i] = priorDistribution[i+priorSize-diff];
339 m_multipriors[i] = priorDistribution[i+priorSize-diff]->get_size_distribution();
343 size_t index_corr = 0;
344 size_t nset_prior = 0;
346 for (
size_t p=0; p<m_nparameters_base; p++) {
348 if (m_parameter_type[m_base_parameter[p]]==statistics::ParameterType::_Correlated_) {
350 if (index_corr>(m_multipriors[nset_prior]-1)) {
355 std::shared_ptr<cbl::glob::Distribution> Distr = priorDistribution[nset_prior+m_nparameters_base-m_nparameters_correlated]->get_distribution(index_corr);
361 set_prior_distribution(m_base_parameter[p], std::make_shared<PriorDistribution>(priorDistr));
365 else set_prior_distribution(m_base_parameter[p], priorDistribution[p]);
368 m_set_parameter_type();
377 for (
size_t i=0; i<m_nparameters_base; i++)
378 m_parameter_prior[m_base_parameter[i]]->set_seed(ran_generator->operator()());
387 auto prior_function = [&] (
const vector<double> parameters,
const shared_ptr<void> prior_inputs)
390 double prior_value = 1;
392 vector<double> new_pars = parameters;
393 int n_erased_elem = 0;
394 for (
size_t i=0; i<m_nparameters_derived; i++) {
395 new_pars.erase(new_pars.begin()+m_derived_parameter[i]-n_erased_elem);
400 for (
size_t i=0; i<m_nparameters_base-m_nparameters_correlated; i++){
401 prior_value *= m_parameter_prior[m_base_parameter[i]]->operator()(new_pars[idx]);
405 int add_previous = 0;
406 for (
size_t i=0; i<m_multipriors.size(); i++) {
407 int start = m_nparameters_base - m_nparameters_correlated + add_previous;
408 add_previous += m_multipriors[i];
409 vector<double> correlated_parameters(new_pars.begin()+start, new_pars.begin()+start+m_multipriors[i]);
410 prior_value *= m_correlated_parameter_prior[i]->operator[](correlated_parameters);
416 shared_ptr<void> prior_function_inputs = NULL;
418 return make_shared<Prior>(prior_function, prior_function_inputs);
428 if (m_parameter_bestfit_value.size()==0)
429 ErrorCBL(
"the best-fit values have not been computed!",
"bestfit_value",
"PosteriorParameters.cpp");
431 return m_parameter_bestfit_value[p];
439 if (m_parameter_bestfit_value.size()==0)
440 ErrorCBL(
"the best-fit values have not been computed!",
"bestfit_value",
"PosteriorParameters.cpp");
442 return m_parameter_bestfit_value;
451 if (bestfit_value.size()!=m_nparameters)
452 ErrorCBL(
"the size of the input vector is incorrect!",
"set_bestfit_values",
"PosteriorParameters.cpp");
454 m_parameter_bestfit_value.erase(m_parameter_bestfit_value.begin(), m_parameter_bestfit_value.end());
456 for (
size_t i=0; i<m_nparameters; i++)
457 m_parameter_bestfit_value.push_back(bestfit_value[i]);
466 set_posterior_distribution(start, thin, nbins, seed);
467 set_parameter_covariance(start, thin);
469 vector<double> bestfit_parameter;
471 for (
size_t i=0; i<m_nparameters; i++) {
473 auto posterior = m_posterior_distribution[i];
475 switch (m_parameter_type[i]) {
477 case statistics::ParameterType::_Base_:
478 if (m_parameter_prior[i]->distributionType()==glob::DistributionType::_Constant_)
479 bestfit_parameter.emplace_back(m_parameter_prior[i]->sample());
481 bestfit_parameter.emplace_back(posterior->median());
484 case statistics::ParameterType::_Correlated_:
485 bestfit_parameter.emplace_back(posterior->median());
488 case statistics::ParameterType::_Derived_:
489 bestfit_parameter.emplace_back(posterior->median());
493 ErrorCBL(
"no such kind of parameter!",
"set_bestfit_values",
"PosteriorParameters.cpp");
497 set_bestfit_values(bestfit_parameter);
506 if (m_parameter_bestfit_value.size()==m_nparameters) {
507 for (
size_t i=0; i<m_nparameters; i++) {
509 switch (m_parameter_type[i]) {
510 case statistics::ParameterType::_Base_:
511 if (m_parameter_prior[i]->distributionType()==glob::DistributionType::_Constant_)
517 case statistics::ParameterType::_Correlated_:
521 case statistics::ParameterType::_Derived_:
526 ErrorCBL(
"no such kind of parameter!",
"write_bestfit_info",
"PosteriorParameters.cpp");
529 Print(m_parameter_bestfit_value[i], 5, 10,
"value = ",
"\n",
true, std::cout);
534 ErrorCBL(
"the best-fit values have not been computed!",
"write_bestfit_info",
"PosteriorParameters.cpp");
544 m_chain_nwalkers = nwalkers;
554 m_chain_value.erase(m_chain_value.begin(), m_chain_value.end());
555 m_chain_value.resize(m_nparameters, vector<double>(m_chain_size*m_chain_nwalkers, 0));
564 vector<vector<double>> values = m_chain_value;
565 size_t old_size = m_chain_size;
567 m_chain_size += append;
571 for (
size_t i=0; i<old_size; i++)
572 for (
size_t j=0; j<m_chain_nwalkers; j++)
573 for (
size_t p=0; p<m_nparameters; p++)
574 set_chain_value(p, i, j, values[p][i*m_chain_nwalkers+j]);
583 vector<double> vv(m_nparameters, 0);
584 for (
size_t i=0; i<m_nparameters; i++)
585 vv[i] = chain_value(i, pos, ww);
594 vector<double> values;
596 for (
size_t i=start; i<m_chain_size; i+=thin)
597 for (
size_t j=0; j<m_chain_nwalkers; j++)
598 values.push_back(chain_value(param, i, j));
609 int size = values[0].size()/nwalkers;
611 if (values[0].size()%nwalkers!=0)
612 ErrorCBL(
"the size of the input values or the number of walkers is incorrect!",
"set_chain_values",
"PosteriorParameters.cpp");
614 set_chain(size, nwalkers);
616 for (
size_t p=0; p<m_nparameters; p++)
617 for (
size_t i=0; i<m_chain_size; i++)
618 for (
size_t j=0; j<m_chain_nwalkers; j++)
619 set_chain_value(p, i, j, values[p][i*m_chain_nwalkers+j]);
628 vector<vector<double>> flatten_val;
630 int nwalkers = values[0][0].size();
632 for (
size_t i=0; i<values.size(); i++) {
634 for (
size_t j=0; j<values[0].size(); j++) {
636 for (
size_t k=0; k<values[i][j].size(); k++)
637 vv.push_back(values[i][j][k]);
639 flatten_val.push_back(vv);
642 set_chain_values(flatten_val, nwalkers);
651 for (
size_t j=0; j<values[0].size(); j++) {
653 for (
size_t i=0; i<values.size(); i++)
654 val.emplace_back(values[i][j]);
656 val = full_parameter(val);
657 for (
size_t i=0; i<val.size(); i++)
658 set_chain_value(i, 0, j, val[i]);
668 std::vector<std::vector<double>> values(m_nparameters, std::vector<double>(m_chain_nwalkers, 0));
670 for (
size_t i=0; i<m_nparameters_base; i++) {
671 const int index = m_base_parameter[i];
672 for (
size_t j=0; j<m_chain_nwalkers; j++) {
673 values[index][j] = m_parameter_prior[index]->sample();
676 initialize_chain(values);
685 vector<vector<double>> value(m_nparameters, vector<double>(m_chain_nwalkers, 0));
690 vector<double> cen = full_parameter(center);
694 for (
size_t i=0; i<m_nparameters_free; i++) {
695 int index = m_free_parameter[i];
697 if (cen[index]+radius<m_parameter_prior[index]->xmin() or cen[index]-radius>m_parameter_prior[index]->xmax())
698 ErrorCBL(
"Wrong parameter range!",
"initialize_chain_ball",
"PosteriorParameters.cpp");
700 for (
size_t j=0; j<m_chain_nwalkers; j++) {
701 double val = ran()+cen[index];
702 while (!m_parameter_prior[index]->isIncluded(val))
703 val = ran()+cen[index];
704 value[index][j] = val;
707 initialize_chain(value);
716 initialize_chain_ball(bestfit_value(), radius, seed);
725 m_posterior_distribution.erase(m_posterior_distribution.begin(), m_posterior_distribution.end());
726 m_posterior_distribution.resize(m_nparameters);
728 for (
size_t i=0; i<m_nparameters_base; i++) {
729 const int index = m_base_parameter[i];
730 if (m_parameter_prior[index]->distributionType()==glob::DistributionType::_Constant_)
731 m_posterior_distribution[index] = make_shared<PosteriorDistribution>(
PosteriorDistribution(glob::DistributionType::_Constant_, m_parameter_prior[index]->sample()));
733 m_posterior_distribution[index] = make_shared<PosteriorDistribution>(
PosteriorDistribution(glob::DistributionType::_Discrete_, parameter_chain_values(index, start, thin), weight, nbins,
"Spline", seed));
736 for (
size_t i=0; i<m_nparameters_derived; i++) {
737 const int index = m_derived_parameter[i];
738 m_posterior_distribution[index] = make_shared<PosteriorDistribution>(
PosteriorDistribution(glob::DistributionType::_Discrete_, parameter_chain_values(index, start, thin), weight, nbins,
"Spline", seed));
748 set_posterior_distribution(start, thin, nbins, seed, weight);
749 set_parameter_covariance(start, thin);
751 const int dp = cout.precision(); cout.precision(4);
757 const double AA = 2./double((ns-nb-1.)*(ns-nb-4.));
758 const double BB = (ns-nb-2.)/
double((ns-nb-1.)*(ns-nb-4.));
759 corr = sqrt((1.+BB*(nb-m_nparameters))/(1.+AA+BB*(m_nparameters-1.)));
762 for (
size_t i=0; i<m_nparameters; i++) {
764 switch (m_parameter_type[i]) {
766 case statistics::ParameterType::_Base_:
767 if (m_parameter_prior[i]->distributionType()==glob::DistributionType::_Constant_) {
769 Print(m_parameter_prior[i]->sample(), 5, 10,
"value =",
"\n",
true, std::cout);
774 auto posterior = m_posterior_distribution[i];
775 const double std = posterior->std()*corr;
776 const double std_diff = (posterior->std()*(corr-1.))*0.5;
778 Print(posterior->mean(), 5, 10,
"Posterior mean = ",
"\n",
true, std::cout);
779 Print(std, 5, 10,
"Posterior standard deviation = ",
"\n",
true, std::cout);
780 Print(posterior->median(), 5, 10,
"Posterior median = ",
"\n",
true, std::cout);
781 Print((posterior->median()-posterior->percentile(16))-std_diff, 5, 10,
"Posterior 16th percentile = ",
"\n",
true, std::cout);
782 Print((posterior->percentile(84)-posterior->median())+std_diff, 5, 10,
"Posterior 84th percentile = ",
"\n",
true, std::cout);
783 if (show_mode)
Print(posterior->mode(), 5, 10,
"Posterior mode = ",
"\n",
true, std::cout);
788 case statistics::ParameterType::_Correlated_:
792 auto posterior = m_posterior_distribution[i];
793 const double std = posterior->std()*corr;
794 const double std_diff = (posterior->std()*(corr-1.))*0.5;
796 Print(posterior->mean(), 5, 10,
"Posterior mean = ",
"\n",
true, std::cout);
797 Print(std, 5, 10,
"Posterior standard deviation = ",
"\n",
true, std::cout);
798 Print(posterior->median(), 5, 10,
"Posterior median = ",
"\n",
true, std::cout);
799 Print((posterior->median()-posterior->percentile(16))-std_diff, 5, 10,
"Posterior 16th percentile = ",
"\n",
true, std::cout);
800 Print((posterior->percentile(84)-posterior->median())+std_diff, 5, 10,
"Posterior 84th percentile = ",
"\n",
true, std::cout);
801 if (show_mode)
Print(posterior->mode(), 5, 10,
"Posterior mode = ",
"\n",
true, std::cout);
806 case statistics::ParameterType::_Derived_:
808 auto posterior = m_posterior_distribution[i];
809 const double std = posterior->std()*corr;
810 const double std_diff = (posterior->std()*(corr-1.))*0.5;
812 Print(posterior->mean(), 5, 10,
"Posterior mean = ",
"\n",
true, std::cout);
813 Print(std, 5, 10,
"Posterior standard deviation = ",
"\n",
true, std::cout);
814 Print(posterior->median(), 5, 10,
"Posterior median = ",
"\n",
true, std::cout);
815 Print((posterior->median()-posterior->percentile(16))-std_diff, 5, 10,
"Posterior 16th percentile = ",
"\n",
true, std::cout);
816 Print((posterior->percentile(84)-posterior->median())+std_diff, 5, 10,
"Posterior 84th percentile = ",
"\n",
true, std::cout);
817 if (show_mode)
Print(posterior->mode(), 5, 10,
"Posterior mode = ",
"\n",
true, std::cout);
823 ErrorCBL(
"no such kind of parameter!",
"show_results",
"PosteriorParameters.cpp");
836 set_posterior_distribution(start, thin, nbins, seed, weight);
837 set_parameter_covariance(start, thin);
839 const string mkdir =
"mkdir -p "+dir;
if (system(mkdir.c_str())) {}
841 const string file_parameters = dir+file+
"_parameters.dat";
842 const string file_covariance = dir+file+
"_covariance.dat";
849 const double AA = 2./double((ns-nb-1.)*(ns-nb-4.));
850 const double BB = (ns-nb-2.)/
double((ns-nb-1.)*(ns-nb-4.));
851 corr = sqrt((1.+BB*(nb-m_nparameters))/(1.+AA+BB*(m_nparameters-1.)));
854 ofstream fout(file_parameters.c_str());
857 fout <<
"### Parameter # status # Posterior mean # Posterior standard deviation # Posterior median # Posterior 16th percentile # Posterior 84th percentile # Posterior mode ###" << endl << endl;
859 fout <<
"### Parameter # status # Posterior mean # Posterior standard deviation # Posterior median # Posterior 16th percentile # Posterior 84th percentile ###" << endl;
861 for (
size_t i=0; i<m_nparameters; i++) {
862 auto posterior = m_posterior_distribution[i];
864 if (m_parameter_type[i]==statistics::ParameterType::_Base_ && m_parameter_prior[i]->distributionType()==glob::DistributionType::_Constant_) {
865 fout << m_parameter_name[i] <<
" FIXED " << m_parameter_prior[i]->sample() <<
" 0 0 0 0 0";
871 const double std = posterior->std()*corr;
872 const double std_diff = (posterior->std()*(corr-1.))*0.5;
873 fout << m_parameter_name[i] <<
" FREE " << posterior->mean() <<
" " << std <<
" " << posterior->median() <<
" " << (posterior->median()-posterior->percentile(16))-std_diff <<
" " << (posterior->percentile(84)-posterior->median())+std_diff;
875 fout <<
" " << posterior->mode() << endl;
880 fout.clear(); fout.close();
coutCBL <<
"I wrote the file: " << file_parameters << endl;
883 fout.open(file_covariance.c_str());
884 for (
size_t i=0; i<m_nparameters; i++) {
885 for (
size_t j=0; j<m_nparameters; j++)
886 fout << i <<
" " << j <<
" " << m_parameter_covariance[i][j] << endl;
890 fout.clear(); fout.close();
coutCBL <<
"I wrote the file: " << file_covariance << endl;
#define coutCBL
CBL print message.
The class PosteriorParameters.
The class PosteriorDistribution.
void set_parameters(const size_t nparameters, const std::vector< std::shared_ptr< PriorDistribution >> priorDistributions, std::vector< ParameterType > parameterTypes, std::vector< std::string > parameterNames) override
set the parameter
void initialize_chain_ball_bestfit(const double radius, const double seed)
initialize the chain values around bestfit values
void write_results(const std::string dir, const std::string file, const int start, const int thin, const int nbins, const int seed=34121, const bool compute_mode=false, const int ns=-1, const int nb=-1, const std::vector< double > weight={})
store the results to file
void reset_chain()
reset the chain using m_size and m_nwalkers
void initialize_chain(const std::vector< std::vector< double >> values)
initialize the chain values
void set_prior_distribution(const int p, const std::shared_ptr< PriorDistribution > priorDistribution)
set the prior distribution for the p-th parameter
void write_bestfit_info()
write bestfit info
std::vector< double > parameter_chain_values(const int param, const int start=0, const int thin=1) const
return all the chain values for a parameter
void set_chain(const size_t size, const size_t nwalkers)
set the chain
std::vector< double > full_parameter(const std::vector< double > parameter_value) const override
return all the model parameters
void set_prior_distribution_seed(const std::shared_ptr< random::UniformRandomNumbers_Int > ran_generator)
set the prior distributions for the parameters
void set_bestfit_values(const std::vector< double > bestfit_value)
set the protected member m_bestfit_value
void show_results(const int start, const int thin, const int nbins, const int seed=34121, const bool show_mode=false, const int ns=-1, const int nb=-1, const std::vector< double > weight={})
show the results on the standard output
std::vector< std::string > status() const
return all the model parameter status
std::vector< double > chain_value_parameter(const int pos, const int ww) const
return the private member m_values at the pp-th step for the ww-th step for all the parameters
void expand_chain(const int append)
expand the already existing chain
std::shared_ptr< Prior > prior() const
get the prior function
PosteriorParameters()=default
default constructor
std::vector< double > bestfit_value() const
get the protected member m_parameter_bestfit_value
void set_posterior_distribution(const int start, const int thin, const int nbins, const int seed=34121, const std::vector< double > weight={})
set the posterior distribution from the chains
void set_chain_values(const std::vector< std::vector< double >> values, const int nwalkers)
set the chain values
void initialize_chain_from_prior()
initialize the chain values random sampling the parameter priors
void set_parameter_covariance(const int start=0, const int thin=1)
set the internal method m_parameter_covariance
void m_set_parameter_type() override
private member to set the parameter types
void initialize_chain_ball(const std::vector< double > center, const double radius, const double seed)
initialize the chain values
std::vector< std::vector< double > > parameter_covariance() const
return the protected member m_parameter_covariance
The class PriorDistribution.
static const std::string col_green
green colour (used when printing something on the screen)
static const std::string col_default
default colour (used when printing something on the screen)
static const std::string col_yellow
yellow colour (used when printing something on the screen)
static const std::string col_bred
bold high intensty red colour (used when printing something on the screen)
static const std::string col_purple
purple colour (used when printing something on the screen)
static const char fINT[]
conversion symbol for: int -> std::string
@ _Constant_
Constant function.
@ _Uniform_
Identity function.
@ _Gaussian_
Gaussian function.
The global namespace of the CosmoBolognaLib
std::string conv(const T val, const char *fact)
convert a number to a std::string
void Print(const T value, const int prec, const int ww, const std::string header="", const std::string end="\n", const bool use_coutCBL=true, std::ostream &stream=std::cout, const std::string colour=cbl::par::col_default)
function to print values with a proper homegenised format
void checkDim(const std::vector< T > vect, const int val, const std::string vector, bool equal=true)
check if the dimension of a std::vector is equal/lower than an input value
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< std::vector< T > > transpose(std::vector< std::vector< T >> matrix)
transpose a matrix
void covariance_matrix(const std::vector< std::vector< double >> mat, std::vector< std::vector< double >> &cov, const bool JK=false)
compute the covariance matrix from an input dataset
void WarningMsgCBL(const std::string msg, const std::string functionCBL, const std::string fileCBL)
internal CBL warning message