CosmoBolognaLib
Free Software C++/Python libraries for cosmological calculations
ModelFunction_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 
38 using namespace std;
39 
40 using namespace cbl;
41 
42 
43 // ===========================================================================================
44 
45 
46 double cbl::modelling::numbercounts::Filter_sigmaR (const double kk, const double radius)
47 {
48  return pow(TopHat_WF(kk*radius),2);
49 }
50 
51 
52 // ===========================================================================================
53 
54 
55 double cbl::modelling::numbercounts::Filter_dsigmaR (const double kk, const double radius)
56 {
57  return 2.*cbl::TopHat_WF(kk*radius)*cbl::TopHat_WF_D1(kk*radius)*kk;
58 }
59 
60 
61 // ===========================================================================================
62 
63 
64 void cbl::modelling::numbercounts::sigmaM_dlnsigmaM (double &sigmaM, double &dlnsigmaM, const double mass, const cbl::glob::FuncGrid interp_Pk, const double kmax, const double rho)
65 {
66  double norm = 1./(2.*pow(par::pi, 2));
67  double dRdM_fact = pow(3./(4.*par::pi*rho), 1./3.);
68 
69  double RR = Radius(mass, rho);
70  double dRdM = dRdM_fact*pow(mass, -2./3.)/3.;
71 
72  auto integrand_sigmaR = [&] (const double kk)
73  {
74  return kk*kk*interp_Pk(kk)*Filter_sigmaR(kk, RR);
75  };
76 
77  sigmaM = norm*cbl::wrapper::gsl::GSL_integrate_cquad(integrand_sigmaR, 1.e-4, kmax, 1.e-5);
78 
79  auto integrand_dsigmaR = [&] (const double kk)
80  {
81  return kk*kk*interp_Pk(kk)*Filter_dsigmaR(kk, RR);
82  };
83 
84  dlnsigmaM = norm*cbl::wrapper::gsl::GSL_integrate_cquad(integrand_dsigmaR, 1.e-4, kmax, 1.e-5)*dRdM*(mass/(2*sigmaM));
85  sigmaM = sqrt(sigmaM);
86 }
87 
88 
89 // ===========================================================================================
90 
91 
92 void cbl::modelling::numbercounts::sigmaM_dlnsigmaM (std::vector<double> &sigmaM, std::vector<double> &dlnsigmaM, const std::vector<double> mass, const std::vector<double> kk, const std::vector<double> Pk, const std::string interpType, const double kmax, const double rho)
93 {
94  double norm = 1./(2.*pow(par::pi, 2));
95  double dRdM_fact = pow(3./(4.*par::pi*rho), 1./3.);
96  cbl::glob::FuncGrid Pk_interp(kk, Pk, interpType);
97  sigmaM.resize(mass.size(), 0);
98  dlnsigmaM.resize(mass.size(), 0);
99 
100  for (size_t i=0; i<mass.size(); i++) {
101 
102  double RR = Radius(mass[i], rho);
103  double dRdM = dRdM_fact*pow(mass[i], -2./3.)/3.;
104 
105  auto integrand_sigmaR = [&] (const double kk)
106  {
107  return kk*kk*Pk_interp(kk)*Filter_sigmaR(kk, RR);
108  };
109 
110  sigmaM[i] = norm*cbl::wrapper::gsl::GSL_integrate_cquad(integrand_sigmaR, 1.e-4, kmax, 1.e-5);
111 
112  auto integrand_dsigmaR = [&] (const double kk)
113  {
114  return kk*kk*Pk_interp(kk)*Filter_dsigmaR(kk, RR);
115  };
116 
117  dlnsigmaM[i] = norm*cbl::wrapper::gsl::GSL_integrate_cquad(integrand_dsigmaR, 1.e-4, kmax, 1.e-5)*dRdM*(mass[i]/(2*sigmaM[i]));
118  sigmaM[i] = sqrt(sigmaM[i]);
119  }
120 }
121 
122 
123 // ===========================================================================================
124 
125 
126 std::vector<cbl::glob::FuncGrid> cbl::modelling::numbercounts::sigmaM_dlnsigmaM (const std::vector<double> mass, cbl::cosmology::Cosmology cosmology, const std::vector<double> kk, const std::vector<double> Pk, const std::string interpType, const double kmax)
127 {
128  const double rho = cosmology.rho_m(0., true);
129 
130  vector<double> sigmaM, dlnsigmaM;
131 
132  cbl::modelling::numbercounts::sigmaM_dlnsigmaM (sigmaM, dlnsigmaM, mass, kk, Pk, interpType, kmax, rho);
133 
134  vector<cbl::glob::FuncGrid> interp(2);
135  interp[0] = cbl::glob::FuncGrid(mass, sigmaM, interpType);
136  interp[1] = cbl::glob::FuncGrid(mass, dlnsigmaM, interpType);
137 
138  return interp;
139 }
140 
141 
142 // ===========================================================================================
143 
144 
145 double cbl::modelling::numbercounts::mass_function (const double mass, cbl::cosmology::Cosmology cosmology, const double redshift, const std::string model_MF, const bool store_output, const double Delta, const bool isDelta_critical, const cbl::glob::FuncGrid interp_Pk, const double kmax)
146 {
147  const double rho = cosmology.rho_m(0., true);
148 
149  double sigmaM, dlnsigmaM;
150 
151  sigmaM_dlnsigmaM (sigmaM, dlnsigmaM, ((cosmology.unit()) ? mass : mass*cosmology.hh()), interp_Pk, kmax, rho);
152  double _Delta = (isDelta_critical) ? Delta/cosmology.OmegaM(redshift) : Delta;
153 
154  return cosmology.mass_function(mass, sigmaM, dlnsigmaM, redshift, model_MF, store_output, cbl::par::defaultString, _Delta);
155 }
156 
157 
158 // ===========================================================================================
159 
160 
161 std::vector<double> cbl::modelling::numbercounts::mass_function (const std::vector<double> mass, cbl::cosmology::Cosmology cosmology, const double redshift, const std::string model_MF, const bool store_output, const double Delta, const bool isDelta_critical, const std::vector<double> kk, const std::vector<double> Pk, const std::string interpType, const double kmax)
162 {
163  vector<double> mass_function(mass.size());
164 
165  const double rho = cosmology.rho_m(0., true);
166 
167  vector<double> _mass = mass;
168 
169  if (!cosmology.unit())
170  for(size_t i=0; i<mass.size(); i++)
171  _mass[i] = mass[i]*cosmology.hh();
172 
173  vector<double> sigmaM, dlnsigmaM;
174  cbl::modelling::numbercounts::sigmaM_dlnsigmaM (sigmaM, dlnsigmaM, _mass, kk, Pk, interpType, kmax, rho);
175 
176  double _Delta = (isDelta_critical) ? Delta/cosmology.OmegaM(redshift) : Delta;
177 
178  for (size_t i=0; i<mass.size(); i++)
179  mass_function[i] = cosmology.mass_function(mass[i], sigmaM[i], dlnsigmaM[i], redshift, model_MF, store_output, cbl::par::defaultString, _Delta);
180 
181  return mass_function;
182 }
183 
184 
185 // ===========================================================================================
186 
187 
188 std::vector<std::vector<double>> cbl::modelling::numbercounts::mass_function (const std::vector<double> redshift, const std::vector<double> mass, cbl::cosmology::Cosmology cosmology, const std::string model_MF, const bool store_output, const double Delta, const bool isDelta_critical, const std::vector<double> kk, const std::vector<double> Pk, const std::string interpType, const double kmax)
189 {
190  vector<vector<double>> mass_function(redshift.size(), vector<double>(mass.size()));
191 
192  const double rho = cosmology.rho_m(0., true);
193 
194  vector<double> _mass = mass;
195 
196  if (!cosmology.unit())
197  for(size_t i=0; i<mass.size(); i++)
198  _mass[i] = mass[i]*cosmology.hh();
199 
200  vector<double> sigmaM, dlnsigmaM;
201  cbl::modelling::numbercounts::sigmaM_dlnsigmaM(sigmaM, dlnsigmaM, _mass, kk, Pk, interpType, kmax, rho);
202 
203  for (size_t j=0; j<redshift.size(); j++)
204  for (size_t i=0; i<mass.size(); i++)
205  mass_function[j][i] = cosmology.mass_function(mass[i], sigmaM[i], dlnsigmaM[i], redshift[j], model_MF, store_output, par::defaultString, ((isDelta_critical) ? Delta/cosmology.OmegaM(redshift[j]) : Delta));
206 
207  return mass_function;
208 }
209 
210 
211 // ===========================================================================================
212 
213 
214 double cbl::modelling::numbercounts::number_counts (const double redshift_min, const double redshift_max, const double Mass_min, const double Mass_max, cbl::cosmology::Cosmology cosmology, const double Area, const std::string model_MF, const bool store_output, const double Delta, const bool isDelta_critical, const cbl::glob::FuncGrid interp_sigmaM, const cbl::glob::FuncGrid interp_DlnsigmaM)
215 {
216  double fact = (cosmology.unit()) ? 1 : cosmology.hh();
217  double nc = 0;
218 
219  auto integrand = [&cosmology,&fact,&model_MF,&isDelta_critical,&Delta,&Area,&interp_sigmaM,&interp_DlnsigmaM,&store_output] (const std::vector<double> x)
220  {
221  double Mass = pow(10,x[0])*pow(10,14);
222  return cosmology.mass_function(Mass, interp_sigmaM(Mass*fact), interp_DlnsigmaM(Mass*fact), x[1], model_MF, store_output, cbl::par::defaultString, (isDelta_critical) ? Delta/cosmology.OmegaM(x[1]) : Delta)*Area*cosmology.dV_dZdOmega(x[1], true) * pow(10,x[0]);
223  };
224  std::vector<std::vector<double>> integration_limits(2);
225  integration_limits[0] = {log10(Mass_min/pow(10,14)), log10(Mass_max/pow(10,14))};
226  integration_limits[1] = {redshift_min, redshift_max};
227 
228  cbl::wrapper::cuba::CUBAwrapper CW(integrand, 2);
229  nc = CW.IntegrateVegas(integration_limits, false);
230 
231  return nc * pow(10,14) * log(10);
232 }
233 
234 
235 // ===========================================================================================
236 
237 
238 double cbl::modelling::numbercounts::counts_proxy (const double alpha, const double beta, const double gamma, const double scatter0, const double scatterM, const double scatterM_exp, const double scatterz, const double scatterz_exp, const double z_bias, const double proxy_bias, const double z_err, const double proxy_err, const double Plambda_a, const double Plambda_b, const double Plambda_c, std::function<double(const double, const double, const std::shared_ptr<void>)> fz, std::function<double(const double, const double)> z_error, std::function<double(const double, const double)> proxy_error, double (*response_fact)(const double, const double, const double, const double, const std::string, const double, const std::string, std::shared_ptr<void>), const double redshift_min, const double redshift_max, const double proxy_min, const double proxy_max, cbl::cosmology::Cosmology cosmology, const double Area, const std::string model_MF, const std::string model_bias, const bool store_output, const double Delta, const bool isDelta_critical, const cbl::glob::FuncGrid interp_sigmaM, const cbl::glob::FuncGrid interp_DlnsigmaM, const cbl::glob::FuncGrid interp_DN, const double proxy_pivot, const double z_pivot, const double mass_pivot, const double log_base, const double weight)
239 {
240  double fact = (cosmology.unit()) ? 1 : cosmology.hh();
241  std::shared_ptr<void> pp;
242  auto cosmology_ptr = std::make_shared<cbl::cosmology::Cosmology>(cosmology);
243 
244  // Declare the normalized mass and the redshift, used as constants in integrand_P_M__z (which is called in integrand)
245  double normM=0; double the_redsh=0;
246 
247  // P(M|z) integrand
248  auto integrand_P_M__z = [&] (const double x)
249  {
250  double log_lambda = x - log(proxy_pivot)/log(log_base);
251  double log_f_z = log( fz(the_redsh, z_pivot, cosmology_ptr) )/log(log_base);
252 
253  double mean = alpha + beta*log_lambda + gamma*log_f_z;
254  double sigma = std::abs(scatter0 + scatterM*pow(log_lambda, scatterM_exp) + scatterz*pow(log_f_z, scatterz_exp));
255  double P_M__lambda_z = cbl::gaussian(normM, pp, {mean,sigma});
256  double P_lambda__z = Plambda_a * pow(pow(log_base,x),-Plambda_b) * exp(-Plambda_c*pow(log_base,x));
257 
258  return P_M__lambda_z * P_lambda__z * pow(log_base,x);
259  };
260 
261  // Total integrand
262  auto integrand = [&] (const std::vector<double> x)
263  {
264  double Delta_ = (isDelta_critical) ? Delta/cosmology.OmegaM(x[1]) : Delta;
265  double Mass = pow(log_base,x[0])*mass_pivot;
266  normM = x[0];
267  the_redsh = x[1];
268 
269  // Compute P(M|lambda,z)
270  double log_lambda = log(x[2]/proxy_pivot)/log(log_base);
271  double log_f_z = log( fz(x[1], z_pivot, cosmology_ptr) )/log(log_base);
272 
273  double mean = alpha + beta*log_lambda + gamma*log_f_z;
274  double sigma = std::abs(scatter0 + scatterM*pow(log_lambda, scatterM_exp) + scatterz*pow(log_f_z, scatterz_exp));
275  double P_M__lambda_z = cbl::gaussian(normM, pp, {mean,sigma});
276 
277  // Compute P(lambda|z)
278  double P_lambda__z = Plambda_a * pow(x[2],-Plambda_b) * exp(-Plambda_c*x[2]);
279 
280  // Compute P(M|z)
281  double P_M__z=0;
282  if (P_M__lambda_z*P_lambda__z > 0)
283  P_M__z=cbl::wrapper::gsl::GSL_integrate_cquad(integrand_P_M__z,log(0.00001)/log(log_base),log(1000.)/log(log_base)) * log(log_base);
284  else
285  P_M__z = 1;
286 
287  // Compute the integrals of P(z|z) and P(lambda|lambda)
288  double mean_Pz = x[1] + z_bias * (1+x[1]);
289  double int_P_z = 0.5 * ( erf( (redshift_max - mean_Pz) / (sqrt(2)*z_error(z_err, redshift_max)) ) - erf( (redshift_min - mean_Pz) / (sqrt(2)*z_error(z_err, redshift_min)) ) );
290  double mean_Plambda = x[2] + proxy_bias * (x[2]);
291  double int_P_lambda = 0.5 * ( erf( (proxy_max - mean_Plambda) / (sqrt(2)*proxy_error(proxy_err, proxy_max)) ) - erf( (proxy_min - mean_Plambda) / (sqrt(2)*proxy_error(proxy_err, proxy_min)) ) );
292 
293  return response_fact(Mass, interp_sigmaM(Mass*fact), x[1], interp_DN(x[1]), model_bias, Delta_, "EisensteinHu", cosmology_ptr) * cosmology.mass_function(Mass, interp_sigmaM(Mass*fact), interp_DlnsigmaM(Mass*fact), x[1], interp_DN(x[1]), model_MF, store_output, cbl::par::defaultString, Delta_)*Area*cosmology.dV_dZdOmega(x[1], true) * pow(log_base,normM) * (P_M__lambda_z*P_lambda__z/P_M__z) * int_P_z * int_P_lambda;
294  };
295 
296  // -------------------------------------------------------------
297 
298  // Find the minimum and maximum masses, given the parameters of the scaling relation
299  double log_lambda_min = log((std::max(proxy_min - 3.5*proxy_error(proxy_err, proxy_min), 1.))/proxy_pivot)/log(log_base);
300  double log_lambda_max = log((proxy_max + 3.5*proxy_error(proxy_err, proxy_max))/proxy_pivot)/log(log_base);
301  double log_f_z_min = log( fz((std::max(redshift_min - 3.5*z_error(z_err, redshift_min), 0.)), z_pivot, cosmology_ptr) )/log(log_base);
302  double log_f_z_max = log( fz((redshift_max + 3.5*z_error(z_err, redshift_min)), z_pivot, cosmology_ptr) )/log(log_base);
303 
304  double M1 = alpha + beta*log_lambda_min + gamma*log_f_z_min;
305  double M2 = alpha + beta*log_lambda_max + gamma*log_f_z_min;
306  double M3 = alpha + beta*log_lambda_min + gamma*log_f_z_max;
307  double M4 = alpha + beta*log_lambda_max + gamma*log_f_z_max;
308 
309  double min1 = std::min(M1, M2);
310  double min2 = std::min(min1, M3);
311  double minM = std::min(min2, M4);
312  double max1 = std::max(M1, M2);
313  double max2 = std::max(max1, M3);
314  double maxM = std::max(max2, M4);
315 
316  // Find the maximum value of the intrinsic scatter
317  double s1 = std::abs( scatter0 + scatterM*pow(log_lambda_min, scatterM_exp) + scatterz*pow(log_f_z_min, scatterz_exp) );
318  double s2 = std::abs( scatter0 + scatterM*pow(log_lambda_max, scatterM_exp) + scatterz*pow(log_f_z_min, scatterz_exp) );
319  double s3 = std::abs( scatter0 + scatterM*pow(log_lambda_min, scatterM_exp) + scatterz*pow(log_f_z_max, scatterz_exp) );
320  double s4 = std::abs( scatter0 + scatterM*pow(log_lambda_max, scatterM_exp) + scatterz*pow(log_f_z_max, scatterz_exp) );
321 
322  double maxs1 = std::max(s1, s2);
323  double maxs2 = std::max(maxs1, s3);
324  double max_intrinsic_scatter = std::max(maxs2, s4);
325 
326  // Define the integral limits
327  int integral_dimension=3;
328  std::vector<std::vector<double>> integration_limits(integral_dimension);
329  integration_limits[0] = {std::max(minM-3.5*max_intrinsic_scatter,log(1.e10/mass_pivot)/log(log_base)), std::min(maxM+3.5*max_intrinsic_scatter,log(1.e16/mass_pivot)/log(log_base))};
330  integration_limits[1] = {std::max(redshift_min - 3.5*z_error(z_err, redshift_min), 0.), redshift_max + 3.5*z_error(z_err, redshift_max)};
331  integration_limits[2] = {std::max(proxy_min - 3.5*proxy_error(proxy_err, proxy_min), 0.00001), proxy_max + 3.5*proxy_error(proxy_err, proxy_max)};
332 
333  // Compute the integral
334  cbl::wrapper::cuba::CUBAwrapper CW (integrand, integral_dimension);
335  double nc;
336 
337  if (integration_limits[0][0] < integration_limits[0][1])
338  nc = CW.IntegrateVegas(integration_limits,false);
339  else
340  nc = 0;
341 
342  return nc * mass_pivot * log(log_base) * weight;
343 }
344 
345 
346 // ===========================================================================================
347 
348 
349 std::vector<double> cbl::modelling::numbercounts::size_function (cbl::cosmology::Cosmology cosmology, const std::vector<double> radii, const double redshift, const std::string model, const double b_eff, double slope, double offset, const double deltav_NL, const double del_c, const std::string method_Pk, 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)
350 {
351 
352  vector<double> size_function = cosmology.size_function(radii, redshift, model, b_eff, slope, offset, deltav_NL, del_c, method_Pk, store_output, output_root, interpType, k_max, input_file, is_parameter_file);
353 
354  return size_function;
355 
356 }
Global functions to model number counts of any type.
The class Cosmology.
Definition: Cosmology.h:277
double rho_m(const double redshift=0., const bool unit1=false, const bool nu=false) const
the mean cosmic background density
Definition: Cosmology.cpp:1274
double size_function(const double RV, 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 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) const
the void size function
bool unit() const
get the private member Cosmology::m_unit
Definition: Cosmology.h:1338
double hh() const
get the private member Cosmology::m_hh
Definition: Cosmology.h:1191
double dV_dZdOmega(const double redshift, const bool angle_rad) const
the derivative of the comoving volume, d2V/(dz*dΩ) at a given redshift
Definition: Cosmology.cpp:1236
double mass_function(const double Mass, const double redshift, const std::string model_MF, const std::string method_SS, const bool store_output=true, const std::string output_root="test", const double Delta=200., const std::string interpType="Linear", 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, const bool default_delta=true, const double delta_t=1.686)
the mass function of dark matter haloes (filaments and sheets)
double OmegaM(const double redshift=0.) const
the matter density at a given redshift
Definition: Cosmology.cpp:579
The class FuncGrid.
Definition: FuncGrid.h:55
The class CUBAwrapper.
Definition: CUBAwrapper.h:187
double IntegrateVegas(std::vector< std::vector< double >> integration_limits, const bool parallelize=true)
integrate using the Vegas routine
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
static const double alpha
: the fine-structure constant
Definition: Constants.h:233
void sigmaM_dlnsigmaM(double &sigmaM, double &dlnsigmaM, const double mass, const cbl::glob::FuncGrid interp_Pk, const double kmax, const double rho)
compute
double counts_proxy(const double alpha, const double beta, const double gamma, const double scatter0, const double scatterM, const double scatterM_exp, const double scatterz, const double scatterz_exp, const double z_bias, const double proxy_bias, const double z_err, const double proxy_err, const double Plambda_a, const double Plambda_b, const double Plambda_c, std::function< double(const double, const double, const std::shared_ptr< void >)> fz, std::function< double(const double, const double)> z_error, std::function< double(const double, const double)> proxy_error, double(*response_fact)(const double, const double, const double, const double, const std::string, const double, const std::string, std::shared_ptr< void >), const double redshift_min, const double redshift_max, const double proxy_min, const double proxy_max, cbl::cosmology::Cosmology cosmology, const double Area, const std::string model_MF, const std::string model_bias, const bool store_output, const double Delta, const bool isDelta_critical, const cbl::glob::FuncGrid interp_sigmaM, const cbl::glob::FuncGrid interp_DlnsigmaM, const cbl::glob::FuncGrid interp_DN, const double proxy_pivot, const double z_pivot, const double mass_pivot, const double log_base, const double weight)
compute the number counts as function of mass proxy and redshift
double mass_function(const double mass, cosmology::Cosmology cosmology, const double redshift, const std::string model_MF, const bool store_output, const double Delta, const bool isDelta_critical, const cbl::glob::FuncGrid interp_Pk, const double kmax)
compute the mass function
std::vector< double > size_function(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 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)
the void size function
double number_counts(const double redshift_min, const double redshift_max, const double Mass_min, const double Mass_max, cosmology::Cosmology cosmology, const double Area, const std::string model_MF, const bool store_output, const double Delta, const bool isDelta_critical, const glob::FuncGrid interp_sigmaM, const glob::FuncGrid interp_DlnsigmaM)
compute the number counts as function of mass and redshift
double Filter_sigmaR(const double kk, const double radius)
the filter to compute
double Filter_dsigmaR(const double kk, const double radius)
the filter to compute
double GSL_integrate_cquad(gsl_function func, const double a, const double b, const double rel_err=1.e-3, const double abs_err=0, const int nevals=100)
integral, using the gsl cquad method
Definition: GSLwrapper.cpp:159
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
T Radius(const T Mass, const T Rho)
the radius of a sphere of a given mass and density
Definition: Func.h:1220
T TopHat_WF(const T kR)
the top-hat window function
Definition: Func.h:1195
T gaussian(T xx, std::shared_ptr< void > pp, std::vector< double > par)
the Gaussian function
Definition: Func.h:1127
T TopHat_WF_D1(const T kR)
the derivative of the top-hat window function
Definition: Func.h:1208