46 double cbl::cosmology::Cosmology::m_func_sigma (
const string method_Pk,
const double redshift,
const bool store_output,
const string output_root,
const string interpType,
const double kmax,
const string input_file,
const bool is_parameter_file,
function<
double(
double)> filter,
const bool unit1)
const
48 function<double(
double)> func;
50 vector<double> kk, Pk;
52 double fact = (m_unit || unit1) ? 1. : m_hh;
62 ifstream fin(input_file.c_str());
checkIO(fin, input_file);
64 while (getline(fin, line)) {
65 if (line.find(
"#")==string::npos) {
66 stringstream ss(line);
76 fin.clear(); fin.close();
86 auto ff = [&] (
const double kk)
89 eh.
TFmdm_set_cosm(m_Omega_matter, m_Omega_baryon, m_Omega_neutrinos, m_massive_neutrinos, m_Omega_DE, m_hh, redshift, m_scalar_amp, m_scalar_pivot, m_n_spec);
91 if (eh.
Pk(kk)!=eh.
Pk(kk))
ErrorCBL(
"eh.Pk=nan!",
"m_func_sigma",
"Sigma.cpp");
99 else if (method_Pk==
"CAMB" || method_Pk==
"MGCAMB" || method_Pk==
"CLASS") {
101 vector<double> lgkk, lgPk;
102 Table_PkCodes(method_Pk,
false, lgkk, lgPk, redshift, store_output, output_root, kmax, input_file);
104 for (
size_t i=0; i<lgkk.size(); i++) {
105 const double KK = pow(10., lgkk[i]);
108 Pk.emplace_back(pow(10., lgPk[i]));
116 ErrorCBL(
"in the EisensteiHu case, no input files can be read!",
"m_func_sigma",
"Sigma.cpp");
119 ErrorCBL(
"the chosen method_Pk is not available!",
"m_func_sigma",
"Sigma.cpp");
121 auto ff = [&] (
const double kk)
123 return func(kk/fact)*kk*kk*filter(kk);
137 double cbl::cosmology::Cosmology::m_sigma2R_notNormalised (
const double radius,
const string method_Pk,
const double redshift,
const bool store_output,
const string output_root,
const string interpType,
const double kmax,
const string input_file,
const bool is_parameter_file,
const bool unit1)
const
139 auto filter = [&] (
const double k)
144 return cosmology::Cosmology::m_func_sigma(method_Pk, redshift, store_output, output_root, interpType, kmax, input_file, is_parameter_file, filter, unit1);
152 double cbl::cosmology::Cosmology::sigma2R (
const double radius,
const string method_Pk,
const double redshift,
const bool store_output,
const string output_root,
const string interpType,
const double kmax,
const string input_file,
const bool is_parameter_file,
const bool unit1)
const
154 if (radius<0)
ErrorCBL(
"the radius must be >0!",
"sigma2R",
"Sigma.cpp");
166 fact = pow(m_sigma8, 2)/m_sigma2R_notNormalised(8., method_Pk, 0., store_output, output_root, interpType, kmax, input_file, is_parameter_file,
true);
169 return m_sigma2R_notNormalised(radius, method_Pk, redshift, store_output, output_root, interpType, kmax, input_file, is_parameter_file, unit1)*fact;
176 double cbl::cosmology::Cosmology::dnsigma2R (
const int nd,
const double radius,
const string method_Pk,
const double redshift,
const bool store_output,
const string output_root,
const string interpType,
const double kmax,
const string input_file,
const bool is_parameter_file,
const bool unit1)
const
178 if (radius<0)
ErrorCBL(
"the radius must be >0!",
"dnsigma2R",
"Sigma.cpp");
190 fact = pow(m_sigma8, 2)/m_sigma2R_notNormalised(8., method_Pk, 0., store_output, output_root, interpType, kmax, input_file, is_parameter_file,
true);
195 auto filter = [&] (
const double k)
205 return ErrorCBL(
"",
"dnsigma2R",
"Sigma.cpp", glob::ExitCode::_workInProgress_);
212 double cbl::cosmology::Cosmology::m_sigma2M_notNormalised (
const double mass,
const string method_Pk,
const double redshift,
const bool store_output,
const string output_root,
const string interpType,
const double kmax,
const string input_file,
const bool is_parameter_file,
const bool unit1)
const
214 if (mass<0)
ErrorCBL(
"the mass must be >0!",
"m_sigma2M_notNormalised",
"Sigma.cpp");
218 auto filter = [&] (
const double k)
223 return Cosmology::m_func_sigma(method_Pk, redshift, store_output, output_root, interpType, kmax, input_file, is_parameter_file, filter, unit1);
230 double cbl::cosmology::Cosmology::sigma2M (
const double mass,
const string method_Pk,
const double redshift,
const bool store_output,
const string output_root,
const string interpType,
const double kmax,
const string input_file,
const bool is_parameter_file,
const bool unit1)
const
232 if (mass<0)
ErrorCBL(
"the mass must be >0!",
"sigma2M",
"Sigma.cpp");
244 fact = pow(m_sigma8, 2)/m_sigma2M_notNormalised(
Mass(8., rho_m(0.,
true)), method_Pk, 0., store_output, output_root, interpType, kmax, input_file, is_parameter_file,
true);
247 return m_sigma2M_notNormalised(mass, method_Pk, redshift, store_output, output_root, interpType, kmax, input_file, is_parameter_file, unit1)*fact;
254 double cbl::cosmology::Cosmology::dnsigma2M (
const int nd,
const double mass,
const string method_Pk,
const double redshift,
const bool store_output,
const string output_root,
const string interpType,
const double kmax,
const string input_file,
const bool is_parameter_file,
const bool unit1)
const
256 if (mass<0)
ErrorCBL(
"the mass must be >0!",
"dnsigma2M",
"Sigma.cpp");
268 fact = pow(m_sigma8, 2)/m_sigma2M_notNormalised(
Mass(8., rho_m(0.,
true)), method_Pk, 0., store_output, output_root, interpType, kmax, input_file, is_parameter_file,
true);
276 const double rho = (input_file!=
par::defaultString && !is_parameter_file) ? m_RhoZero : rho_m(redshift, unit1);
280 const double dRdM = pow(3./(4.*
cbl::par::pi*rho), 1./3.)*pow(mass, -2./3.)/3.;
282 auto filter = [&] (
const double k)
287 return cosmology::Cosmology::m_func_sigma(method_Pk, redshift, store_output, output_root, interpType, kmax, input_file, is_parameter_file, filter, unit1)*fact;
291 return ErrorCBL(
"",
"dnsigma2M",
"Sigma.cpp", glob::ExitCode::_workInProgress_);
298 std::string
cbl::cosmology::Cosmology::create_grid_sigmaM (
const string method_SS,
const double redshift,
const bool store_output,
const string output_root,
const string interpType,
const double k_max,
const string input_file,
const bool is_parameter_file)
const
304 string MK =
"mkdir -p "+dir_grid;
if (system (MK.c_str())) {};
306 string file_grid = dir_grid+
"grid_"+method_SS+norm+
"_h"+
conv(m_hh,
par::fDP6)+
"_OmB"+
conv(m_Omega_baryon,
par::fDP6)+
"_OmCDM"+
conv(m_Omega_CDM,
par::fDP6)+
"_OmL"+
conv(m_Omega_DE,
par::fDP6)+
"_OmN"+
conv(m_Omega_neutrinos,
par::fDP6)+
"_Z"+
conv(redshift,
par::fDP6)+
"_scalar_amp"+
conv(m_scalar_amp,
par::ee3)+
"_scalar_pivot"+
conv(m_scalar_pivot,
par::fDP6)+
"_n"+
conv(m_n_spec,
par::fDP6)+
"_w0"+
conv(m_w0,
par::fDP6)+
"_wa"+
conv(m_wa,
par::fDP6)+
".dat";
308 ifstream fin(file_grid.c_str());
312 coutCBL << endl <<
"I'm creating the grid file with sigma(M): " << file_grid.c_str() <<
"..." << endl;
314 ofstream fout(file_grid.c_str());
checkIO(fout, file_grid);
318 double SSS,
Sigma, Dln_Sigma;
320 int dp = cout.precision();
321 cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(1);
323 for (
size_t k=0; k<MM.size(); k++) {
324 coutCBL <<
"\r............." << double(k)/double(MM.size())*100. <<
"% completed \r"; cout.flush();
326 SSS = sigma2M(MM[k], method_SS, redshift, store_output, output_root, interpType, k_max, input_file, is_parameter_file,
true);
328 Dln_Sigma = dnsigma2M(1, MM[k], method_SS, redshift, store_output, output_root, interpType, k_max, input_file, is_parameter_file,
true)*(MM[k]/(2.*SSS));
329 fout << MM[k] <<
" " <<
Sigma <<
" " << Dln_Sigma << endl;
332 cout.unsetf(ios::fixed); cout.unsetf(ios::showpoint); cout.precision(dp);
333 fout.clear(); fout.close();
coutCBL << endl <<
"I wrote the file: " << file_grid << endl;
336 fin.clear(); fin.close();
#define coutCBL
CBL print message.
std::string DirCosmo()
get the directory where the CosmoBolognaLbi are stored
double m_func_sigma(const std::string method_Pk, const double redshift, 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, std::function< double(double)> filter={}, const bool unit1=false) const
function to compute the not-yet-normalised mass variances and their derivatives
double m_sigma2M_notNormalised(const double mass, const std::string method_Pk, const double redshift, 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 bool unit1=false) const
the not-yet-normalised mass variance,
std::string create_grid_sigmaM(const std::string method_SS, const double redshift, 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
auxiliary function to create a grid file with σ(M)
double m_sigma2R_notNormalised(const double radius, const std::string method_Pk, const double redshift, 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 bool unit1=false) const
the not-yet-normalised mass variance,
double dnsigma2M(const int nd, const double mass, const std::string method_Pk, const double redshift, 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 bool unit1=false) const
the first derivative of the mass variance,
double dnsigma2R(const int nd, const double radius, const std::string method_Pk, const double redshift, 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 bool unit1=false) const
the nth-order derivative of the mass variance,
double sigma2M(const double mass, const std::string method_Pk, const double redshift, 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 bool unit1=false) const
the mass variance,
double sigma2R(const double radius, const std::string method_Pk, const double redshift, 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 bool unit1=false) const
the mass variance,
double Pk(double kk)
get the power spectrum in unit of h^{-3}Mpc^{-3}
int TFmdm_set_cosm(double omega_matter, double omega_baryon, double omega_hdm, int degen_hdm, double omega_lambda, double hubble, double redshift, double As=2.56e-9, double k_pivot=0.05, double n_spec=0.96)
set the cosmological parameters
static const char fDP6[]
conversion symbol for: double -> std::string
static const char ee3[]
conversion symbol for: double -> std::string
static const char fDP3[]
conversion symbol for: double -> std::string
static const char fINT[]
conversion symbol for: int -> std::string
static const std::string defaultString
default std::string value
static const double pi
: the ratio of a circle's circumference to its diameter
double GSL_integrate_qag(gsl_function Func, const double a, const double b, const double rel_err=1.e-3, const double abs_err=0, const int limit_size=1000, const int rule=6)
integral, computed using the GSL qag method
The global namespace of the CosmoBolognaLib
std::string conv(const T val, const char *fact)
convert a number to a std::string
T Mass(const T RR, const T Rho)
the mass of a sphere of a given radius and density
T Radius(const T Mass, const T Rho)
the radius of a sphere of a given mass and density
std::vector< T > logarithmic_bin_vector(const size_t nn, const T min, const T max)
fill a std::vector with logarithmically spaced values
void checkIO(const std::ifstream &fin, const std::string file="NULL")
check if an input file can be opened
T TopHat_WF(const T kR)
the top-hat window function
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
T TopHat_WF_D1(const T kR)
the derivative of the top-hat window function
double Sigma(const std::vector< double > vect)
the standard deviation of a std::vector
@ _logarithmic_
logarithmic binning