CosmoBolognaLib
Free Software C++/Python libraries for cosmological calculations
Modelling_TwoPointCorrelation1D_monopole.cpp
Go to the documentation of this file.
1 /********************************************************************
2  * Copyright (C) 2016 by Federico Marulli and Alfonso Veropalumbo *
3  * federico.marulli3@unibo.it *
4  * *
5  * This program is free software; you can redistribute it and/or *
6  * modify it under the terms of the GNU General Public License as *
7  * published by the Free Software Foundation; either version 2 of *
8  * the License, or (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public *
16  * License along with this program; if not, write to the Free *
17  * Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ********************************************************************/
20 
39 
40 using namespace std;
41 
42 using namespace cbl;
43 
44 
45 // ============================================================================================
46 
47 
49 {
50  cout << endl; coutCBL << "Setting up the fiducial dark matter two-point correlation function model..." << endl;
51 
52  const vector<double> rad = linear_bin_vector(m_data_model->step, m_data_model->r_min, m_data_model->r_max);
53  vector<double> xi0;
54 
55  if (m_data_model->sigmaNL==0) {
56 
57  vector<double> kk = logarithmic_bin_vector(m_data_model->step, max(m_data_model->k_min, 1.e-4), min(m_data_model->k_max, 500.)), Pk(m_data_model->step,0);
58 
59  Pk = m_data_model->cosmology->Pk_matter(kk, m_data_model->method_Pk, m_data_model->NL, m_data_model->redshift, m_data_model->store_output, m_data_model->output_root, m_data_model->norm, m_data_model->k_min, m_data_model->k_max, m_data_model->prec, m_data_model->file_par);
60 
61  m_data_model->kk = kk;
62  m_data_model->func_Pk = make_shared<glob::FuncGrid>(glob::FuncGrid(kk, Pk, "Spline"));
63  xi0 = wrapper::fftlog::transform_FFTlog(rad, 1, kk, Pk, 0);
64  }
65 
66  else {
67 
68  vector<double> kk = logarithmic_bin_vector(m_data_model->step, max(m_data_model->k_min, 1.e-4), min(m_data_model->k_max, 500.)), Pk, PkNW, PkDW(m_data_model->step,0);
69  Pk = m_data_model->cosmology->Pk_matter(kk, m_data_model->method_Pk, false, m_data_model->redshift, m_data_model->store_output, m_data_model->output_root, m_data_model->norm, m_data_model->k_min, m_data_model->k_max, m_data_model->prec, m_data_model->file_par);
70  PkNW = m_data_model->cosmology->Pk_matter(kk, "EisensteinHu", false, m_data_model->redshift, m_data_model->store_output, m_data_model->output_root, m_data_model->norm, m_data_model->k_min, m_data_model->k_max, m_data_model->prec, m_data_model->file_par);
71 
72  for (size_t i=0; i<kk.size(); i++)
73  PkDW[i] = PkNW[i]*(1+(Pk[i]/PkNW[i]-1)*exp(-0.5*pow(kk[i]*m_data_model->sigmaNL, 2)));
74 
75  m_data_model->kk = kk;
76  m_data_model->func_Pk = make_shared<glob::FuncGrid>(glob::FuncGrid(kk, Pk, "Spline"));
77  m_data_model->func_Pk_NW = make_shared<glob::FuncGrid>(glob::FuncGrid(kk, PkNW, "Spline"));
78 
79  xi0 = wrapper::fftlog::transform_FFTlog(rad, 1, kk, PkDW);
80  }
81 
82  m_data_model->func_xi = make_shared<glob::FuncGrid>(glob::FuncGrid(rad, xi0, "Spline"));
83 
84  coutCBL << "Done!" << endl << endl;
85 }
86 
87 
88 // ============================================================================================
89 
90 
92 {
93  // create the grid file if it doesn't exist yet
94  const string file_grid = m_data_model->cosmology->create_grid_sigmaM(m_data_model->method_Pk, 0., true, m_data_model->output_root, "Spline", m_data_model->k_max);
95 
96 
97  // read the grid file
98 
99  ifstream fin(file_grid.c_str()); checkIO(fin, file_grid);
100 
101  double MMass, Sigma, Dln_Sigma;
102  vector<double> mass, sigma;
103 
104  while (fin >>MMass>>Sigma>>Dln_Sigma) {
105  mass.push_back(MMass);
106  sigma.push_back(Sigma);
107  }
108 
109 
110  // create the function to interpolate sigma(M) and dlg(sigma(M)
111 
112  m_data_model->func_sigma = make_shared<glob::FuncGrid>(glob::FuncGrid(mass, sigma, "Linear", BinType::_logarithmic_));
113 }
114 
115 
116 // ============================================================================================
117 
118 
120 {
121  coutCBL << "Setting up the fiducial matter power spectrum model" << endl;
122 
123  const vector<double> kk = logarithmic_bin_vector(m_data_HOD->step, max(m_data_HOD->k_min, 1.e-4), min(m_data_HOD->k_max, 500.));
124  vector<double> PkDM(kk.size());
125 
126  PkDM = m_data_HOD->cosmology->Pk_matter(kk, m_data_HOD->method_Pk, m_data_HOD->NL, m_data_HOD->redshift, m_data_HOD->store_output, m_data_HOD->output_root, m_data_HOD->norm, m_data_HOD->k_min, m_data_HOD->k_max, m_data_HOD->prec, m_data_HOD->input_file);
127 
128  m_data_HOD->func_Pk = make_shared<glob::FuncGrid>(glob::FuncGrid(kk, PkDM, "Spline"));
129 }
130 
131 
132 // ============================================================================================
133 
134 
136 {
137  // create the grid file if it doesn't exist yet
138  const string file_grid = m_data_HOD->cosmology->create_grid_sigmaM(m_data_HOD->method_Pk, 0., true, m_data_HOD->output_root, m_data_HOD->interpType, m_data_HOD->k_max, m_data_HOD->input_file, m_data_HOD->is_parameter_file);
139 
140 
141  // read the grid file
142 
143  ifstream fin(file_grid.c_str()); checkIO(fin, file_grid);
144 
145  double MMass, Sigma, Dln_Sigma;
146  vector<double> mass, sigma, dln_sigma;
147 
148  while (fin >>MMass>>Sigma>>Dln_Sigma) {
149  mass.push_back(MMass);
150  sigma.push_back(Sigma);
151  dln_sigma.push_back(Dln_Sigma);
152  }
153 
154 
155  // create the function to interpolate sigma(M) and dlg(sigma(M)
156 
157  m_data_HOD->func_sigma = make_shared<glob::FuncGrid>(glob::FuncGrid(mass, sigma, "Spline"));
158 
159  m_data_HOD->func_dlnsigma = make_shared<glob::FuncGrid>(glob::FuncGrid(mass, dln_sigma, "Spline"));
160 
161 }
162 
163 
164 // ============================================================================================
165 
166 
167 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_bias_eff_grid (const std::vector<cbl::cosmology::CosmologicalParameter> cosmo_param, const std::vector<double> min_par, const std::vector<double> max_par, const std::vector<int> nbins_par, const std::string dir, const std::string file_grid_bias)
168 {
169  if (m_data_model->cluster_mass_proxy->ndata()==0) ErrorCBL("m_data_model->cluster_mass_proxy->ndata() is not defined!", "set_bias_eff_grid", "Modelling_TwoPointCorrelation1D_monopole.cpp");
170 
171  const int npar = cosmo_param.size();
172 
173  const string file = dir+file_grid_bias;
174  ifstream fin(file.c_str());
175 
176  if (!fin) {
177 
178  if (npar==1) {
179 
180  fin.clear(); fin.close();
181  vector<double> mass_grid = logarithmic_bin_vector(m_data_model->cluster_mass_proxy->ndata()/10, Min(m_data_model->cluster_mass_proxy->data()), Max(m_data_model->cluster_mass_proxy->data()));
182  vector<double> parameter, bias_eff;
183 
184  m_data_model->cosmology->generate_bias_eff_grid_one_cosmopar(parameter, bias_eff, dir, file_grid_bias, cosmo_param[0], min_par[0], max_par[0], nbins_par[0], m_data_model->cluster_mass_proxy->data(), mass_grid, m_data_model->cluster_mass_proxy->xx(), m_data_model->model_bias, m_data_model->method_Pk, m_data_model->meanType, true, m_data_model->output_root, m_data_model->Delta, 1., "Spline", m_data_model->norm, m_data_model->k_min, m_data_model->k_max, m_data_model->prec, "NULL", false, m_data_model->cosmology_mass, m_data_model->redshift_source);
185 
186  m_data_model->cosmopar_bias_interp_1D = bind(interpolated, placeholders::_1, parameter, bias_eff, "Spline");
187 
188  }
189 
190  else if (npar==2) {
191 
192  vector<double> mass_grid = logarithmic_bin_vector(m_data_model->cluster_mass_proxy->ndata()/10, Min(m_data_model->cluster_mass_proxy->data()), Max(m_data_model->cluster_mass_proxy->data()));
193 
194  vector<double> parameter1, parameter2;
195  vector<vector<double>> bias_eff;
196  m_data_model->cosmology->generate_bias_eff_grid_two_cosmopars(parameter1, parameter2, bias_eff, dir, file_grid_bias, cosmo_param[0], min_par[0], max_par[0], nbins_par[0], cosmo_param[1], min_par[1], max_par[1], nbins_par[1], m_data_model->cluster_mass_proxy->data(), mass_grid, m_data_model->cluster_mass_proxy->xx(), m_data_model->model_bias, m_data_model->method_Pk, m_data_model->meanType, true, m_data_model->output_root, m_data_model->Delta, 1., "Spline", m_data_model->norm, m_data_model->k_min, m_data_model->k_max, m_data_model->prec, par::defaultString, false, m_data_model->cosmology_mass, m_data_model->redshift_source);
197 
198  m_data_model->cosmopar_bias_interp_2D = bind(interpolated_2D, placeholders::_1, placeholders::_2, parameter1, parameter2, bias_eff, "Cubic");
199 
200  }
201 
202  else
203  ErrorCBL("this function works with 1 or 2 cosmological parameters!", "set_bias_eff_grid", "Modelling_TwoPointCorrelation1D_monopole.cpp");
204  }
205 
206  else {
207 
208  if (npar==1) {
209  vector<double> parameter, bias_eff;
210 
211  string line;
212  while (getline(fin, line)) {
213  stringstream SS(line); double _p, _b;
214  SS >> _p >> _b;
215  parameter.push_back(_p);
216  bias_eff.push_back(_b);
217  }
218  fin.clear(); fin.close();
219 
220  m_data_model->cosmopar_bias_interp_1D = bind(interpolated, placeholders::_1, parameter, bias_eff, "Spline");
221  }
222 
223  else if (npar==2) {
224  fin.clear(); fin.close();
225  vector<double> parameter1, parameter2;
226  vector<vector<double>> bias_eff;
227 
228  read_matrix(file, parameter1, parameter2, bias_eff);
229 
230  m_data_model->cosmopar_bias_interp_2D = bind(interpolated_2D, placeholders::_1, placeholders::_2, parameter1, parameter2, bias_eff, "Cubic");
231  }
232 
233  else
234  ErrorCBL("this function works with 1 or 2 cosmological parameters!", "set_bias_eff_grid", "Modelling_TwoPointCorrelation1D_monopole.cpp");
235  }
236 }
237 
238 
239 // ============================================================================================
240 
241 
242 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_bias_eff_grid (const std::string file_selection_function, const std::vector<int> column, const std::vector<cbl::cosmology::CosmologicalParameter> cosmo_param, const std::vector<double> min_par, const std::vector<double> max_par, const std::vector<int> nbins_par, const std::string dir, const std::string file_grid_bias)
243 {
244  const int npar = cosmo_param.size();
245 
246  if (npar==1) {
247  vector<double> parameter, bias_eff;
248  m_data_model->cosmology->generate_bias_eff_grid_one_cosmopar(parameter, bias_eff, dir, file_grid_bias, cosmo_param[0], min_par[0], max_par[0], nbins_par[0], m_data_model->redshift, m_data_model->Mass_min, m_data_model->Mass_max, m_data_model->model_bias, m_data_model->model_MF, m_data_model->method_Pk, file_selection_function, column, 1., true, m_data_model->output_root, m_data_model->Delta, 1., "Spline", m_data_model->norm, m_data_model->k_min, m_data_model->k_max, m_data_model->prec);
249 
250  m_data_model->cosmopar_bias_interp_1D = bind(interpolated, placeholders::_1, parameter, bias_eff, "Spline");
251  }
252 
253  else if (npar==2) {
254  ErrorCBL("", "set_bias_eff_grid", "Modelling_TwoPointCorrelation1D_monopole.cpp", glob::ExitCode::_workInProgress_);
255  }
256 
257  else
258  ErrorCBL("this function works with 1 or 2 cosmological parameters!", "set_bias_eff_grid", "Modelling_TwoPointCorrelation1D_monopole.cpp");
259 }
260 
261 
262 // ============================================================================================
263 
264 
266 {
267  // compute the fiducial dark matter two-point correlation function
268  set_fiducial_xiDM();
269 
270  // set the model parameters
271  const int nparameters = 6;
272 
273  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
274 
275  vector<string> parameterName(nparameters);
276  parameterName[0] = "sigmaNL";
277  parameterName[1] = "alpha";
278  parameterName[2] = "B";
279  parameterName[3] = "A0";
280  parameterName[4] = "A1";
281  parameterName[5] = "A2";
282 
283  vector<statistics::PriorDistribution> priors = {sigmaNL_prior, alpha_prior, B_prior, A0_prior, A1_prior, A2_prior};
284 
285  //set the priors
286  m_set_prior(priors);
287 
288  // construct the model
289  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_BAO_sigmaNL, nparameters, parameterType, parameterName, m_data_model));
290 
291  coutCBL << "Done!" << endl << endl;
292 
293 }
294 
295 // ============================================================================================
296 
297 
298 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_model_linear (const statistics::PriorDistribution alpha_prior, const statistics::PriorDistribution fsigma8_prior, const statistics::PriorDistribution bsigma8_prior, const std::vector<statistics::PriorDistribution> polynomial_prior)
299 {
300  // compute the fiducial dark matter two-point correlation function
301  set_fiducial_xiDM();
302 
303  m_data_model->poly_order = polynomial_prior.size();
304 
305  // set the model parameters
306  const int nparameters = 3+polynomial_prior.size();
307 
308  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
309 
310  vector<string> parameterName(nparameters);
311  vector<statistics::PriorDistribution> priors(nparameters);
312  priors[0] = alpha_prior;
313  priors[1] = fsigma8_prior;
314  priors[2] = bsigma8_prior;
315 
316  parameterName[0] = "alpha";
317  parameterName[1] = "f*sigma8";
318  parameterName[2] = "b*sigma8";
319 
320  for (size_t i=0; i<polynomial_prior.size(); i++) {
321  parameterName[i+3] = "A"+conv(i, par::fINT);
322  priors[i+3] = polynomial_prior[i];
323  }
324 
325  //set the priors
326  m_set_prior(priors);
327 
328  // construct the model
329  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_linear, nparameters, parameterType, parameterName, m_data_model));
330 
331 }
332 
333 
334 // ============================================================================================
335 
336 
337 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_model_linear_LinearPoint (const statistics::PriorDistribution alpha_prior, const statistics::PriorDistribution fsigma8_prior, const statistics::PriorDistribution bsigma8_prior, const std::vector<statistics::PriorDistribution> polynomial_prior)
338 {
339  // compute the fiducial dark matter two-point correlation function
340  set_fiducial_xiDM();
341 
342  m_data_model->poly_order = polynomial_prior.size();
343 
344  // set the model parameters
345  const int nparameters = 6+polynomial_prior.size();
346 
347  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
348  parameterType[0] = statistics::ParameterType::_Derived_;
349  parameterType[1] = statistics::ParameterType::_Derived_;
350  parameterType[2] = statistics::ParameterType::_Derived_;
351 
352  vector<string> parameterName(nparameters);
353  vector<statistics::PriorDistribution> priors(nparameters-3);
354  priors[0] = alpha_prior;
355  priors[1] = fsigma8_prior;
356  priors[2] = bsigma8_prior;
357 
358  parameterName[0] = "peak";
359  parameterName[1] = "dip";
360  parameterName[2] = "linear_point";
361  parameterName[3] = "alpha";
362  parameterName[4] = "f*sigma8";
363  parameterName[5] = "b*sigma8";
364 
365  for (size_t i=0; i<polynomial_prior.size(); i++) {
366  parameterName[i+6] = "A"+conv(i, par::fINT);
367  priors[i+3] = polynomial_prior[i];
368  }
369 
370  //set the priors
371  m_set_prior(priors);
372 
373  // construct the model
374  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_linear_LinearPoint, nparameters, parameterType, parameterName, m_data_model));
375 
376 }
377 
378 
379 // =========================================================================================
380 
381 
382 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_model_polynomial_LinearPoint (const std::vector<statistics::PriorDistribution> polynomial_prior)
383 {
384  // set the model parameters
385  const int nparameters = polynomial_prior.size()+3;
386 
387  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
388  parameterType[0] = statistics::ParameterType::_Derived_;
389  parameterType[1] = statistics::ParameterType::_Derived_;
390  parameterType[2] = statistics::ParameterType::_Derived_;
391 
392  vector<string> parameterName(nparameters);
393  vector<statistics::PriorDistribution> priors(nparameters-3);
394 
395  parameterName[0] = "peak";
396  parameterName[1] = "dip";
397  parameterName[2] = "linear_point";
398 
399  for (size_t i=0; i<polynomial_prior.size(); i++) {
400  parameterName[i+3] = "a"+conv(i, par::fINT);
401  priors[i] = polynomial_prior[i];
402  }
403 
404  // set the priors
405  m_set_prior(priors);
406 
407  // construct the model
408  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_polynomial_LinearPoint, nparameters, parameterType, parameterName, m_data_model));
409 }
410 
411 
412 // ============================================================================================
413 
414 
416 {
417  set_model_linear(statistics::PriorDistribution(glob::DistributionType::_Constant_, 1), fsigma8_prior, bsigma8_prior, {});
418 }
419 
420 
421 // ============================================================================================
422 
423 
424 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_model_linear_bias_cosmology (const statistics::PriorDistribution bias_prior, const std::vector<cbl::cosmology::CosmologicalParameter> cosmo_param, const std::vector<statistics::PriorDistribution> cosmo_param_prior)
425 {
426  // set the model parameters
427  const int nparameters = cosmo_param.size()+1;
428 
429  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
430 
431  vector<string> parameterName(nparameters);
432  vector<statistics::PriorDistribution> priors(nparameters);
433 
434  parameterName[0] = "bias";
435  priors[0] = bias_prior;
436 
437  for (size_t i=0; i<cosmo_param.size(); i++) {
438  parameterName[i+1] = cosmology::CosmologicalParameter_name(cosmo_param[i]);
439  priors[i+1] = cosmo_param_prior[i];
440  }
441 
442  //set the priors
443  m_set_prior(priors);
444 
445  // construct the model
446  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_linear_bias_cosmology, nparameters, parameterType, parameterName, m_data_model));
447 }
448 
449 
450 // ============================================================================================
451 
452 
454 {
455  // compute the fiducial dark matter two-point correlation function
456  set_fiducial_xiDM();
457 
458  // set the model parameters
459  const int nparameters = 3;
460 
461  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
462  parameterType[1] = statistics::ParameterType::_Derived_;
463  parameterType[2] = statistics::ParameterType::_Derived_;
464 
465  vector<string> parameterName(nparameters);
466 
467  parameterName[0] = "sigma8";
468  parameterName[1] = "bias";
469  parameterName[2] = "sigma8(z)";
470 
471  vector<statistics::PriorDistribution> priors = {sigma8_prior};
472 
473  //set the priors
474  m_set_prior(priors);
475 
476  // construct the model
477  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_linear_sigma8_clusters, nparameters, parameterType, parameterName, m_data_model));
478 }
479 
480 
481 // ============================================================================================
482 
483 
484 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_model_linear_cosmology_clusters_grid (const cbl::cosmology::CosmologicalParameter cosmo_param, const statistics::PriorDistribution cosmo_param_prior, const std::string dir, const std::string file_grid_bias, const double min_par, const double max_par, const int nbins_par, const std::string file_selection_function, const std::vector<int> column)
485 {
486  // set the free cosmological parameter
487  m_data_model->Cpar = {cosmo_param};
488 
489  // compute the bias on a grid, using a selection function if provided
490  if (file_selection_function!=par::defaultString)
491  set_bias_eff_grid(file_selection_function, column, {cosmo_param}, {min_par}, {max_par}, {nbins_par}, dir, file_grid_bias);
492  else
493  set_bias_eff_grid({cosmo_param}, {min_par}, {max_par}, {nbins_par}, dir, file_grid_bias);
494 
495  // set the model parameters
496  const int nparameters = 2;
497 
498  vector<statistics::ParameterType> parameterType(nparameters);
499  parameterType[0] = statistics::ParameterType::_Base_;
500  parameterType[1] = statistics::ParameterType::_Derived_;
501 
502  vector<string> parameterName(nparameters);
503 
504  parameterName[0] = cosmology::CosmologicalParameter_name(cosmo_param);
505  parameterName[1] = "bias";
506 
507  vector<statistics::PriorDistribution> priors = {cosmo_param_prior};
508 
509  //set the priors
510  m_set_prior(priors);
511 
512  // construct the model
513  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_linear_one_cosmo_par_clusters, nparameters, parameterType, parameterName, m_data_model));
514 }
515 
516 
517 // ============================================================================================
518 
519 
520 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_model_linear_cosmology_clusters_grid (const cbl::cosmology::CosmologicalParameter cosmo_param1, const statistics::PriorDistribution cosmo_param_prior1, const cbl::cosmology::CosmologicalParameter cosmo_param2, const statistics::PriorDistribution cosmo_param_prior2, const std::string dir, const std::string file_grid_bias, const double min_par1, const double max_par1, const int nbins_par1, const double min_par2, const double max_par2, const int nbins_par2, const std::string file_selection_function, const std::vector<int> column)
521 {
522  // set the two free cosmological parameters
523  m_data_model->Cpar = {cosmo_param1, cosmo_param2};
524 
525  // compute the bias on a grid, using a selection function if provided
526  (void)column;
527  if (file_selection_function!=par::defaultString)
528  ErrorCBL("", "set_model_linear_cosmology_clusters_grid", "Modelling_TwoPointCorrelation1D_monopole.cpp", glob::ExitCode::_workInProgress_);
529  else
530  set_bias_eff_grid({cosmo_param1, cosmo_param2}, {min_par1, min_par2}, {max_par1, max_par2}, {nbins_par1, nbins_par2}, dir, file_grid_bias);
531 
532  // set the model parameters
533  const int nparameters = 4;
534 
535  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
536  parameterType[2] = statistics::ParameterType::_Derived_;
537  parameterType[3] = statistics::ParameterType::_Derived_;
538 
539  vector<string> parameterName(nparameters);
540 
541  parameterName[0] = cosmology::CosmologicalParameter_name(cosmo_param1);
542  parameterName[1] = cosmology::CosmologicalParameter_name(cosmo_param2);
543  parameterName[2] = "bias";
544  parameterName[3] = "alpha";
545 
546  vector<statistics::PriorDistribution> priors = {cosmo_param_prior1, cosmo_param_prior2};
547 
548  //set the priors
549  m_set_prior(priors);
550 
551  // construct the model
552  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_linear_two_cosmo_pars_clusters, nparameters, parameterType, parameterName, m_data_model));
553 
554 }
555 
556 
557 // ============================================================================================
558 
559 
560 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_model_linear_cosmology_clusters (const std::vector<cbl::cosmology::CosmologicalParameter> cosmo_param, const std::vector<statistics::PriorDistribution> cosmo_param_prior)
561 {
562  set_fiducial_xiDM();
563 
564  m_data_model->Cpar = cosmo_param;
565 
566  // set the model parameters
567  const int nparameters = (cosmo_param.size());
568 
569  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
570 
571  vector<string> parameterName(nparameters);
572 
573  for (size_t i=0; i<cosmo_param.size(); i++)
574  parameterName[i] = cosmology::CosmologicalParameter_name(cosmo_param[i]);
575 
576  vector<statistics::PriorDistribution> priors = cosmo_param_prior;
577 
578  //set the priors
579  m_set_prior(priors);
580 
581  // construct the model
582  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_linear_cosmology_clusters, nparameters, parameterType, parameterName, m_data_model));
583 }
584 
585 
586 // ============================================================================================
587 
588 
590 {
591  // compute the fiducial dark matter two-point correlation function
592  set_fiducial_xiDM();
593 
594  // set the model parameters
595  const int nparameters = 2;
596 
597  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
598 
599  vector<string> parameterName(nparameters);
600 
601  parameterName[0] = "sigma8";
602  parameterName[1] = "bias";
603 
604  vector<statistics::PriorDistribution> priors = {sigma8_prior, bias_prior};
605 
606  //set the priors
607  m_set_prior(priors);
608 
609  // construct the model
610  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_linear_sigma8_bias, nparameters, parameterType, parameterName, m_data_model));
611 }
612 
613 
614 // ============================================================================================
615 
616 
618 {
619  vector<statistics::PriorDistribution> polynomial_prior = {A0_prior, A1_prior, A2_prior};
620 
621  vector<double> polynomial_value(polynomial_prior.size(), par::defaultDouble);
622 
623  set_model_linear(alpha_prior, statistics::PriorDistribution(glob::DistributionType::_Constant_, 0), bs8_prior, polynomial_prior);
624 }
625 
626 
627 // ============================================================================================
628 
629 
631 {
632  vector<statistics::PriorDistribution> polynomial_prior = {A0_prior, A1_prior, A2_prior};
633 
634  vector<double> polynomial_value(polynomial_prior.size(), par::defaultDouble);
635 
636  set_model_linear_LinearPoint(alpha_prior, statistics::PriorDistribution(glob::DistributionType::_Constant_, 0), BB_prior, polynomial_prior);
637 }
638 
639 
640 // ============================================================================================
641 
642 
644 {
645  // compute the fiducial dark matter two-point correlation function
646  set_fiducial_xiDM();
647  set_fiducial_sigma_data_model();
648 
649  // set the model parameters
650  const int nparameters = 5;
651 
652  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
653  parameterType[nparameters-1] = statistics::ParameterType::_Derived_;
654 
655  vector<string> parameterName(nparameters);
656 
657  parameterName[0] = "M0";
658  parameterName[1] = "slope";
659  parameterName[2] = "scatter";
660  parameterName[3] = "sigmaz";
661  parameterName[4] = "bias";
662 
663  vector<statistics::PriorDistribution> priors = {M0_prior, slope_prior, scatter_prior, sigmaz_prior};
664 
665  //set the priors
666  m_set_prior(priors);
667 
668  // construct the model
669  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_damped_scaling_relation_sigmaz, nparameters, parameterType, parameterName, m_data_model));
670 
671 }
672 
673 
674 // ============================================================================================
675 
676 
677 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_model_scaling_relation_sigmaz_cosmology (const std::vector<cbl::cosmology::CosmologicalParameter> cosmo_param, const std::vector<statistics::PriorDistribution> cosmo_prior, const statistics::PriorDistribution alpha_prior, const statistics::PriorDistribution beta_prior, const statistics::PriorDistribution gamma_prior, const statistics::PriorDistribution scatter0_prior, const statistics::PriorDistribution scatterM_prior, const statistics::PriorDistribution scatterM_exponent_prior, const statistics::PriorDistribution scatterz_prior, const statistics::PriorDistribution scatterz_exponent_prior, const statistics::PriorDistribution sigmaz_prior, const std::string z_evo)
678 {
679  // compute the fiducial dark matter two-point correlation function
680  set_fiducial_xiDM();
681 
682  // Set the scaling relation Modelling object
683  if ((m_data_model->scaling_relation)->data()->xx().size() == 0)
684  ErrorCBL("The mass-observable relation is not set! Use the correct set_data_model().", "set_model_scaling_relation_sigmaz_cosmology", "Modelling_TwoPointCorrelation1D_monopole.cpp");
685 
686  (m_data_model->scaling_relation)->set_model_MassObservableRelation_cosmology(z_evo, cosmo_param, cosmo_prior, alpha_prior, beta_prior, gamma_prior, scatter0_prior, scatterM_prior, scatterM_exponent_prior, scatterz_prior, scatterz_exponent_prior);
687 
688  (m_data_model->scaling_relation)->set_likelihood(cbl::statistics::LikelihoodType::_Gaussian_Error_, {}); // Set the likelihood for the scaling relation (only to avoid internal errors, of course it is not used)
689 
690  // Set the parameter names and priors
691  m_data_model->Cpar = cosmo_param;
692 
693  const size_t nParams_scaling_relation = (m_data_model->scaling_relation)->likelihood()->parameters()->nparameters();
694  const size_t nParams_base = 1 + nParams_scaling_relation; // sigmaz + scaling relation parameters (which include the cosmological parameters)
695  const size_t nParams_derived = 1; // the effective bias is derived from the scaling relation
696 
697  const size_t nParams = nParams_base + nParams_derived;
698 
699  vector<statistics::ParameterType> Par_type (nParams, statistics::ParameterType::_Base_);
700  Par_type[nParams-1] = statistics::ParameterType::_Derived_;
701 
702  vector<string> Par_string (nParams);
703  std::vector<statistics::PriorDistribution> param_prior (nParams_base);
704 
705  // Cosmological and scaling relation parameters
706  for (size_t i=0; i<nParams_base-1; i++) {
707  Par_string[i] = (m_data_model->scaling_relation)->likelihood()->parameters()->name(i);
708  param_prior[i] = *(m_data_model->scaling_relation)->get_prior(i);
709  }
710 
711  // sigmaz
712  Par_string[nParams_base-1] = "sigmaz";
713  param_prior[nParams_base-1] = sigmaz_prior;
714 
715  // bias
716  Par_string[nParams-1] = "bias";
717 
718  // set prior
719  m_set_prior(param_prior);
720 
721  // construct the model
722  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_damped_scaling_relation_sigmaz_cosmology, nParams, Par_type, Par_string, m_data_model));
723 }
724 
725 
726 // ============================================================================================
727 
728 
730 {
731  // compute the fiducial dark matter two-point correlation function
732  set_fiducial_xiDM();
733  set_fiducial_sigma_data_model();
734 
735  // set the model parameters
736  const int nparameters = 2;
737 
738  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
739 
740  vector<string> parameterName(nparameters);
741 
742  parameterName[0] = "bias";
743  parameterName[1] = "sigmaz";
744 
745  vector<statistics::PriorDistribution> priors = {bias_prior, sigmaz_prior};
746 
747  //set the priors
748  m_set_prior(priors);
749 
750  // construct the model
751  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_damped_bias_sigmaz, nparameters, parameterType, parameterName, m_data_model));
752 
753 }
754 
755 
756 // ============================================================================================
757 
758 
760 {
761  // compute the fiducial dark matter power spectrum
762  set_fiducial_PkDM();
763 
764  // compute the fiducial mass variance and its logarithmic derivative
765  set_fiducial_sigma();
766 
767  // set the model parameters
768  const int nparameters = 5;
769 
770  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
771 
772  vector<string> parameterName(nparameters);
773 
774  parameterName[0] = "Mmin";
775  parameterName[1] = "sigmalgM";
776  parameterName[2] = "M0";
777  parameterName[3] = "M1";
778  parameterName[4] = "alpha";
779 
780  vector<statistics::PriorDistribution> priors = {Mmin_prior, sigmalgM_prior, M0_prior, M1_prior, alpha_prior};
781 
782  //set the priors
783  m_set_prior(priors);
784 
785  // construct the model
786  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi_HOD, nparameters, parameterType, parameterName, m_data_HOD));
787 }
788 
789 
790 // ============================================================================================
791 
792 
793 void cbl::modelling::twopt::Modelling_TwoPointCorrelation1D_monopole::set_model_linear_cosmology_cluster_selection_function (const statistics::PriorDistribution alpha_prior, const std::vector<cbl::cosmology::CosmologicalParameter> cosmo_param, const std::vector<statistics::PriorDistribution> cosmo_param_prior)
794 {
795  // set the model parameters
796  const int nparameters = (cosmo_param.size()+2);
797 
798  vector<statistics::ParameterType> parameterType(nparameters, statistics::ParameterType::_Base_);
799  parameterType[nparameters-1] = statistics::ParameterType::_Derived_;
800 
801  vector<string> parameterName(nparameters);
802  vector<statistics::PriorDistribution> priors(nparameters-1);
803 
804  for (size_t i=0; i<cosmo_param.size(); i++) {
805  parameterName[i] = cosmology::CosmologicalParameter_name(cosmo_param[i]);
806  priors[i] = cosmo_param_prior[i];
807  }
808 
809  priors[nparameters-2] = alpha_prior;
810 
811  parameterName[nparameters-2] = "alpha";
812  parameterName[nparameters-1] = "bias";
813 
814  // add the cosmological parameters
815  m_data_model->Cpar = cosmo_param;
816 
817  //set the priors
818  m_set_prior(priors);
819 
820  // construct the model
821  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&xi0_linear_cosmology_clusters_selection_function, nparameters, parameterType, parameterName, m_data_model));
822 }
#define coutCBL
CBL print message.
Definition: Kernel.h:734
The class Modelling_TwoPointCorrelation1D_monopole.
The class FuncGrid.
Definition: FuncGrid.h:55
void set_model_HOD(const statistics::PriorDistribution Mmin_prior={}, const statistics::PriorDistribution sigmalgM_prior={}, const statistics::PriorDistribution M0_prior={}, const statistics::PriorDistribution M1_prior={}, const statistics::PriorDistribution alpha_prior={})
set the HOD parameters used to model the full shape of the monopole of the two-point correlation func...
void set_model_linear_cosmology_cluster_selection_function(const statistics::PriorDistribution alpha_prior, const std::vector< cbl::cosmology::CosmologicalParameter > cosmo_param, const std::vector< statistics::PriorDistribution > cosmo_param_prior)
set the model to fit the full shape of the monopole of the two-point correlation function in redshift...
void set_model_linear(const statistics::PriorDistribution alpha_prior, const statistics::PriorDistribution fsigma8_prior, const statistics::PriorDistribution bsigma8_prior, const std::vector< statistics::PriorDistribution > polynomial_prior)
set the model to fit the full shape of the monopole of the two-point correlation function
void set_model_scaling_relation_sigmaz_cosmology(const std::vector< cbl::cosmology::CosmologicalParameter > cosmo_param, const std::vector< statistics::PriorDistribution > cosmo_prior, const statistics::PriorDistribution alpha_prior, const statistics::PriorDistribution beta_prior, const statistics::PriorDistribution gamma_prior, const statistics::PriorDistribution scatter0_prior, const statistics::PriorDistribution scatterM_prior, const statistics::PriorDistribution scatterM_exponent_prior, const statistics::PriorDistribution scatterz_prior, const statistics::PriorDistribution scatterz_exponent_prior, const statistics::PriorDistribution sigmaz_prior, const std::string z_evo)
Set the parameters to model the monopole of the two-point correlation function in redshift space,...
void set_model_linear_sigma8_clusters(const statistics::PriorDistribution sigma8_prior={})
set the model to fit the full shape of the monopole of the two-point correlation function with cluste...
void set_model_Kaiser(const statistics::PriorDistribution fsigma8_prior={}, const statistics::PriorDistribution bsigma8_prior={})
set the parameters to model the monopole of the two-point correlation function in redshift space
void set_fiducial_sigma()
set the fiducial model for the variance and its derivative
void set_model_polynomial_LinearPoint(const std::vector< statistics::PriorDistribution > polynomial_prior)
set the model to fit the full shape of the monopole of the two-point correlation function as a polyno...
void set_fiducial_PkDM()
set the fiducial model for the dark matter power spectrum
void set_bias_eff_grid(const std::vector< cbl::cosmology::CosmologicalParameter > cosmo_param, const std::vector< double > min_par, const std::vector< double > max_par, const std::vector< int > nbins_par, const std::string dir, const std::string file_grid_bias)
set a grid with effective bias values estimating from a set of masses
void set_model_BAO_LinearPoint(const statistics::PriorDistribution alpha_prior={}, const statistics::PriorDistribution BB_prior={}, const statistics::PriorDistribution A0_prior={}, const statistics::PriorDistribution A1_prior={}, const statistics::PriorDistribution A2_prior={})
set the parameter to model the monopole of the two-point correlation function in real space,...
void set_model_linear_LinearPoint(const statistics::PriorDistribution alpha_prior, const statistics::PriorDistribution fsigma8_prior, const statistics::PriorDistribution bsigma8_prior, const std::vector< statistics::PriorDistribution > polynomial_prior)
set the model to fit the full shape of the monopole of the two-point correlation function,...
void set_model_linear_cosmology_clusters(const std::vector< cbl::cosmology::CosmologicalParameter > cosmo_param={}, const std::vector< statistics::PriorDistribution > cosmo_param_prior={})
set the model to fit the full shape of the monopole of the two-point correlation function with cluste...
void set_model_BAO_sigmaNL(const statistics::PriorDistribution sigmaNL_prior={}, const statistics::PriorDistribution alpha_prior={}, const statistics::PriorDistribution BB_prior={}, const statistics::PriorDistribution A0_prior={}, const statistics::PriorDistribution A1_prior={}, const statistics::PriorDistribution A2_prior={})
set the parameter to model the monopole of the two-point correlation function in real space,...
void set_model_linear_bias_cosmology(const statistics::PriorDistribution bias_prior={}, const std::vector< cbl::cosmology::CosmologicalParameter > cosmo_param={}, const std::vector< statistics::PriorDistribution > cosmo_param_prior={})
set the model to fit the full shape of the monopole of the two-point correlation function
void set_fiducial_xiDM()
set the fiducial model for the dark matter two-point correlation function and associated quantities
void set_model_scaling_relation_sigmaz(const statistics::PriorDistribution M0_prior={}, const statistics::PriorDistribution slope_prior={}, const statistics::PriorDistribution scatter_prior={}, const statistics::PriorDistribution sigmaz_prior={})
set the parameters to model the monopole of the two-point correlation function in redshift space
void set_model_BAO(const statistics::PriorDistribution alpha_prior={}, const statistics::PriorDistribution bs8_prior={}, const statistics::PriorDistribution A0_prior={}, const statistics::PriorDistribution A1_prior={}, const statistics::PriorDistribution A2_prior={})
set the function to model the monopole of the two-point correlation function, taking into accout geom...
void set_model_sigma8_bias(const statistics::PriorDistribution sigma8_prior={}, const statistics::PriorDistribution bias_prior={})
set the parameters to model the monopole of the two-point correlation function in redshift space
void set_model_bias_sigmaz(const statistics::PriorDistribution bias_prior={}, const statistics::PriorDistribution sigmaz_prior={})
set the parameters to model the monopole of the two-point correlation function in redshift space
void set_model_linear_cosmology_clusters_grid(const cbl::cosmology::CosmologicalParameter cosmo_param, const statistics::PriorDistribution cosmo_param_prior, const std::string dir, const std::string file_grid_bias, const double min_par, const double max_par, const int nbins_par, const std::string file_selection_function=par::defaultString, const std::vector< int > column={0, 1, 2})
set the model to fit the full shape of the monopole of the two-point correlation function with either...
The class Model1D.
Definition: Model1D.h:60
The class PriorDistribution.
static const char fINT[]
conversion symbol for: int -> std::string
Definition: Constants.h:121
static const std::string defaultString
default std::string value
Definition: Constants.h:336
static const double defaultDouble
default double value
Definition: Constants.h:348
CosmologicalParameter
the cosmological parameters
Definition: Cosmology.h:134
std::string CosmologicalParameter_name(const CosmologicalParameter parameter)
name of the cosmological parameter
Definition: Cosmology.cpp:45
std::vector< double > xi0_polynomial_LinearPoint(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the monopole of the two-point correlation function
std::vector< double > xi0_linear(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the monopole of the two-point correlation function
std::vector< double > xi0_linear_bias_cosmology(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the monopole of the two-point correlation function
std::vector< double > xi0_linear_two_cosmo_pars_clusters(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the monopole of the two-point correlation function, the bias is computed by the input clust...
std::vector< double > xi0_damped_scaling_relation_sigmaz_cosmology(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
the damped two-point correlation monopole; from Sereno et al. 2015
std::vector< double > xi0_damped_scaling_relation_sigmaz(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
the damped two-point correlation monopole; from Sereno et al. 2015
std::vector< double > xi_HOD(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
HOD model of the monopole of the two-point correlation function.
std::vector< double > xi0_linear_cosmology_clusters_selection_function(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the monopole of the redshift-space two-point correlation function of galaxy clusters,...
std::vector< double > xi0_linear_one_cosmo_par_clusters(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the monopole of the two-point correlation function, the bias is computed by the input clust...
std::vector< double > xi0_damped_bias_sigmaz(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
the damped two-point correlation monopole; from Sereno et al. 2015
std::vector< double > xi0_BAO_sigmaNL(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the BAO signal in the monopole of the two-point correlation function
std::vector< double > xi0_linear_cosmology_clusters(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the monopole of the two-point correlation function, the bias is computed by the input clust...
std::vector< double > xi0_linear_sigma8_bias(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the monopole of the two-point correlation function in redshift space
std::vector< double > xi0_linear_sigma8_clusters(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the monopole of the two-point correlation function, the bias is computed by the input clust...
std::vector< double > xi0_linear_LinearPoint(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
model for the monopole of the two-point correlation function
@ _Gaussian_Error_
Gaussian likelihood error.
std::vector< double > transform_FFTlog(const std::vector< double > yy, const int dir, const std::vector< double > xx, const std::vector< double > fx, const double mu=0, const double q=0, const double kr=1, const int kropt=0)
wrapper of the FFTlog to compute the discrete Fourier sine or cosine transform of a logarithmically...
Definition: FFTlog.cpp:43
The global namespace of the CosmoBolognaLib
Definition: CAMB.h:38
T Min(const std::vector< T > vect)
minimum element of a std::vector
Definition: Kernel.h:1324
std::string conv(const T val, const char *fact)
convert a number to a std::string
Definition: Kernel.h:903
void read_matrix(const std::string file_matrix, std::vector< double > &xx, std::vector< double > &yy, std::vector< std::vector< double >> &matrix, const std::vector< int > col={})
read a matrix from file
Definition: Func.cpp:612
std::vector< T > logarithmic_bin_vector(const size_t nn, const T min, const T max)
fill a std::vector with logarithmically spaced values
Definition: Kernel.h:1621
std::vector< T > linear_bin_vector(const size_t nn, const T min, const T max)
fill a std::vector with linearly spaced values
Definition: Kernel.h:1604
void checkIO(const std::ifstream &fin, const std::string file="NULL")
check if an input file can be opened
Definition: Kernel.cpp:160
double interpolated_2D(const double _x1, const double _x2, const std::vector< double > x1, const std::vector< double > x2, const std::vector< std::vector< double >> yy, const std::string type)
2D interpolation
Definition: Func.cpp:502
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
Definition: Kernel.h:780
T Max(const std::vector< T > vect)
maximum element of a std::vector
Definition: Kernel.h:1336
double interpolated(const double _xx, const std::vector< double > xx, const std::vector< double > yy, const std::string type)
1D interpolation
Definition: Func.cpp:445
double Sigma(const std::vector< double > vect)
the standard deviation of a std::vector
Definition: Func.cpp:925