CosmoBolognaLib
Free Software C++/Python libraries for cosmological calculations
Modelling_NumberCounts.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 
37 #include "Modelling_NumberCounts.h"
38 
39 using namespace std;
40 
41 using namespace cbl;
42 
43 
44 // ===========================================================================================
45 
46 
47 void cbl::modelling::numbercounts::Modelling_NumberCounts::set_data_model (const cosmology::Cosmology cosmology, const double redshift, const std::string method_Pk, const double k_min, const double k_max, const int step, const bool store_output, const int norm, const double Delta, const bool isDelta_critical, const std::string model_MF, const std::string selection_function_file, const std::vector<int> selection_function_column, const double z_min, const double z_max, const int z_step, const double Mass_min, const double Mass_max, const int Mass_step, const double area_degrees, const double prec)
48 {
49  m_data_model.isSnapshot = false;
50 
51  if (m_fit_range==false) ErrorCBL("You must set the fit range (through set_fit_range) first!","set_data_model","Modelling_NumberCounts.cpp");
52  m_data_model.edges_x = m_data->edges_xx();
53  m_data_model.edges_y = m_data->edges_yy();
54 
55  m_data_model.cosmology = make_shared<cosmology::Cosmology>(cosmology);
56  m_data_model.redshift = redshift;
57  m_data_model.method_Pk = method_Pk;
58  m_data_model.k_min = k_min;
59  m_data_model.k_max = k_max;
60  m_data_model.step = step;
61  m_data_model.kk = logarithmic_bin_vector(step, k_min, k_max);
62  m_data_model.norm = norm;
63 
64  m_data_model.store_output = store_output;
65  m_data_model.output_root = "test";
66  m_data_model.file_par = par::defaultString;
67 
68  m_data_model.isDelta_critical = isDelta_critical;
69  m_data_model.Delta = Delta;
70  m_data_model.model_MF = model_MF;
71 
72  m_data_model.Mass_min = Mass_min;
73  m_data_model.Mass_max = Mass_max;
74  m_data_model.Mass_step = Mass_step;
75  m_data_model.Mass_vector = logarithmic_bin_vector(200, 1.e10, 1.e16);
76 
77  m_data_model.z_min = z_min;
78  m_data_model.z_max = z_max;
79  m_data_model.z_step = z_step;
80  m_data_model.z_vector = linear_bin_vector(z_step, z_min, z_max);
81 
82  m_data_model.prec = prec;
83 
84  m_data_model.area_rad = area_degrees*pow(par::pi/180., 2);
85  if (m_data_model.z_min>0)
86  m_data_model.Volume = cosmology.Volume(z_min, z_max, area_degrees);
87 
88  if (selection_function_file!=par::defaultString) {
89  m_data_model.use_SF = true;
90  std::vector<double> mass, redshift;
91  std::vector<std::vector<double>> SF;
92  read_matrix(selection_function_file, redshift, mass, SF, selection_function_column);
93  m_data_model.interp_SelectionFunction = make_shared<glob::FuncGrid2D> (glob::FuncGrid2D(redshift, mass, SF, "Cubic"));
94  }
95  else
96  m_data_model.use_SF = false;
97 
98  m_data_model.is_sigma8_free = false;
99 }
100 
101 
102 
103 // ===========================================================================================
104 
105 
106 void cbl::modelling::numbercounts::Modelling_NumberCounts::set_data_model (const cosmology::Cosmology cosmology, const std::vector<double> SF_weights, const double z_pivot, const double proxy_pivot, const double mass_pivot, const double log_base, const std::string method_Pk, const bool store_output, const int norm, const double Delta, const bool isDelta_critical, const std::string model_MF, const std::string model_bias, const double z_min, const double z_max, const double area_degrees, const double prec)
107 {
108  m_data_model.isSnapshot = false;
109 
110  if (m_fit_range==false) ErrorCBL("You must set the fit range (through set_fit_range) first!","set_data_model","Modelling_NumberCounts.cpp");
111  m_data_model.edges_x = m_data->edges_xx();
112 
113  for (size_t i=0; i<m_data_model.edges_x.size(); i++)
114  if (m_data_model.edges_x[i] <= 0)
115  ErrorCBL("The values of the proxy edges cannot be <= 0.","set_data_model","Modelling_NumberCounts.cpp");
116 
117  m_data_model.cosmology = make_shared<cosmology::Cosmology>(cosmology);
118 
119  if (SF_weights.size() == (m_data->edges_xx()).size()-1)
120  m_data_model.SF_weights = SF_weights;
121  else
122  ErrorCBL("The weights vector must have the same size of the x vector!","set_data_model","Modelling_NumberCounts.cpp");
123  m_data_model.z_pivot = z_pivot;
124  m_data_model.proxy_pivot = proxy_pivot;
125  m_data_model.mass_pivot = mass_pivot;
126  m_data_model.log_base = log_base;
127 
128  m_data_model.method_Pk = method_Pk;
129  m_data_model.k_min = 1.e-4;
130  m_data_model.k_max = 100.;
131  m_data_model.step = 500;
132  m_data_model.kk = logarithmic_bin_vector(500, 1.e-4, 100.);
133  m_data_model.norm = norm;
134 
135  m_data_model.store_output = store_output;
136  m_data_model.output_root = "test";
137  m_data_model.file_par = par::defaultString;
138 
139  m_data_model.isDelta_critical = isDelta_critical;
140  m_data_model.Delta = Delta;
141  m_data_model.model_MF = model_MF;
142  m_data_model.model_bias = model_bias;
143 
144  m_data_model.Mass_vector = logarithmic_bin_vector(200, 1.e10, 1.e16);
145 
146  m_data_model.z_min = z_min;
147  m_data_model.z_max = z_max;
148 
149  m_data_model.prec = prec;
150 
151  m_data_model.area_rad = area_degrees*pow(par::pi/180., 2);
152  if (m_data_model.z_min>0)
153  m_data_model.Volume = cosmology.Volume(z_min, z_max, area_degrees);
154 
155  m_data_model.is_sigma8_free = false;
156 }
157 
158 
159 
160 // ===========================================================================================
161 
162 
163 void cbl::modelling::numbercounts::Modelling_NumberCounts::set_data_model_SF (const cosmology::Cosmology cosmology, const std::vector<double> radii, const double redshift, const std::string model_SF, const double b_eff, double slope, double offset, const double deltav_NL, const double del_c, const std::string method_Pk, const double k_Pk_ratio, const bool store_output, const std::string output_root, const std::string interpType, const double k_max, const std::string input_file, const bool is_parameter_file)
164 {
165  m_data_model_SF.cosmology = make_shared<cosmology::Cosmology>(cosmology);
166  m_data_model_SF.radii = radii;
167  m_data_model_SF.redshift = redshift;
168  m_data_model_SF.model_SF = model_SF;
169  m_data_model_SF.b_eff = b_eff;
170  m_data_model_SF.b_slope = slope;
171  m_data_model_SF.b_offset = offset;
172  m_data_model_SF.deltav_NL = deltav_NL;
173  m_data_model_SF.delta_c = del_c;
174  m_data_model_SF.method_Pk = method_Pk;
175  m_data_model_SF.k_Pk_ratio = k_Pk_ratio;
176  m_data_model_SF.store_output = store_output;
177  m_data_model_SF.output_root = output_root;
178  m_data_model_SF.interpType = interpType;
179  m_data_model_SF.k_max = k_max;
180  m_data_model_SF.input_file = input_file;
181  m_data_model_SF.is_parameter_file = is_parameter_file;
182 
183 }
The class Modelling_NumberCounts.
The class Cosmology.
Definition: Cosmology.h:277
double Volume(const double z1, const double z2, const double Area) const
comoving volume for a given redshift range and sky area
Definition: Cosmology.cpp:1183
The class FuncGrid2D.
Definition: FuncGrid.h:302
void set_data_model(const cbl::cosmology::Cosmology cosmology={}, const double redshift=0., const std::string method_Pk="CAMB", const double k_min=1.e-4, const double k_max=100., const int step=500, const bool store_output=true, const int norm=-1, const double Delta=200., const bool isDelta_critical=true, const std::string model_MF="Tinker", const std::string selection_function_file=par::defaultString, const std::vector< int > selection_function_column={}, const double z_min=par::defaultDouble, const double z_max=par::defaultDouble, const int z_step=50, const double Mass_min=par::defaultDouble, const double Mass_max=par::defaultDouble, const int Mass_step=100, const double area_degrees=par::defaultDouble, const double prec=1.e-4)
set the data used to construct generic models of number counts
void set_data_model_SF(const cosmology::Cosmology cosmology, const std::vector< double > radii, const double redshift, const std::string model, const double b_eff, double slope=0.854, double offset=0.420, const double deltav_NL=-0.795, const double del_c=1.69, const std::string method_Pk="EisensteinHu", const double k_Pk_ratio=-1., const bool store_output=true, const std::string output_root="test", const std::string interpType="Linear", const double k_max=100., const std::string input_file=par::defaultString, const bool is_parameter_file=true)
Member functions used to set the model parameters.
static const std::string defaultString
default std::string value
Definition: Constants.h:336
static const double pi
: the ratio of a circle's circumference to its diameter
Definition: Constants.h:199
The global namespace of the CosmoBolognaLib
Definition: CAMB.h:38
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
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