51 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
56 double sigmaNL = parameter[0];
59 double alpha = parameter[1];
61 vector<double> new_rad;
63 for (
size_t i=0; i<rad.size(); i++)
64 new_rad.push_back(rad[i]*
alpha);
68 vector<double> Pk(pp->kk.size(), 0);
70 vector<double> Pklin = pp->func_Pk->y();
71 vector<double> PkNW = pp->func_Pk_NW->y();
73 for (
size_t i =0; i<pp->kk.size(); i++) {
74 Pk[i] = PkNW[i]*(1.+(Pklin[i]/PkNW[i]-1.)*exp(-0.5*pow(pp->kk[i]*sigmaNL, 2)));
81 for (
size_t i =0; i<xi.size(); i++) {
84 for (
int j = 0;j<pp->poly_order; j++)
85 poly += parameter[j+3]*pow(rad[i], -j);
87 xi[i] = pow(parameter[2], 2)*xi[i]+poly;
100 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
105 double alpha = parameter[0];
108 double fsigma8 = parameter[1];
111 double bsigma8 = parameter[2];
115 vector<double> xi(rad.size(), 0);
117 for (
size_t i =0; i<xi.size(); i++) {
120 for (
int j = 0;j<pp->poly_order; j++)
121 poly += parameter[j+3]*pow(rad[i], -j);
123 xi[i] =
xi_ratio(fsigma8, bsigma8)*pow(bsigma8/pp->sigma8_z, 2)*pp->func_xi->operator()(rad[i]*
alpha)+poly;
136 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
138 vector<double> model(rad.size(), 0);
140 vector<double> poly_params(parameter.size()-3,0);
141 for (
size_t i=0; i<poly_params.size(); i++)
142 poly_params[i] = parameter[i+3];
144 for (
size_t i=0; i<model.size(); i++)
147 vector<double> deriv_coeff(pp->poly_order-1, 0);
148 vector<vector<double>> roots;
150 for (
size_t i=1; i<poly_params.size(); i++)
151 deriv_coeff[i-1] = i*poly_params[i];
153 vector<double> D1_coeff(pp->poly_order-1, 0);
154 for (
size_t i=1; i<poly_params.size(); i++)
155 D1_coeff[i-1] = i*poly_params[i];
157 auto model_derivative = [&] (
double rad)
160 for (
size_t i=0; i<D1_coeff.size(); i++)
161 mm += D1_coeff[i]*pow(rad, i);
165 double xmin=95, xmax=105;
170 if (fabs(parameter[0]-xmin)<0.1)
172 else if (fabs(parameter[0]-xmax)<0.1)
176 if ((xmin<80) || (xmax>120)) {
184 if ((parameter[0]>xmin) && (parameter[0]<xmax)) {
185 xmin = parameter[0]-22; xmax = parameter[0]-2;
190 if (fabs(parameter[1]-xmin)<0.1)
192 else if (fabs(parameter[1]-xmax)<0.1) {
209 parameter[2] = (parameter[0]+parameter[1])*0.5;
221 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
226 double alpha = parameter[3];
229 double fsigma8 = parameter[4];
232 double bsigma8 = parameter[5];
236 vector<double> model(rad.size(), 0);
238 for (
size_t i =0; i<model.size(); i++) {
241 for (
int j = 0;j<pp->poly_order; j++)
242 poly += parameter[j+6]*pow(rad[i], -j);
244 model[i] =
xi_ratio(fsigma8, bsigma8)*pow(bsigma8/pp->sigma8_z, 2)*pp->func_xi->operator()(rad[i]*
alpha)+poly;
249 auto model_derivative = [&] (
double rr)
251 double poly_der = 0.;
252 for (
int j = 1;j<pp->poly_order; j++) {
253 poly_der += -j*parameter[j+6]*pow(rr, -j-1);
255 return xi_ratio(fsigma8, bsigma8)*pow(bsigma8/pp->sigma8_z, 2)*pp->func_xi->D1v(rr*
alpha)+poly_der;
258 double xmin = 95., xmax = 105.;
263 if (fabs(parameter[0]-xmin)<0.1)
265 else if (fabs(parameter[0]-xmax)<0.1)
269 if ((xmin<70) || (xmax>160)) {
276 if ((parameter[0]>xmin) && (parameter[0]<xmax)) {
278 if (parameter[0]-parameter[1]<2.1) {
284 parameter[2] = (parameter[0]+parameter[1])*0.5;
296 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
302 double sigma8 = parameter[0];
305 double bias = parameter[1];
311 double fsigma8 = pp->linear_growth_rate_z*sigma8;
316 vector<double> xi(rad.size(), 0);
318 const double fact =
xi_ratio(fsigma8,
bias*sigma8)*pow(
bias, 2)*pow(sigma8/pp->sigma8_z, 2);
320 for (
size_t i =0; i<xi.size(); i++)
321 xi[i] = fact*pp->func_xi->operator()(rad[i]);
333 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
339 double alpha = parameter[0];
342 double fsigma8 = parameter[1];
345 double bsigma8 = parameter[2];
349 for (
size_t i=0; i<parameter.size(); ++i)
350 pp->cosmology->set_parameter(pp->Cpar[i], parameter[i]);
354 vector<double> xi(rad.size(), 0);
356 for (
size_t i =0; i<xi.size(); i++) {
360 for (
int j = 0;j<pp->poly_order; j++)
361 poly += parameter[j+3]*pow(rad[i], -j);
363 xi[i] =
xi_ratio(fsigma8, bsigma8)*pp->cosmology->xi_matter(rad[i]*
alpha, pp->method_Pk, pp->NL, pp->redshift,
true, pp->output_root, pp->norm, pp->k_min, pp->k_max, pp->aa, pp->GSL, pp->prec, pp->file_par)/pow(pp->sigma8_z, 2)+poly;
365 if (!pp->store_output)
366 pp->cosmology->remove_output_Pk_tables(pp->method_Pk, pp->NL, pp->redshift, pp->output_root);
378 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
387 double bias = parameter[0];
392 for (
size_t i=0; i<pp->Cpar.size(); ++i)
399 double alpha = cosmo.
D_V(pp->redshift)/pp->DVfid;
402 vector<double> new_rad = rad;
403 for (
size_t i=0; i<rad.size(); i++)
406 return cosmo.
xi0_Kaiser(new_rad,
bias, pp->method_Pk, pp->redshift,
false, pp->output_root, pp->NL, pp->norm, pp->k_min, pp->k_max, pp->prec, pp->file_par);
416 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
421 const double M0 = parameter[0];
422 const double slope = parameter[1];
423 const double scatter = parameter[2];
426 const double SigmaS =
par::cc*parameter[3]/pp->HHfid;
430 vector<double> mass(pp->cluster_mass_proxy->ndata(), 0), _bias(pp->cluster_mass_proxy->ndata());
432 for (
int i=0; i<pp->cluster_mass_proxy->ndata(); i++) {
435 double log10_proxy = 0;
438 log10_proxy = log10(pp->gau_ran->operator()()*pp->cluster_mass_proxy->error(i)+pp->cluster_mass_proxy->data(i));
439 isNan = (log10_proxy!=log10_proxy);
441 double log10_mass = 14.+M0+slope*log10_proxy+pp->gau_ran->operator()()*(scatter);
443 mass[i] = pow(10, log10_mass);
445 _bias[i] = pp->cosmology->bias_halo(mass[i], pp->func_sigma->operator()(mass[i]), pp->cluster_mass_proxy->xx(i), pp->model_bias,
false,
par::defaultString,
"Linear", pp->Delta);
464 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
470 for (
size_t i=0; i<pp->Cpar.size(); ++i)
473 auto cosmo_ptr = std::make_shared<cbl::cosmology::Cosmology>(cosmo);
476 const double SigmaS =
par::cc*parameter[parameter.size()-2]/cosmo.
HH(pp->redshift);
479 std::vector<double> scalRel_pars;
480 for (
size_t i=0; i<pp->Cpar.size(); ++i)
481 scalRel_pars.push_back(parameter[i]);
482 for (
size_t i=pp->Cpar.size(); i<parameter.size()-2; i++)
483 scalRel_pars.emplace_back(parameter[i]);
485 const double alpha = scalRel_pars[scalRel_pars.size()-8];
486 const double beta = scalRel_pars[scalRel_pars.size()-7];
487 const double gamma = scalRel_pars[scalRel_pars.size()-6];
488 const double scatter0 = scalRel_pars[scalRel_pars.size()-5];
489 const double scatterM = scalRel_pars[scalRel_pars.size()-4];
490 const double scatterM_exp = scalRel_pars[scalRel_pars.size()-3];
491 const double scatterz = scalRel_pars[scalRel_pars.size()-2];
492 const double scatterz_exp = scalRel_pars[scalRel_pars.size()-1];
495 vector<double> Pk = cosmo.
Pk_matter(pp->kk, pp->method_Pk, pp->NL, pp->redshift,
false, pp->output_root, pp->norm, pp->k_min, pp->k_max, pp->prec, pp->file_par);
497 std::shared_ptr<glob::FuncGrid> Pk_interp = make_shared<glob::FuncGrid>(
glob::FuncGrid(pp->kk, Pk,
"Spline"));
506 std::vector<double> sigmaM (Mass_vector.size(), 0.);
507 for (
size_t i=0; i<sigmaM.size(); i++)
508 sigmaM[i] = sqrt( cosmo.
sigma2M(Mass_vector[i], pp->method_Pk, 0.,
false,
"test",
"Linear", 100.) );
513 double log_base = (pp->scaling_relation)->data_model().log_base;
514 double mass_pivot = (pp->scaling_relation)->data_model().mass_pivot;
515 double proxy_pivot = (pp->scaling_relation)->data_model().proxy_pivot;
516 double redshift_pivot = (pp->scaling_relation)->data_model().redshift_pivot;
520 if (pp->z_abs_err == -1 && pp->proxy_rel_err == -1) {
524 std::vector<double> DN (z_for_DN.size(), 0.);
525 for (
size_t i=0; i<z_for_DN.size(); i++)
526 DN[i] = cosmo.
DN(z_for_DN[i]);
529 vector<double> _bias(pp->scaling_relation->data()->xx().size());
531 for (
size_t i=0; i<pp->scaling_relation->data()->xx().size(); i++) {
533 double log_lambda = log(pp->scaling_relation->data()->xx(i)/proxy_pivot)/log(log_base);
534 double log_fz = log( (pp->scaling_relation)->data_model().fz((pp->scaling_relation)->data_model().redshift[i],redshift_pivot,cosmo_ptr) )/log(log_base);
536 double scatter_intr = scatter0 + scatterM*pow(log_lambda, scatterM_exp) + scatterz*pow(log_fz, scatterz_exp);
538 double log_mass = (pp->scaling_relation)->likelihood()->get_m_model()->operator()(pp->scaling_relation->data()->xx(i), scalRel_pars) + scatter_intr;
539 double mass = pow(log_base, log_mass) * mass_pivot;
541 double Delta = (pp->isDelta_critical) ? pp->Delta_input/cosmo.
OmegaM((pp->scaling_relation)->data_model().redshift[i]) : pp->Delta_input;
542 double z = (pp->scaling_relation)->data_model().redshift[i];
544 _bias[i] = cosmo.
bias_halo(mass, sigmaM_interp(mass), z, DN_interp(z), pp->model_bias,
false,
par::defaultString,
"Linear", Delta, -1, pp->norm, pp->k_min, pp->k_max, pp->prec, pp->method_Pk);
563 const std::vector<double> z_for_DN =
cbl::linear_bin_vector(100, 0.0001,
cbl::Max((pp->scaling_relation)->data_model().redshift)+5.*pp->z_abs_err);
564 std::vector<double> DN (z_for_DN.size(), 0.);
565 for (
size_t i=0; i<z_for_DN.size(); i++)
566 DN[i] = cosmo.
DN(z_for_DN[i]);
570 double dummy_proxy, dummy_z;
571 std::shared_ptr<void> ptr;
573 auto integrand = [&] (
const double x)
575 double mass = pow(log_base,x)*mass_pivot;
578 double log_lambda = log(dummy_proxy/proxy_pivot)/log(log_base);
579 double log_f_z = log( (pp->scaling_relation)->data_model().fz(dummy_z, redshift_pivot, cosmo_ptr) )/log(log_base);
581 double mean =
alpha + beta*log_lambda + gamma*log_f_z;
582 double scatter_intr = std::abs(scatter0 + scatterM*pow(log_lambda, scatterM_exp) + scatterz*pow(log_f_z, scatterz_exp));
583 double P_M__lambda_z =
cbl::gaussian(x, ptr, {mean,scatter_intr});
586 double Delta = (pp->isDelta_critical) ? pp->Delta_input/cosmo.
OmegaM(dummy_z) : pp->Delta_input;
587 double bias_halo = cosmo.
bias_halo(mass, sigmaM_interp(mass), dummy_z, DN_interp(dummy_z), pp->model_bias,
false,
par::defaultString,
"Linear", Delta, -1, pp->norm, pp->k_min, pp->k_max, pp->prec, pp->method_Pk);
589 return bias_halo * P_M__lambda_z;
624 vector<double> _bias(pp->scaling_relation->data()->xx().size());
626 for (
size_t i=0; i<pp->scaling_relation->data()->xx().size(); i++) {
628 dummy_proxy = pp->scaling_relation->data()->xx(i);
629 dummy_z = (pp->scaling_relation)->data_model().redshift[i];
632 double log_lambda_min = log(dummy_proxy*(1-pp->proxy_rel_err)/proxy_pivot)/log(log_base);
633 double log_lambda_max = log(dummy_proxy*(1+pp->proxy_rel_err)/proxy_pivot)/log(log_base);
634 double log_f_z_min = log( (pp->scaling_relation)->data_model().fz(dummy_z-pp->z_abs_err, redshift_pivot, cosmo_ptr) )/log(log_base);
635 double log_f_z_max = log( (pp->scaling_relation)->data_model().fz(dummy_z+pp->z_abs_err, redshift_pivot, cosmo_ptr) )/log(log_base);
637 double logM1 =
alpha + beta*log_lambda_min + gamma*log_f_z_min;
638 double logM2 =
alpha + beta*log_lambda_max + gamma*log_f_z_min;
639 double logM3 =
alpha + beta*log_lambda_min + gamma*log_f_z_max;
640 double logM4 =
alpha + beta*log_lambda_max + gamma*log_f_z_max;
642 double min1 = std::min(logM1, logM2);
643 double min2 = std::min(min1, logM3);
644 double min_logM = std::min(min2, logM4);
645 double max1 = std::max(logM1, logM2);
646 double max2 = std::max(max1, logM3);
647 double max_logM = std::max(max2, logM4);
650 double s1 = std::abs( scatter0 + scatterM*pow(log_lambda_min, scatterM_exp) + scatterz*pow(log_f_z_min, scatterz_exp) );
651 double s2 = std::abs( scatter0 + scatterM*pow(log_lambda_max, scatterM_exp) + scatterz*pow(log_f_z_min, scatterz_exp) );
652 double s3 = std::abs( scatter0 + scatterM*pow(log_lambda_min, scatterM_exp) + scatterz*pow(log_f_z_max, scatterz_exp) );
653 double s4 = std::abs( scatter0 + scatterM*pow(log_lambda_max, scatterM_exp) + scatterz*pow(log_f_z_max, scatterz_exp) );
655 double maxs1 = std::max(s1, s2);
656 double maxs2 = std::max(maxs1, s3);
657 double max_scatter_intr = std::max(maxs2, s4);
660 _bias[i] =
wrapper::gsl::GSL_integrate_qag(integrand, std::max(min_logM-3.5*max_scatter_intr,log(
cbl::Min(Mass_vector)/mass_pivot)/log(log_base)), std::min(max_logM+3.5*max_scatter_intr,log(
cbl::Max(Mass_vector)/mass_pivot)/log(log_base)));
676 parameter[parameter.size()-1] =
bias;
688 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
693 const double bias = parameter[0];
696 const double SigmaS =
par::cc*parameter[1]/pp->HHfid;
708 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
717 const double sigma8 = parameter[0];
721 const double sigma8_z = sigma8*cosmo.
DN(pp->redshift);
728 vector<double>
bias(pp->cluster_mass_proxy->ndata());
730 for (
int k=0; k<pp->cluster_mass_proxy->ndata(); k++) {
732 const double sigma8fid = pp->sigma8_z/cosmo.
DN(pp->redshift);
734 const double sigma = pp->cluster_mass_proxy->extra_info(0, k)*(sigma8/sigma8fid);
736 bias[k] = cosmo.
bias_halo(pp->cluster_mass_proxy->data(k), sigma, pp->cluster_mass_proxy->xx(k), pp->model_bias,
false, pp->output_root,
"Spline", pp->Delta, 1., pp->norm, pp->k_min, pp->k_max, pp->prec, pp->method_Pk);
740 parameter[1] = mean_bias;
744 parameter[2] = sigma8_z;
750 const double fsigma8 = pp->linear_growth_rate_z*sigma8_z;
755 vector<double> xi(rad.size(), 0);
757 const double fact =
xi_ratio(fsigma8, mean_bias*sigma8_z)*pow(mean_bias, 2)*pow(sigma8_z/pp->sigma8_z, 2);
759 for (
size_t i =0; i<xi.size(); i++)
760 xi[i] = fact*pp->func_xi->operator()(rad[i]);
773 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
784 const double bias = pp->cosmopar_bias_interp_1D(parameter[0]);
788 const double alpha = cosmo.
D_V(pp->redshift)/pp->DVfid;
793 vector<double> new_rad = rad;
794 for (
size_t i=0; i<rad.size(); i++)
797 return cosmo.
xi0_Kaiser(new_rad,
bias, pp->method_Pk, pp->redshift,
false, pp->output_root, pp->NL, pp->norm, pp->k_min, pp->k_max, pp->prec, pp->file_par);
807 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
819 const double bias = pp->cosmopar_bias_interp_2D(parameter[0], parameter[1]);
823 const double alpha = cosmo.
D_V(pp->redshift)/pp->DVfid;
824 parameter[3] =
alpha;
829 vector<double> new_rad = rad;
830 for (
size_t i=0; i<rad.size(); i++)
833 return cosmo.
xi0_Kaiser(new_rad,
bias, pp->method_Pk, pp->redshift,
false, pp->output_root, pp->NL, pp->norm, pp->k_min, pp->k_max, pp->prec, pp->file_par);
843 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
852 for (
size_t i=0; i<pp->Cpar.size(); ++i)
858 vector<double> mass_grid =
logarithmic_bin_vector(pp->cluster_mass_proxy->ndata()/10,
Min(pp->cluster_mass_proxy->data()),
Max(pp->cluster_mass_proxy->data()));
860 const double bias = cosmo.
bias_eff_mass(pp->cluster_mass_proxy->data(), mass_grid, pp->cluster_mass_proxy->xx(), pp->model_bias, pp->method_Pk, pp->meanType,
false, pp->output_root, pp->Delta)[0];
866 const double alpha = cosmo.
D_V(pp->redshift)/pp->DVfid;
869 vector<double> new_rad = rad;
870 for (
size_t i=0; i<rad.size(); i++)
874 const double sigma8 = parameter[0];
875 const double sigma8_z = sigma8*pp->cosmology->DN(pp->redshift);
876 const double fsigma8 = pp->linear_growth_rate_z*sigma8_z;
878 vector<double> xi(rad.size(), 0);
880 const double fact =
xi_ratio(fsigma8,
bias*sigma8_z)*pow(
bias, 2)*pow(sigma8_z/pp->sigma8_z, 2);
882 for (
size_t i =0; i<xi.size(); i++)
883 xi[i] = fact*pp->func_xi->operator()(new_rad[i]);
896 shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
906 for (
size_t i=0; i<pp->Cpar.size(); ++i)
910 const double alpha = parameter[pp->Cpar.size()];
915 const vector<double> Pk_grid = cosmo.
Pk_matter(pp->kk, pp->method_Pk,
false, 0.,
false, pp->output_root, -1, pp->k_min, pp->k_max, pp->prec, pp->file_par);
922 const vector<double> mass = pp->mass;
923 const double rho = cosmo.
rho_m(0.);
925 vector<double> sigma_grid, dnsigma_grid;
927 for (
size_t i=0; i<mass.size(); i++) {
929 const double RR =
Radius(mass[i], rho);
932 auto func_sigma = [&] (
double kk)
934 return pow(
TopHat_WF(kk*RR)*kk, 2)*interp_Pk(kk);
939 const double dRdM = pow(3./(4.*
par::pi*rho), 1./3.)*pow(mass[i], -2./3.)/3.;
940 auto func_dnsigma = [&] (
const double kk)
943 return filter*pow(kk, 2)*interp_Pk(kk);
954 const double bias = cosmo.
bias_eff_selection_function(interp_sigma, interp_DnSigma, *pp->interp_SelectionFunction_cut, pp->Mass_min, pp->Mass_max, {pp->redshift}, pp->model_bias, pp->model_MF,
"EisensteinHu",
alpha,
false, pp->output_root, pp->Delta, -1.,
"Spline", pp->norm, pp->k_min, pp->k_max, pp->prec)[0];
955 parameter[pp->Cpar.size()+1] =
bias;
958 const double AP_factor = cosmo.
D_V(pp->redshift)/pp->DVfid;
961 vector<double> new_rad = rad;
962 for (
size_t i=0; i<rad.size(); i++)
963 new_rad[i] *= AP_factor;
970 for (
size_t i=0; i<xi.size(); i++)
982 const double Nc = 0.5*(1.+gsl_sf_erf(log10(
Mass)-lgMmin)/(sqrt(2.)*sigmalgM));
983 return (Nc<0 || std::isnan(Nc)) ? 0. : Nc;
992 const double Ns =
Ncen(
Mass, lgMmin, sigmalgM)*pow((
Mass-pow(10.,lgM0))/pow(10.,lgM1),
alpha);
993 return (Ns<0 || std::isnan(Ns)) ? 0. : Ns;
1009 double cbl::modelling::twopt::ng (
const double lgMmin,
const double sigmalgM,
const double lgM0,
const double lgM1,
const double alpha,
const std::shared_ptr<void> inputs)
1012 shared_ptr<STR_data_HOD> pp = static_pointer_cast<STR_data_HOD>(inputs);
1014 auto ng_integrand = [&] (
const double lgmass)
1016 return pp->interpMF(pow(10., lgmass))*
Navg(pow(10., lgmass), lgMmin, sigmalgM, lgM0, lgM1,
alpha)*pow(10., lgmass)*log(10.);
1029 shared_ptr<STR_data_HOD> pp = static_pointer_cast<STR_data_HOD>(inputs);
1031 auto func = [&] (
double mass)
1034 const double dndM = pp->cosmology->mass_function(mass, pp->func_sigma->operator()(mass), pp->func_dlnsigma->operator()(mass), pp->redshift, pp->model_MF,
false, pp->output_root, pp->Delta, pp->interpType, pp->norm, pp->k_min, pp->k_max, pp->prec, pp->method_Pk, pp->input_file, pp->is_parameter_file);
1037 const double bias_halo = pp->cosmology->bias_halo(mass, pp->func_sigma->operator()(mass), pp->redshift, pp->model_bias,
false, pp->output_root, pp->interpType, pp->Delta, pp->kk, pp->norm, pp->k_min, pp->k_max, pp->prec, pp->method_Pk, pp->input_file, pp->is_parameter_file);
1041 const double NN =
Navg(mass, Mmin, sigmalgM, M0, M1,
alpha);
1043 return dndM*NN*bias_halo;
1073 shared_ptr<STR_data_HOD> pp = static_pointer_cast<STR_data_HOD>(inputs);
1076 const double lgMmin = parameter[0];
1077 const double sigmalgM = parameter[1];
1078 const double lgM0 = parameter[2];
1079 const double lgM1 = parameter[3];
1080 const double alpha = parameter[4];
1085 auto Pk_cs_integrand = [&] (
const double lgmass) {
1086 halo_profile.
set_mass(pow(10., lgmass));
1101 shared_ptr<STR_data_HOD> pp = static_pointer_cast<STR_data_HOD>(inputs);
1104 const double lgMmin = parameter[0];
1105 const double sigmalgM = parameter[1];
1106 const double lgM0 = parameter[2];
1107 const double lgM1 = parameter[3];
1108 const double alpha = parameter[4];
1113 auto Pk_ss_integrand = [&] (
const double lgmass) {
1114 halo_profile.
set_mass(pow(10., lgmass));
1115 return pp->interpMF(pow(10., lgmass))*
NsNs1(pow(10., lgmass), parameter[0], parameter[1], parameter[2], parameter[3], parameter[4])*pow(halo_profile.
density_profile_FourierSpace(kk), 2)*pow(10., lgmass)*log(10.);
1127 return Pk_cs(kk, inputs, parameter)+
Pk_ss(kk, inputs, parameter);
1137 shared_ptr<STR_data_HOD> pp = static_pointer_cast<STR_data_HOD>(inputs);
1140 const double lgMmin = parameter[0];
1141 const double sigmalgM = parameter[1];
1142 const double lgM0 = parameter[2];
1143 const double lgM1 = parameter[3];
1144 const double alpha = parameter[4];
1149 auto Pk_2halo_integrand = [&] (
const double lgmass) {
1150 halo_profile.
set_mass(pow(10., lgmass));
1151 return pp->interpMF(pow(10., lgmass))*
Navg(pow(10., lgmass), parameter[0], parameter[1], parameter[2], parameter[3], parameter[4])*pp->interpBias(pow(10., lgmass))*halo_profile.
density_profile_FourierSpace(kk)*pow(10., lgmass)*log(10.);
1172 shared_ptr<STR_data_HOD> pp = static_pointer_cast<STR_data_HOD>(inputs);
1174 vector<double> Pk(pp->kkvec.size(), 0);
1176 #pragma omp parallel num_threads(omp_get_max_threads())
1178 #pragma omp for schedule(static, 2)
1179 for (
size_t i=0; i<pp->kkvec.size(); i++)
1180 Pk[i] =
Pk_1halo(pp->kkvec[i], inputs, parameter);
1193 shared_ptr<STR_data_HOD> pp = static_pointer_cast<STR_data_HOD>(inputs);
1195 vector<double> Pk(pp->kkvec.size(), 0);
1197 #pragma omp parallel num_threads(omp_get_max_threads())
1199 #pragma omp for schedule(static, 2)
1200 for (
size_t i=0; i<pp->kkvec.size(); i++)
1201 Pk[i] =
Pk_2halo(pp->kkvec[i], inputs, parameter);
1214 const vector<double> xi1h =
xi_1halo(rad, inputs, parameter);
1215 const vector<double> xi2h =
xi_2halo(rad, inputs, parameter);
1216 vector<double> xi(rad.size());
1218 #pragma omp parallel num_threads(omp_get_max_threads())
1220 #pragma omp for schedule(static, 2)
1221 for (
size_t i=0; i<rad.size(); i++)
1222 xi[i] = xi1h[i]+xi2h[i];
1236 shared_ptr<STR_data_HOD> pp = static_pointer_cast<STR_data_HOD>(inputs);
1241 const double Mmin = parameter[0];
1242 const double sigmalgM = parameter[1];
1243 const double M0 = parameter[2];
1244 const double M1 = parameter[3];
1245 const double alpha = parameter[4];
1248 const double rad = sqrt(pow(rp, 2)+pow(
pi, 2));
1249 const double mu = rp/rad;
1251 const double beta2 = pp->cosmology->linear_growth_rate(pp->redshift)/
bias(Mmin, sigmalgM, M0, M1,
alpha, inputs);
1253 const double fact_xi0 = 1.+2./3.*beta2+1./5.*beta2*beta2;
1254 const double fact_xi2 = (4./3.*beta2+4./7.*beta2*beta2);
1255 const double fact_xi4 = 8./35.*beta2*beta2;
1257 auto func3 = [&] (
double yy) {
return func({yy}, inputs, parameter)[0]*pow(yy, 2); };
1260 auto func5 = [&] (
double yy) {
return func({yy}, inputs, parameter)[0]*pow(yy, 4); };
1263 const double xi0 = fact_xi0*func({rad}, inputs, parameter)[0];
1264 const double xi2 = fact_xi2*(func({rad}, inputs, parameter)[0]-3.*J3);
1265 const double xi4 = fact_xi4*(func({rad}, inputs, parameter)[0]+15./2.*J3-35./2.*J5);
Global functions to model the monopole of the two-point correlation function.
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,
double rho_m(const double redshift=0., const bool unit1=false, const bool nu=false) const
the mean cosmic background density
double xi0_Kaiser(const double rad, const double f_sigma8, const double bias_sigma8, const std::string method_Pk, const double redshift, const bool store_output=true, const std::string output_root="test", const bool xiType=0, const double k_star=-1., const bool NL=false, const int norm=-1, const double r_min=0.1, const double r_max=150., const double k_min=0.001, const double k_max=100., const double aa=0., const bool GSL=false, const double prec=1.e-2, const std::string file_par=par::defaultString)
monopole of the redshift-space two-point correlation function in the Kaiser limit
std::vector< double > bias_eff_selection_function(const glob::FuncGrid interp_sigma, const glob::FuncGrid interp_DnSigma, const glob::FuncGrid interp_SF, const double Mass_min, const double Mass_max, const std::vector< double > redshift, const std::string model_bias, const std::string model_MF, const std::string method_SS, const double alpha=1., const bool store_output=true, const std::string output_root="test", const double Delta_crit=200., const double kk=-1., 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)
effective bias of dark matter haloes, computed using a given selection function; σ(mass) and dlnσ/dM ...
void set_sigma8(const double sigma8=-1.)
set the value of σ8
void set_parameter(const CosmologicalParameter parameter, const double value)
set the value of one cosmological paramter
double D_V(const double redshift) const
the average distance at a given redshift, used to rescale the correlation function
double HH(const double redshift=0.) const
the Hubble function
double bias_halo(const double Mass, const double redshift, const std::string author, const std::string method_SS, const bool store_output=true, const std::string output_root="test", const std::string interpType="Linear", const double Delta=200., const double kk=-1., 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)
bias of dark matter haloes
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
std::vector< double > bias_eff_mass(const std::vector< double > MM, const std::vector< double > redshift, const std::string model_bias, const std::string method_SS, const std::string meanType="mean_bias", const bool store_output=true, const std::string output_root="test", const double Delta=200., const double kk=-1., 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)
effective bias of dark matter haloes, computed by averaging the bias of a set of haloes
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 linear_growth_rate(const double redshift, const double prec=1.e-4) const
the linear growth rate at a given redshift,
double OmegaM(const double redshift=0.) const
the matter density at a given redshift
void set_mass(const double mass=par::defaultDouble)
set the private member m_mass
double density_profile_FourierSpace(const double kk)
the Fourier transform of the normalised halo density
static const std::string defaultString
default std::string value
static const double pi
: the ratio of a circle's circumference to its diameter
static const double alpha
: the fine-structure constant
static const double cc
: the speed of light in vacuum (the value is exact) [km/sec]
std::vector< double > xi0_polynomial_LinearPoint(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the two-point correlation function
std::vector< double > xi0_linear(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the two-point correlation function
double Nsat(const double Mass, const double lgMmin, const double sigmalgM, const double lgM0, const double lgM1, const double alpha)
the average number of satellite galaxies hosted in a dark matter halo of a given mass
std::vector< double > xi0_linear_bias_cosmology(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the two-point correlation function
std::vector< double > damped_Xi(const std::vector< double > ss, const double bias, const double linear_growth_rate, const double SigmaS, const std::vector< double > kk, const std::shared_ptr< cbl::glob::FuncGrid > PkDM)
the damped two-point correlation monopole; from Sereno et al. 2015
std::vector< double > xi0_linear_two_cosmo_pars_clusters(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the two-point correlation function, the bias is computed by the input clust...
std::vector< double > xi0_damped_scaling_relation_sigmaz_cosmology(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
the damped two-point correlation monopole; from Sereno et al. 2015
double Navg(const double Mass, const double lgMmin, const double sigmalgM, const double lgM0, const double lgM1, const double alpha)
the average number of galaxies hosted in a dark matter halo of a given mass
double NsNs1(const double Mass, const double lgMmin, const double sigmalgM, const double lgM0, const double lgM1, const double alpha)
the mean number of satellite-satellite galaxy pairs
double Pk_ss(const double kk, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the satellite-satellite part of the 1-halo term of the power spectrum
double NcNs(const double Mass, const double lgMmin, const double sigmalgM, const double lgM0, const double lgM1, const double alpha)
the mean number of central-satellite galaxy pairs
std::vector< double > xi0_damped_scaling_relation_sigmaz(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
the damped two-point correlation monopole; from Sereno et al. 2015
double xi_HOD_zspace(const double rp, const double pi, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
HOD model of the redshift-space monopole of the two-point correlation function.
std::vector< double > xi_HOD(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
HOD model of the monopole of the two-point correlation function.
std::vector< double > xi0_linear_cosmology_clusters_selection_function(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the redshift-space two-point correlation function of galaxy clusters,...
double Pk_1halo(const double kk, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the 1-halo term of the power spectrum
double xi_2halo_zspace(const double rp, const double pi, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the 2-halo term of the redshift-space monopole of the two-point correlation function
std::vector< double > xi0_linear_one_cosmo_par_clusters(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the two-point correlation function, the bias is computed by the input clust...
std::vector< double > xi0_damped_bias_sigmaz(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
the damped two-point correlation monopole; from Sereno et al. 2015
std::vector< double > xi0_BAO_sigmaNL(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the BAO signal in the monopole of the two-point correlation function
double xi_1halo_zspace(const double rp, const double pi, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the 1-halo term of the redshift-space monopole of the two-point correlation function
double xi_zspace(FunctionVectorVectorPtrVectorRef func, const double rp, const double pi, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
function used to compute the redshift-space monopole of the two-point correlation function
double Ncen(const double Mass, const double lgMmin, const double sigmalgM)
the average number of central galaxies hosted in a dark matter halo of a given mass
std::vector< double > xi_2halo(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the 2-halo term of the monopole of the two-point correlation function
double Pk_cs(const double kk, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the central-satellite part of the 1-halo term of the power spectrum
std::vector< double > xi0_linear_cosmology_clusters(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the two-point correlation function, the bias is computed by the input clust...
double Pk_HOD(const double kk, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
HOD model of the power spectrum.
std::vector< double > xi0_linear_sigma8_bias(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the two-point correlation function in redshift space
double Pk_2halo(const double kk, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the 2-halo term of the power spectrum
std::vector< double > xi0_linear_sigma8_clusters(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the two-point correlation function, the bias is computed by the input clust...
std::vector< double > xi0_linear_cosmology(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the two-point correlation function
double bias(const double Mmin, const double sigmalgM, const double M0, const double M1, const double alpha, const std::shared_ptr< void > inputs)
the mean galaxy bias
std::vector< double > xi_1halo(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the 1-halo term of the monopole of the two-point correlation function
double ng(const double lgMmin, const double sigmalgM, const double lgM0, const double lgM1, const double alpha, const std::shared_ptr< void > inputs)
the galaxy number density
std::vector< double > xi0_linear_LinearPoint(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
model for the monopole of the two-point correlation function
std::vector< double > transform_FFTlog(const std::vector< double > yy, const int dir, const std::vector< double > xx, const std::vector< double > fx, const double mu=0, const double q=0, const double kr=1, const int kropt=0)
wrapper of the FFTlog to compute the discrete Fourier sine or cosine transform of a logarithmically...
double GSL_polynomial_eval(const double x, const std::shared_ptr< void > fixed_parameters, const std::vector< double > coeff)
evaluate a polynomial
double GSL_root_brent(gsl_function Func, const double low_guess, const double up_guess, const double rel_err=1.e-3, const double abs_err=0)
function to find roots using GSL qag method
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
T Min(const std::vector< T > vect)
minimum element of a std::vector
double Average(const std::vector< double > vect)
the average of a std::vector
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
std::vector< T > linear_bin_vector(const size_t nn, const T min, const T max)
fill a std::vector with linearly spaced values
T TopHat_WF(const T kR)
the top-hat window function
std::function< std::vector< double >std::vector< double >, std::shared_ptr< void >, std::vector< double > &)> FunctionVectorVectorPtrVectorRef
typedef of a function returning a vector with a vector, a pointer and a vector reference in input
T Max(const std::vector< T > vect)
maximum element of a std::vector
double xi_ratio(const double beta)
the ratio between the redshift-space and real-space correlation functions
T gaussian(T xx, std::shared_ptr< void > pp, std::vector< double > par)
the Gaussian function
T TopHat_WF_D1(const T kR)
the derivative of the top-hat window function
double legendre_polynomial(const double mu, const int l)
the order l Legendre polynomial