CosmoBolognaLib
Free Software C++/Python libraries for cosmological calculations
ModelFunction_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 
37 
38 using namespace std;
39 
40 using namespace cbl;
41 
42 
43 // ===========================================================================================
44 
45 
46 std::vector<double> cbl::modelling::numbercounts::number_counts_proxy (const std::vector<double> proxy, const std::shared_ptr<void> inputs, std::vector<double> &parameter)
47 {
48  (void)proxy;
49 
50  // structure contaning the required input data
51  shared_ptr<STR_NC_data_model> pp = static_pointer_cast<STR_NC_data_model>(inputs);
52 
53  // redefine the cosmology
54  cbl::cosmology::Cosmology cosmo = *pp->cosmology;
55 
56  // set the cosmological parameters
57  for (size_t i=0; i<pp->Cpar.size(); ++i)
58  cosmo.set_parameter(pp->Cpar[i], parameter[i]);
59 
60  // compute the power spectrum
61  std::vector<double> Pk = cosmo.Pk_matter(pp->kk, pp->method_Pk, false, 0., pp->store_output, pp->output_root, pp->norm, pp->k_min, pp->k_max, pp->prec, pp->file_par, true);
62 
63  // interpolate sigmaM and its derivative
64  const std::vector<cbl::glob::FuncGrid> interp = cbl::modelling::numbercounts::sigmaM_dlnsigmaM (pp->Mass_vector, cosmo, pp->kk, Pk, "Spline", pp->k_max);
65 
66  // interpolate the growth factor
67  const std::vector<double> z_for_DN = cbl::linear_bin_vector(200, 0.0001, 3.);
68  std::vector<double> DN (z_for_DN.size(), 0.);
69  for (size_t i=0; i<z_for_DN.size(); i++)
70  DN[i] = cosmo.DN(z_for_DN[i]);
71  cbl::glob::FuncGrid DN_interp (z_for_DN, DN, "Spline");
72 
73  // Compute the counts
74  std::vector<double> number_counts(pp->edges_x.size()-1);
75 
76  for (size_t j=0; j<pp->edges_x.size()-1; j++) {
77  number_counts[j] = cbl::modelling::numbercounts::counts_proxy(parameter[pp->Cpar.size()], parameter[pp->Cpar.size()+1], parameter[pp->Cpar.size()+2], parameter[pp->Cpar.size()+3], parameter[pp->Cpar.size()+4], parameter[pp->Cpar.size()+5], parameter[pp->Cpar.size()+6], parameter[pp->Cpar.size()+7], parameter[pp->Cpar.size()+8], parameter[pp->Cpar.size()+9], parameter[pp->Cpar.size()+10], parameter[pp->Cpar.size()+11], parameter[pp->Cpar.size()+12], parameter[pp->Cpar.size()+13], parameter[pp->Cpar.size()+14], pp->fz, pp->z_error, pp->proxy_error, pp->response_fact, pp->z_min, pp->z_max, pp->edges_x[j], pp->edges_x[j+1], cosmo, pp->area_rad, pp->model_MF, pp->model_bias, pp->store_output, pp->Delta, pp->isDelta_critical, interp[0], interp[1], DN_interp, pp->proxy_pivot, pp->z_pivot, pp->mass_pivot, pp->log_base, pp->SF_weights[j]);
78  }
79 
80  return number_counts;
81 }
Global functions to model number counts as a function of a mass proxy.
The class Cosmology.
Definition: Cosmology.h:277
double DN(const double redshift, const double redshift_norm=0., const double prec=1.e-4) const
the normalised amplitude of the growing mode at a given redshift,
Definition: Cosmology.cpp:691
void set_parameter(const CosmologicalParameter parameter, const double value)
set the value of one cosmological paramter
Definition: Cosmology.cpp:424
std::vector< double > Pk_matter(const std::vector< double > kk, const std::string method_Pk, const bool NL, const double redshift, const bool store_output=true, const std::string output_root="test", const int norm=-1, const double k_min=0.001, const double k_max=100., const double prec=1.e-2, const std::string file_par=par::defaultString, const bool unit1=false)
the dark matter power spectrum
Definition: PkXi.cpp:1331
The class FuncGrid.
Definition: FuncGrid.h:55
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 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
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
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