37 #ifndef __COMBINEDPOSTERIOR__
38 #define __COMBINEDPOSTERIOR__
53 namespace statistics {
69 std::vector<std::shared_ptr<Model>>
models;
75 std::shared_ptr<cbl::cosmology::SuperSampleCovariance>
Sij;
78 std::vector<std::vector<double>>
xx;
205 CombinedPosterior (
const std::vector<std::shared_ptr<Posterior>> posteriors, std::vector<std::string> repeated_par={},
const std::vector<std::vector<std::vector<int>>> common_repeated_par={});
263 CombinedPosterior (
const std::vector<std::vector<std::shared_ptr<Posterior>>> posteriors,
const std::vector<std::shared_ptr<data::CovarianceMatrix>> covariance,
const std::vector<cbl::statistics::LikelihoodType> likelihood_types,
const std::vector<std::string> repeated_par={},
const std::vector<std::vector<std::vector<int>>> common_repeated_par={},
const std::vector<std::shared_ptr<cbl::cosmology::SuperSampleCovariance>> SSC={});
284 void set_log_posterior(
const std::vector<double> logpostA,
const std::vector<double> logpostB);
295 void set_parameters(
const std::vector<std::vector<double>> parametersA,
const std::vector<std::vector<double>> parametersB);
306 void set_weight(
const std::vector<double> weightsA,
const std::vector<double> weightsB);
318 void m_check_repeated_par (
int dummy_Nposteriors, std::vector<std::shared_ptr<Posterior>> posteriors,
const std::vector<std::string> repeated_par);
333 void m_check_common_repeated_par (
int dummy_Nposteriors, std::vector<std::shared_ptr<Posterior>> posteriors, std::vector<std::string> repeated_par, std::vector<std::vector<std::vector<int>>> common_repeated_par);
350 void m_add_prior (
bool par_is_repeated, std::vector<std::shared_ptr<Posterior>> posteriors,
const int N,
const int k, std::vector<std::shared_ptr<cbl::statistics::PriorDistribution>> &prior_distributions);
378 void m_set_common_repeated_par (std::vector<std::shared_ptr<Posterior>> posteriors,
const bool is_in_parnames,
const int N,
const int k,
const std::vector<std::string> repeated_par,
const std::vector<std::vector<std::vector<int>>> common_repeated_par, std::vector<std::shared_ptr<cbl::statistics::PriorDistribution>> &prior_distributions, std::vector<std::string> ¶meter_names, std::vector<std::string> &original_names, std::vector<ParameterType> ¶meter_types);
406 void m_set_repeated_par (std::vector<std::shared_ptr<Posterior>> posteriors,
const bool is_in_parnames,
const int N,
const int k,
const std::vector<std::string> repeated_par,
const std::vector<std::vector<std::vector<int>>> common_repeated_par, std::vector<std::shared_ptr<cbl::statistics::PriorDistribution>> &prior_distributions, std::vector<std::string> ¶meter_names, std::vector<std::string> &original_names, std::vector<ParameterType> ¶meter_types);
439 void m_set_parameters_priors (std::vector<std::shared_ptr<Posterior>> posteriors, std::vector<std::string> repeated_par={},
const std::vector<std::vector<std::vector<int>>> common_repeated_par={});
462 void importance_sampling(
const int distNum,
const double cell_size,
const double rMAX,
const double cut_sigma=-1);
486 void importance_sampling(
const std::string output_path,
const std::string model_nameA,
const std::string model_nameB,
const std::vector<double> start,
const int chain_size,
const int nwalkers,
const int burn_in,
const int thin);
518 void initialize_chains (
const int chain_size,
const int n_walkers,
const double radius,
const std::vector<double> start,
const unsigned int max_iter=10000,
const double tol=1.e-6,
const double epsilon=1.e-3);
556 void initialize_chains (
const int chain_size,
const int n_walkers,
const std::string input_dir,
const std::string input_file,
const int seed);
609 double operator () (std::vector<double> &pp)
const;
628 double log (std::vector<double> &pp)
const;
663 void maximize (
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)
664 { (void)start; (void)parameter_limits; (void)max_iter; (void)tol; (void)epsilon;
ErrorCBL(
"the method is used without parameter_ranges!",
"maximize",
"Posterior.h"); }
681 void maximize (
const std::vector<double> start,
const unsigned int max_iter=10000,
const double tol=1.e-6,
const double epsilon=1.e-4);
739 void write_results (
const std::string output_dir,
const std::string root_file,
const int start=0,
const int thin=1,
const int nbins=50,
const bool fits=
false,
const bool compute_mode=
false,
const int ns=-1,
const int nb=-1);
791 void show_results (
const int start,
const int thin,
const int nbins=50,
const bool show_mode=
false,
const int ns=-1,
const int nb=-1);
816 void write_chain (
const std::string output_dir,
const std::string output_file,
const int start=0,
const int thin=1,
const bool is_FITS_format=
false,
const int prec=5,
const int ww=14);
836 void write_chain_ascii (
const std::string output_dir,
const std::string output_file,
const int start=0,
const int thin=1,
const int prec=5,
const int ww=14);
852 void write_chain_fits (
const std::string output_dir,
const std::string output_file,
const int start=0,
const int thin=1);
875 void write_model_from_chain (
const std::string output_dir,
const std::string output_file,
const int start,
const int thin,
const std::vector<double> xx={},
const std::vector<double> yy={});
897 std::vector<std::vector<double>>
read (
const std::string path,
const std::string filename);
The class CovarianceMatrix.
Class functions used to generate random numbers.
The class SuperSampleCovariance.
The class CombinedPosterior.
void importance_sampling(const int distNum, const double cell_size, const double rMAX, const double cut_sigma=-1)
do the importance sampling for two Posterior objects, which has been read externally
std::vector< std::vector< int > > m_parameter_indexes2
indexes of the parameters, for each posterior object, in the total parameter vector
std::vector< std::vector< int > > m_parameter_indexes
indexes of the parameters, for each posterior object, in the total parameter vector
int m_Nposteriors
number of posteriors
void m_add_prior(bool par_is_repeated, std::vector< std::shared_ptr< Posterior >> posteriors, const int N, const int k, std::vector< std::shared_ptr< cbl::statistics::PriorDistribution >> &prior_distributions)
add a prior
void m_set_parameters_priors(std::vector< std::shared_ptr< Posterior >> posteriors, std::vector< std::string > repeated_par={}, const std::vector< std::vector< std::vector< int >>> common_repeated_par={})
set the parameters and the priors
void show_results(const int start, const int thin, const int nbins=50, const bool show_mode=false, const int ns=-1, const int nb=-1)
show the results of the MCMC combination on the screen.
void write_results(const std::string output_dir, const std::string root_file, const int start=0, const int thin=1, const int nbins=50, const bool fits=false, const bool compute_mode=false, const int ns=-1, const int nb=-1)
store the results of the MCMC sampling to file
~CombinedPosterior()=default
default destructor
void m_set_independent_probes()
set all the internal variables needed for modelling independent probes
std::vector< bool > m_use_grid
use_grid vector
std::vector< std::shared_ptr< Model > > m_models
models to test
void maximize(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 maximizes the posterior, finds the best-fit parameters and store them in the model
void sample_stretch_move(const double aa=2, const bool parallel=true, const std::string outputFile=par::defaultString, const int start=0, const int thin=1, const int nbins=50)
sample the posterior using the stretch-move sampler (Foreman-Mackey et al. 2012)
std::vector< std::vector< double > > read(const std::string path, const std::string filename)
read an entire 2d table data (MCMC chain) of unknown dimension
bool impsampling
importance sampling mode
STR_DependentProbes_data_model m_data_model
the container of parameters for statistically dependent probes
double log(std::vector< double > &pp) const
evaluate the logarithm of the un-normalized posterior as the sum of all the logarithm of the un-norma...
void m_set_repeated_par(std::vector< std::shared_ptr< Posterior >> posteriors, const bool is_in_parnames, const int N, const int k, const std::vector< std::string > repeated_par, const std::vector< std::vector< std::vector< int >>> common_repeated_par, std::vector< std::shared_ptr< cbl::statistics::PriorDistribution >> &prior_distributions, std::vector< std::string > ¶meter_names, std::vector< std::string > &original_names, std::vector< ParameterType > ¶meter_types)
set a repeated parameter
void m_set_common_repeated_par(std::vector< std::shared_ptr< Posterior >> posteriors, const bool is_in_parnames, const int N, const int k, const std::vector< std::string > repeated_par, const std::vector< std::vector< std::vector< int >>> common_repeated_par, std::vector< std::shared_ptr< cbl::statistics::PriorDistribution >> &prior_distributions, std::vector< std::string > ¶meter_names, std::vector< std::string > &original_names, std::vector< ParameterType > ¶meter_types)
set a common repeated parameter
void m_check_repeated_par(int dummy_Nposteriors, std::vector< std::shared_ptr< Posterior >> posteriors, const std::vector< std::string > repeated_par)
check the repeated parameters
void set_log_posterior(const std::vector< double > logpostA, const std::vector< double > logpostB)
set the internal values of m_log_posterior as the concatenation of the logposterior vectors of two co...
void write_model_from_chain(const std::string output_dir, const std::string output_file, const int start, const int thin, const std::vector< double > xx={}, const std::vector< double > yy={})
write the model computing 16th, 50th and 84th percentiles from the MCMC
std::vector< LogLikelihood_function > m_likelihood_functions_grid
likelihood functions on a grid
CombinedPosterior()=default
default constructor
std::vector< Likelihood_function > m_likelihood_functions
likelihood functions
void set_weight(const std::vector< double > weightsA, const std::vector< double > weightsB)
set the internal values of m_weight as the concatenation of the weights vectors of two MCMC chains
std::vector< LogLikelihood_function > m_log_likelihood_functions
log-likelihood functions
std::vector< LogLikelihood_function > m_log_likelihood_functions_grid
log-likelihood functions on a grid
void write_chain(const std::string output_dir, const std::string output_file, const int start=0, const int thin=1, const bool is_FITS_format=false, const int prec=5, const int ww=14)
write the chains obtained after the MCMC sampling
void write_chain_ascii(const std::string output_dir, const std::string output_file, const int start=0, const int thin=1, const int prec=5, const int ww=14)
write the chains obtained after the MCMC sampling on an ascii file
void m_check_common_repeated_par(int dummy_Nposteriors, std::vector< std::shared_ptr< Posterior >> posteriors, std::vector< std::string > repeated_par, std::vector< std::vector< std::vector< int >>> common_repeated_par)
check the common repeated parameters
std::vector< std::shared_ptr< void > > m_likelihood_inputs
likelihood inputs
void set_parameters(const std::vector< std::vector< double >> parametersA, const std::vector< std::vector< double >> parametersB)
set the internal values of m_parameters as the concatenation of the parameters vectors of two cosmolo...
void write_maximization_results(const std::string dir_output, const std::string file)
write maximization results on a file
std::vector< std::shared_ptr< Posterior > > m_posteriors
shared pointers vector containing input Posterior objects
std::vector< std::vector< std::string > > m_parameter_names
names of the parameters, for each posterior object
void write_chain_fits(const std::string output_dir, const std::string output_file, const int start=0, const int thin=1)
write the chains obtained after the MCMC sampling on a FITS file
std::vector< std::shared_ptr< data::Data > > m_datasets
data containers
double operator()(std::vector< double > &pp) const
evaluate the un-normalized posterior as the product of the un-normalized entry posteriors....
void initialize_chains(const int chain_size, const int n_walkers, const double radius, const std::vector< double > start, const unsigned int max_iter=10000, const double tol=1.e-6, const double epsilon=1.e-3)
initialize the chains in a ball around the posterior best-fit parameter values
std::vector< int > m_cosmoPar_indexes
indexes of the cosmological parameters
static const std::string defaultString
default std::string value
double LogLikelihood_Poissonian_combined(std::vector< double > &likelihood_parameter, const std::shared_ptr< void > input)
Poissonian log-likelihood.
double LogLikelihood_Gaussian_combined(std::vector< double > &likelihood_parameter, const std::shared_ptr< void > input)
Gaussian log-likelihood.
double LogLikelihood_Poissonian_SSC_combined(std::vector< double > &likelihood_parameter, const std::shared_ptr< void > input)
Poissonian log-likelihood with super-sample covariance.
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
the structure STR_DependentProbes_data_model
STR_DependentProbes_data_model()=default
default constructor
std::vector< std::vector< int > > par_indexes
parameter indexes for the dependent probes
std::vector< double > flat_xx
flat xx vector
std::vector< std::shared_ptr< Model > > models
vector of pointers to the Model objects
std::vector< double > flat_data
flat data vector
std::vector< std::shared_ptr< Model > > responses
vector of pointers to the response functions, used for super-sample covariance
std::shared_ptr< data::CovarianceMatrix > covariance
pointer to the CovarianceMatrix object
std::vector< std::vector< double > > xx
values where the models are computed
std::shared_ptr< cbl::cosmology::SuperSampleCovariance > Sij
pointer to cbl::cosmology::SuperSampleCovariance object
std::vector< int > cosmoPar_indexes
indexes of the cosmological parameters