CosmoBolognaLib
Free Software C++/Python libraries for cosmological calculations
Modelling_PowerSpectrum_Angular.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 
48 void cbl::modelling::angularpk::Modelling_PowerSpectrum_angular::set_data_model(const cbl::cosmology::Cosmology cosmology, const double z_min, const double z_max, const std::string method_Pk, const bool NL, const int norm, const double k_min, const double k_max, std::vector<double> dN_par, const double fsky, std::vector<double> ll, std::vector<std::vector<double>> mixing_matrix, const bool interpolate_power_spectrum)
49 {
50  m_data_model = make_shared<STR_data_model>(STR_data_model());
51 
52  m_data_model->cosmology = make_shared<cosmology::Cosmology>(cosmology);
53  m_data_model->z_min=z_min;
54  m_data_model->z_max=z_max;
55  m_data_model->method_Pk = method_Pk;
56  m_data_model->NL = NL;
57  m_data_model->norm = norm;
58  m_data_model->k_min = k_min;
59  m_data_model->k_max = k_max;
60  m_data_model->dN_par=dN_par;
61  m_data_model->fsky=fsky;
62  m_data_model->ll=ll;
63  m_data_model->mixing_matrix=mixing_matrix;
64  m_data_model->interpolate_power_spectrum=interpolate_power_spectrum;
65 
66  if(norm==1){
67  double s8=m_data_model->cosmology->sigma8_Pk(method_Pk, 0., false, "test", NL, k_min, k_max);
68  m_data_model->cosmology->set_sigma8(s8);
69  }
70 }
71 
72 
73 // ============================================================================================
74 
75 
76 void cbl::modelling::angularpk::Modelling_PowerSpectrum_angular::set_data_model_cross(const cbl::cosmology::Cosmology cosmology, const double z_min, const double z_max, const std::string method_Pk, const bool NL, const int norm, const double k_min, const double k_max, std::vector<double> dN_par, const double fsky, std::vector<double> ll, std::vector<std::vector<double>> mixing_matrix, const bool interpolate_power_spectrum, const double z_min_bin2, const double z_max_bin2, std::vector<double> dN_par_bin2)
77 {
78  m_data_model = make_shared<STR_data_model>(STR_data_model());
79 
80  m_data_model->cosmology = make_shared<cosmology::Cosmology>(cosmology);
81  m_data_model->z_min=z_min;
82  m_data_model->z_max=z_max;
83  m_data_model->method_Pk = method_Pk;
84  m_data_model->NL = NL;
85  m_data_model->norm = norm;
86  m_data_model->k_min = k_min;
87  m_data_model->k_max = k_max;
88  m_data_model->dN_par=dN_par;
89  m_data_model->fsky=fsky;
90  m_data_model->ll=ll;
91  m_data_model->mixing_matrix=mixing_matrix;
92  m_data_model->interpolate_power_spectrum=interpolate_power_spectrum;
93  m_data_model->z_min_bin2=z_min_bin2;
94  m_data_model->z_max_bin2=z_max_bin2;
95  m_data_model->dN_par_bin2=dN_par_bin2;
96 
97  if(norm==1){
98  double s8=m_data_model->cosmology->sigma8_Pk(method_Pk, 0., false, "test", NL, k_min, k_max);
99  m_data_model->cosmology->set_sigma8(s8);
100  }
101 }
102 
103 
104 // ============================================================================================
105 
106 
107 void cbl::modelling::angularpk::Modelling_PowerSpectrum_angular::set_model_limber (const std::vector<cbl::cosmology::CosmologicalParameter> cosmo_param, const std::vector<statistics::PriorDistribution> cosmo_prior, const statistics::PriorDistribution bias_prior, cbl::statistics::PriorDistribution offset_slope_prior)
108 {
109 
110  m_data_model->Cpar = cosmo_param;
111 
112  // set the model parameters
113  const int nparameters = cosmo_param.size()+5;
114 
115  vector<statistics::ParameterType> parameterType (nparameters-4, statistics::ParameterType::_Base_);
116  parameterType.emplace_back(cbl::statistics::ParameterType::_Derived_);
117  parameterType.emplace_back(cbl::statistics::ParameterType::_Derived_);
118  parameterType.emplace_back(cbl::statistics::ParameterType::_Correlated_);
119  parameterType.emplace_back(cbl::statistics::ParameterType::_Correlated_); //offset and slope are correlated parameters
120 
121  vector<string> parameterName(nparameters);
122  vector<statistics::PriorDistribution> priors(nparameters-3);
123 
124  // Set the names and priors of the cosmological parameters
125  for (size_t i=0; i<cosmo_param.size(); i++){
126  parameterName[i] = cbl::cosmology::CosmologicalParameter_name(cosmo_param[i]);
127  priors[i] = cosmo_prior[i];
128  }
129 
130  // bias, offset and slope priors
131  priors[nparameters-5] = bias_prior;
132  parameterName[nparameters-5] = "bias";
133  priors[nparameters-4] = offset_slope_prior;
134  parameterName[nparameters-4] = "offset";
135  parameterName[nparameters-3] = "slope";
136  parameterName[nparameters-2] = "S8";
137  parameterName[nparameters-1] = "Baryonic fraction";
138 
139  //set the priors
140  m_set_prior(priors);
141 
142  // construct the model
143  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&Cl_limber, nparameters, parameterType, parameterName, m_data_model));
144 
145 }
146 
147 
148 // =================================================================================================
149 
150 
151 void cbl::modelling::angularpk::Modelling_PowerSpectrum_angular::set_model_limber (const std::vector<cbl::cosmology::CosmologicalParameter> cosmo_param, const std::vector<statistics::PriorDistribution> cosmo_prior, const statistics::PriorDistribution bias_prior)
152 {
153 
154  m_data_model->Cpar = cosmo_param;
155 
156  const int nparameters = cosmo_param.size()+3;
157 
158  vector<statistics::ParameterType> parameterType (nparameters-2, statistics::ParameterType::_Base_);
159  parameterType.emplace_back(cbl::statistics::ParameterType::_Derived_);
160  parameterType.emplace_back(cbl::statistics::ParameterType::_Derived_);
161  vector<string> parameterName(nparameters);
162  vector<statistics::PriorDistribution> priors(nparameters-2);
163 
164  // Set the names and priors of the cosmological parameters
165  for (size_t i=0; i<cosmo_param.size(); i++){
166  parameterName[i] = cbl::cosmology::CosmologicalParameter_name(cosmo_param[i]);
167  priors[i] = cosmo_prior[i];
168  }
169 
170  priors[nparameters-3] = bias_prior;
171  parameterName[nparameters-3] = "bias";
172  parameterName[nparameters-2] = "S8";
173  parameterName[nparameters-1] = "Baryonic fraction";
174 
175  //set the priors
176  m_set_prior(priors);
177 
178  // construct the model
179  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&Cl_limber, nparameters, parameterType, parameterName, m_data_model));
180 
181 }
182 
183 
184 // =================================================================================================
185 
186 
187 void cbl::modelling::angularpk::Modelling_PowerSpectrum_angular::set_model_limber_cross (const std::vector<cbl::cosmology::CosmologicalParameter> cosmo_param, const std::vector<statistics::PriorDistribution> cosmo_prior, const statistics::PriorDistribution bias_prior_bin1, const statistics::PriorDistribution bias_prior_bin2)
188 {
189 
190  m_data_model->Cpar = cosmo_param;
191 
192  const int nparameters = cosmo_param.size()+4;
193 
194  vector<statistics::ParameterType> parameterType (nparameters-2, statistics::ParameterType::_Base_);
195  parameterType.emplace_back(cbl::statistics::ParameterType::_Derived_);
196  parameterType.emplace_back(cbl::statistics::ParameterType::_Derived_);
197  vector<string> parameterName(nparameters);
198  vector<statistics::PriorDistribution> priors(nparameters-2);
199 
200  // Set the names and priors of the cosmological parameters
201  for (size_t i=0; i<cosmo_param.size(); i++){
202  parameterName[i] = cbl::cosmology::CosmologicalParameter_name(cosmo_param[i]);
203  priors[i] = cosmo_prior[i];
204  }
205 
206  priors[nparameters-4] = bias_prior_bin1;
207  parameterName[nparameters-4] = "bias_bin1";
208  priors[nparameters-3] = bias_prior_bin2;
209  parameterName[nparameters-3] = "bias_bin2";
210  parameterName[nparameters-2] = "S8";
211  parameterName[nparameters-1] = "Baryonic fraction";
212 
213  //set the priors
214  m_set_prior(priors);
215 
216  // construct the model
217  m_model = make_shared<statistics::Model1D>(statistics::Model1D(&Cl_limber, nparameters, parameterType, parameterName, m_data_model));
218 
219 }
220 
221 
222 // ================================================================================
223 
std::vector< double > Cl_limber(const std::vector< double > l, const std::shared_ptr< void > inputs, std::vector< double > &parameter)
the model for the angular power spectrum
The class Modelling_PowerSpectrum_angular.
The class Cosmology.
Definition: Cosmology.h:277
void set_data_model_cross(const cbl::cosmology::Cosmology cosmology, const double z_min=0., const double z_max=10., const std::string method_Pk="CAMB", const bool NL=false, const int norm=-1, const double k_min=0.001, const double k_max=5., const std::vector< double > dN_par={}, const double fsky=1., std::vector< double > ll={}, std::vector< std::vector< double >> mixing_matrix={}, const bool interpolate_power_spectrum=false, const double z_min_bin2=-1., const double z_max_bin2=-1., const std::vector< double > dN_par_bin2={})
Set the data used to construct models of the angular power spectrum.
void set_model_limber_cross(const std::vector< cbl::cosmology::CosmologicalParameter > cosmo_param, const std::vector< statistics::PriorDistribution > cosmo_prior, const statistics::PriorDistribution bias_prior_bin1, const statistics::PriorDistribution bias_prior_bin2)
set the model to fit the cross correlation angular power spectrum
void set_data_model(const cbl::cosmology::Cosmology cosmology, const double z_min=0., const double z_max=10., const std::string method_Pk="CAMB", const bool NL=false, const int norm=-1, const double k_min=0.001, const double k_max=5., const std::vector< double > dN_par={}, const double fsky=1., std::vector< double > ll={}, std::vector< std::vector< double >> mixing_matrix={}, const bool interpolate_power_spectrum=false)
Set the data used to construct models of the angular power spectrum.
void set_model_limber(const std::vector< cbl::cosmology::CosmologicalParameter > cosmo_param, const std::vector< statistics::PriorDistribution > cosmo_prior, const statistics::PriorDistribution bias_prior)
set the model to fit the angular power spectrum
The class Model1D.
Definition: Model1D.h:60
The class PriorDistribution.
std::string CosmologicalParameter_name(const CosmologicalParameter parameter)
name of the cosmological parameter
Definition: Cosmology.cpp:45
@ _Derived_
derived parameter
@ _Correlated_
correlated parameters
The global namespace of the CosmoBolognaLib
Definition: CAMB.h:38