CosmoBolognaLib
Free Software C++/Python libraries for cosmological calculations
Modelling_NumberCounts1D_MassProxy.cpp
Go to the documentation of this file.
1 /********************************************************************
2  * Copyright (C) 2021 by Giorgio Lesci and Federico Marulli *
3  * giorgio.lesci2@unibo.it, 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 using namespace modelling::numbercounts;
45 
46 
47 // ===========================================================================================
48 
49 
50 void cbl::modelling::numbercounts::Modelling_NumberCounts1D_MassProxy::set_model_NumberCounts_cosmology (const std::string scalrel_z_evo, const std::string z_error_type, const std::string proxy_error_type, const std::vector<cbl::cosmology::CosmologicalParameter> cosmo_param, const std::vector<statistics::PriorDistribution> cosmo_param_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 z_bias_prior, const statistics::PriorDistribution proxy_bias_prior, const statistics::PriorDistribution z_error_prior, const statistics::PriorDistribution proxy_error_prior, const std::vector<statistics::PriorDistribution> Plambda_prior)
51 {
52  if (Plambda_prior.size() != 3)
53  cbl::ErrorCBL("Plambda_prior must have size = 3.","set_model_NumberCounts_cosmology","Modelling_NumberCounts1D_MassProxy.cpp");
54 
55  m_data_model.Cpar = cosmo_param;
56 
57  const size_t nParams = cosmo_param.size()+15;
58 
59  vector<statistics::ParameterType> Par_type(nParams, statistics::ParameterType::_Base_);
60  vector<string> Par_string(nParams);
61  std::vector<statistics::PriorDistribution> param_prior (nParams);
62 
63  // Set the names and priors of the cosmological parameters
64  for (size_t i=0; i<cosmo_param.size(); i++) {
65  Par_string[i] = CosmologicalParameter_name(cosmo_param[i]);
66  param_prior[i] = cosmo_param_prior[i];
67  }
68 
69  // Set the names and priors for the mass-observable relation parameters, and for P(lambda|z)
70  Par_string[cosmo_param.size()] = "alpha";
71  param_prior[cosmo_param.size()] = alpha_prior;
72  Par_string[cosmo_param.size()+1] = "beta";
73  param_prior[cosmo_param.size()+1] = beta_prior;
74  Par_string[cosmo_param.size()+2] = "gamma";
75  param_prior[cosmo_param.size()+2] = gamma_prior;
76  Par_string[cosmo_param.size()+3] = "scatter0";
77  param_prior[cosmo_param.size()+3] = scatter0_prior;
78  Par_string[cosmo_param.size()+4] = "scatterM";
79  param_prior[cosmo_param.size()+4] = scatterM_prior;
80  Par_string[cosmo_param.size()+5] = "scatterM_exponent";
81  param_prior[cosmo_param.size()+5] = scatterM_exponent_prior;
82  Par_string[cosmo_param.size()+6] = "scatterz";
83  param_prior[cosmo_param.size()+6] = scatterz_prior;
84  Par_string[cosmo_param.size()+7] = "scatterz_exponent";
85  param_prior[cosmo_param.size()+7] = scatterz_exponent_prior;
86  Par_string[cosmo_param.size()+8] = "z_bias";
87  param_prior[cosmo_param.size()+8] = z_bias_prior;
88  Par_string[cosmo_param.size()+9] = "proxy_bias";
89  param_prior[cosmo_param.size()+9] = proxy_bias_prior;
90  Par_string[cosmo_param.size()+10] = "z_error";
91  param_prior[cosmo_param.size()+10] = z_error_prior;
92  Par_string[cosmo_param.size()+11] = "proxy_error";
93  param_prior[cosmo_param.size()+11] = proxy_error_prior;
94  Par_string[cosmo_param.size()+12] = "Plambda_a";
95  param_prior[cosmo_param.size()+12] = Plambda_prior[0];
96  Par_string[cosmo_param.size()+13] = "Plambda_b";
97  param_prior[cosmo_param.size()+13] = Plambda_prior[1];
98  Par_string[cosmo_param.size()+14] = "Plambda_c";
99  param_prior[cosmo_param.size()+14] = Plambda_prior[2];
100 
101  // Set the functional form for the redshift evolution in the scaling relation
102  if (scalrel_z_evo == "E_z")
103  m_data_model.fz = [] (const double z, const double z_piv, const std::shared_ptr<void> cosmo) {cbl::cosmology::Cosmology cosmology = *std::static_pointer_cast<cbl::cosmology::Cosmology>(cosmo); return cosmology.HH(z)/cosmology.HH(z_piv);};
104  else if (scalrel_z_evo == "direct")
105  m_data_model.fz = [] (const double z, const double z_piv, const std::shared_ptr<void> cosmo) {(void)cosmo; return (1+z)/(1+z_piv);};
106  else
107  cbl::ErrorCBL("Error in the input parameter scalrel_z_evo: no such a possibility for f(z)!","set_model_NumberCounts_cosmology","Modelling_NumberCounts1D_MassProxy.cpp");
108 
109  // Set the error types for redshift and mass proxy
110  if (z_error_type == "relative")
111  m_data_model.z_error = [] (const double z_err, const double z) { return z_err*z; };
112  else if (z_error_type == "absolute")
113  m_data_model.z_error = [] (const double z_err, const double z) { (void)z; return z_err; };
114  else
115  cbl::ErrorCBL("Error in the input parameter z_error_type: choose between \"relative\" and \"absolute\"!","set_model_NumberCounts_cosmology","Modelling_NumberCounts1D_MassProxy.cpp");
116 
117  if (proxy_error_type == "relative")
118  m_data_model.proxy_error = [] (const double proxy_err, const double proxy) { return proxy_err*proxy; };
119  else if (proxy_error_type == "absolute")
120  m_data_model.proxy_error = [] (const double proxy_err, const double proxy) { (void)proxy; return proxy_err; };
121  else
122  cbl::ErrorCBL("Error in the input parameter proxy_error_type: choose between \"relative\" and \"absolute\"!","set_model_NumberCounts_cosmology","Modelling_NumberCounts1D_MassProxy.cpp");
123 
124  // input data used to construct the model
125  m_data_model.response_fact = [] (const double Mass, const double Sigma, const double redshift, const double D_N, const std::string model_bias, const double Delta, const std::string method_SS, std::shared_ptr<void> cosmo) { (void)Mass; (void)Sigma; (void)redshift; (void)D_N; (void)model_bias; (void)Delta; (void)method_SS; (void)cosmo; return 1.; };
126 
127  auto inputs = make_shared<STR_NC_data_model>(m_data_model);
128 
129  // input data used to construct the response function factor
130  m_data_model.response_fact = [] (const double Mass, const double Sigma, const double redshift, const double D_N, const std::string model_bias, const double Delta, const std::string method_SS, std::shared_ptr<void> cosmo) {
131  cbl::cosmology::Cosmology cosmology = *std::static_pointer_cast<cbl::cosmology::Cosmology>(cosmo);
132  return cosmology.bias_halo(Mass, Sigma, redshift, D_N, model_bias, false, "test", "Linear", Delta, -1, -1, 1.e-4, 100, 1.e-2, method_SS, cbl::par::defaultString, false);
133  };
134 
135  auto inputs2 = make_shared<STR_NC_data_model>(m_data_model);
136 
137  // set prior
138  m_set_prior(param_prior);
139 
140  // construct the model
141  switch (m_HistogramType) {
142 
143  case (glob::HistogramType::_N_V_):
144  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&number_counts_proxy, nParams, Par_type, Par_string, inputs));
145  m_response_func = make_shared<statistics::Model1D>(statistics::Model1D(&number_counts_proxy, nParams, Par_type, Par_string, inputs2));
146  break;
147 
148  default:
149  ErrorCBL("Only counts can be modelled! Set _N_V_ as the histogram type.", "set_model_NumberCounts_cosmology", "Modelling_NumberCounts1D_MassProxy.cpp");
150 
151  }
152 }
153 
Global functions to model number counts as a function of a mass proxy.
The class Modelling_NumberCounts1D_MassProxy.
The class Cosmology.
Definition: Cosmology.h:277
double HH(const double redshift=0.) const
the Hubble function
Definition: Cosmology.cpp:570
double bias_halo(const double Mass, const double redshift, const std::string author, const std::string method_SS, const bool store_output=true, const std::string output_root="test", const std::string interpType="Linear", const double Delta=200., const double kk=-1., const int norm=-1, const double k_min=0.001, const double k_max=100., const double prec=1.e-2, const std::string input_file=par::defaultString, const bool is_parameter_file=true)
bias of dark matter haloes
Definition: Bias.cpp:44
void set_model_NumberCounts_cosmology(const std::string scalrel_z_evo, const std::string z_error_type, const std::string proxy_error_type, const std::vector< cbl::cosmology::CosmologicalParameter > cosmo_param, const std::vector< statistics::PriorDistribution > cosmo_param_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 z_bias_prior, const statistics::PriorDistribution proxy_bias_prior, const statistics::PriorDistribution z_error_prior, const statistics::PriorDistribution proxy_error_prior, const std::vector< statistics::PriorDistribution > Plambda_prior)
Set the cosmological parameters used to model the number counts as a function of a mass proxy,...
The class Model1D.
Definition: Model1D.h:60
The class PriorDistribution.
static const std::string defaultString
default std::string value
Definition: Constants.h:336
std::string CosmologicalParameter_name(const CosmologicalParameter parameter)
name of the cosmological parameter
Definition: Cosmology.cpp:45
std::vector< double > number_counts_proxy(const std::vector< double > proxy, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
compute the number counts as a function of the mass proxy
The global namespace of the CosmoBolognaLib
Definition: CAMB.h:38
T Mass(const T RR, const T Rho)
the mass of a sphere of a given radius and density
Definition: Func.h:1243
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
double Sigma(const std::vector< double > vect)
the standard deviation of a std::vector
Definition: Func.cpp:925