47 std::vector<double> 
cbl::modelling::twopt::xi_Wedges (
const std::vector<double> rr, 
const std::vector<int> dataset_order, 
const std::vector<std::vector<double>> mu_integral_limits, 
const std::string model, 
const std::vector<double> parameter, 
const std::vector<std::shared_ptr<glob::FuncGrid>> pk_interp, 
const double prec, 
const double alpha_perp, 
const double alpha_par)
 
   49   vector<vector<double>> Xil = 
Xi_l(rr, 3, model, parameter, pk_interp, prec, alpha_perp, alpha_par);
 
   51   vector<double> XiW(rr.size());
 
   53   for (
size_t i=0; i<rr.size(); i++) {
 
   54     const double mu_min = mu_integral_limits[dataset_order[i]][0];
 
   55     const double mu_max = mu_integral_limits[dataset_order[i]][1];
 
   57     const double f2 = 0.5*((pow(mu_max, 3)-pow(mu_min, 3))/(mu_max-mu_min)-1.);
 
   58     const double f4 = 0.125*((7.*(pow(mu_max, 5)-pow(mu_min, 5))-10.*(pow(mu_max, 3)-pow(mu_min, 3)))/(mu_max-mu_min)+3.);
 
   60     XiW[i] = Xil[0][i]+f2*Xil[1][i]+f4*Xil[2][i];
 
   70 std::vector<std::vector<double>> 
cbl::modelling::twopt::xi_Wedges (
const std::vector<double> rr, 
const int nWedges, 
const std::vector<std::vector<double>> mu_integral_limits, 
const std::string model, 
const std::vector<double> parameter, 
const std::vector<std::shared_ptr<glob::FuncGrid>> pk_interp, 
const double prec, 
const double alpha_perp, 
const double alpha_par)
 
   72   vector<vector<double>> Xil = 
Xi_l(rr, 3, model, parameter, pk_interp, prec, alpha_perp, alpha_par);
 
   74   vector<vector<double>> XiW(nWedges, vector<double>(rr.size(), 0));
 
   76   for (
int i=0; i<nWedges; i++) {
 
   77     const double mu_min = mu_integral_limits[i][0];
 
   78     const double mu_max = mu_integral_limits[i][1];
 
   80     const double f2 = 0.5*((pow(mu_max, 3)-pow(mu_min, 3))/(mu_max-mu_min)-1.);
 
   81     const double f4 = 0.125*((7.*(pow(mu_max, 5)-pow(mu_min, 5))-10.*(pow(mu_max, 3)-pow(mu_min, 3)))/(mu_max-mu_min)+3.);
 
   83     for (
size_t j=0; j<rr.size(); j++)
 
   84       XiW[i][j] = Xil[0][j]+f2*Xil[1][j]+f4*Xil[2][j];
 
   97   shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
 
  100   vector<shared_ptr<glob::FuncGrid>> pk_interp(2);
 
  101   vector<shared_ptr<glob::FuncGrid>> pk_interp_dispersion(1);
 
  102   vector<shared_ptr<glob::FuncGrid>> pk_interp_Scoccimarro_CPT(3);
 
  103   vector<shared_ptr<glob::FuncGrid>> pk_interp_TNS_CPT(17);
 
  104   vector<shared_ptr<glob::FuncGrid>> pk_interp_eTNS_CPT(25);
 
  105   std::vector<double> Xi_wedge;
 
  107   if (pp->Pk_mu_model==
"dispersion_dewiggled") {
 
  108     pk_interp[0] = pp->func_Pk;
 
  109     pk_interp[1] = pp->func_Pk_NW;
 
  110     Xi_wedge = 
xi_Wedges(rad, pp->dataset_order, pp->mu_integral_limits, pp->Pk_mu_model, {parameter[2], parameter[3], parameter[4]/pp->sigma8_z, parameter[5]/pp->sigma8_z, parameter[6] }, pk_interp, pp->prec, parameter[0], parameter[1]);
 
  113   else if (pp->Pk_mu_model==
"dispersion_modecoupling") {
 
  114     pk_interp[0] = pp->func_Pk;
 
  115     pk_interp[1] = pp->func_Pk1loop;
 
  116     Xi_wedge = 
xi_Wedges(rad, pp->dataset_order, pp->mu_integral_limits, pp->Pk_mu_model, {parameter[2]/pp->sigma8_z, parameter[3]/pp->sigma8_z, parameter[4], parameter[4] }, pk_interp, pp->prec,  parameter[0], parameter[1]);
 
  119   else if (pp->Pk_mu_model==
"dispersion_Gauss" || pp->Pk_mu_model==
"dispersion_Lorentz") {
 
  120     pk_interp_dispersion[0] = pp->func_Pk;
 
  121     Xi_wedge = 
xi_Wedges(rad, pp->dataset_order, pp->mu_integral_limits, pp->Pk_mu_model, { parameter[0]/pp->sigma8_z, parameter[1]/pp->sigma8_z, parameter[2] }, pk_interp_dispersion, pp->prec, parameter[3], parameter[4]);
 
  124   else if (pp->Pk_mu_model==
"ScoccimarroGauss" || pp->Pk_mu_model==
"ScoccimarroLorentz") {
 
  125     pk_interp_Scoccimarro_CPT[0] = pp->func_Pk_DeltaDelta;
 
  126     pk_interp_Scoccimarro_CPT[1] = pp->func_Pk_DeltaTheta;
 
  127     pk_interp_Scoccimarro_CPT[2] = pp->func_Pk_ThetaTheta;
 
  128     Xi_wedge = 
xi_Wedges(rad, pp->dataset_order, pp->mu_integral_limits, pp->Pk_mu_model, { parameter[0]/pp->sigma8_z, parameter[1]/pp->sigma8_z, parameter[2] }, pk_interp_Scoccimarro_CPT, pp->prec, parameter[3], parameter[4]);
 
  131   else if (pp->Pk_mu_model==
"Scoccimarro_Pezzotta_Gauss" || pp->Pk_mu_model==
"Scoccimarro_Pezzotta_Lorentz") {
 
  132     pk_interp[0] = pp->func_Pk;
 
  133     pk_interp[1] = pp->func_Pk_nonlin;
 
  134     Xi_wedge = 
xi_Wedges(rad, pp->dataset_order, pp->mu_integral_limits, pp->Pk_mu_model, { parameter[0]/pp->sigma8_z, parameter[1]/pp->sigma8_z, parameter[2], parameter[3], parameter[4] }, pk_interp, pp->prec, parameter[5], parameter[6]);
 
  137   else if (pp->Pk_mu_model==
"Scoccimarro_Bel_Gauss" || pp->Pk_mu_model==
"Scoccimarro_Bel_Lorentz") {
 
  138     pk_interp[0] = pp->func_Pk;
 
  139     pk_interp[1] = pp->func_Pk_nonlin;
 
  140     Xi_wedge = 
xi_Wedges(rad, pp->dataset_order, pp->mu_integral_limits, pp->Pk_mu_model, { parameter[0]/pp->sigma8_z, parameter[1]/pp->sigma8_z, parameter[2], parameter[3], parameter[4], parameter[5], parameter[6], parameter[7] }, pk_interp, pp->prec, parameter[8], parameter[9]);
 
  143   else if (pp->Pk_mu_model==
"TNS_Gauss" || pp->Pk_mu_model==
"TNS_Lorentz") {
 
  144     pk_interp_TNS_CPT[0]  = pp->func_Pk_DeltaDelta;
 
  145     pk_interp_TNS_CPT[1]  = pp->func_Pk_DeltaTheta;
 
  146     pk_interp_TNS_CPT[2]  = pp->func_Pk_ThetaTheta;
 
  147     pk_interp_TNS_CPT[3]  = pp->func_Pk_A11;
 
  148     pk_interp_TNS_CPT[4]  = pp->func_Pk_A12;
 
  149     pk_interp_TNS_CPT[5]  = pp->func_Pk_A22;
 
  150     pk_interp_TNS_CPT[6]  = pp->func_Pk_A23;
 
  151     pk_interp_TNS_CPT[7]  = pp->func_Pk_A33;
 
  152     pk_interp_TNS_CPT[8]  = pp->func_Pk_B12;
 
  153     pk_interp_TNS_CPT[9]  = pp->func_Pk_B13;
 
  154     pk_interp_TNS_CPT[10] = pp->func_Pk_B14;
 
  155     pk_interp_TNS_CPT[11] = pp->func_Pk_B22;
 
  156     pk_interp_TNS_CPT[12] = pp->func_Pk_B23;
 
  157     pk_interp_TNS_CPT[13] = pp->func_Pk_B24;
 
  158     pk_interp_TNS_CPT[14] = pp->func_Pk_B33;
 
  159     pk_interp_TNS_CPT[15] = pp->func_Pk_B34;
 
  160     pk_interp_TNS_CPT[16] = pp->func_Pk_B44;
 
  161     Xi_wedge = 
xi_Wedges(rad, pp->dataset_order, pp->mu_integral_limits, pp->Pk_mu_model, { parameter[0]/pp->sigma8_z, parameter[1]/pp->sigma8_z, parameter[2] }, pk_interp_TNS_CPT, pp->prec, parameter[3], parameter[4]);
 
  164   else if (pp->Pk_mu_model==
"eTNS_Gauss" || pp->Pk_mu_model==
"eTNS_Lorentz") {
 
  165     pk_interp_eTNS_CPT[0]  = pp->func_Pk_DeltaDelta;
 
  166     pk_interp_eTNS_CPT[1]  = pp->func_Pk_DeltaTheta;
 
  167     pk_interp_eTNS_CPT[2]  = pp->func_Pk_ThetaTheta;
 
  168     pk_interp_eTNS_CPT[3]  = pp->func_Pk_A11;
 
  169     pk_interp_eTNS_CPT[4]  = pp->func_Pk_A12;
 
  170     pk_interp_eTNS_CPT[5]  = pp->func_Pk_A22;
 
  171     pk_interp_eTNS_CPT[6]  = pp->func_Pk_A23;
 
  172     pk_interp_eTNS_CPT[7]  = pp->func_Pk_A33;
 
  173     pk_interp_eTNS_CPT[8]  = pp->func_Pk_B12;
 
  174     pk_interp_eTNS_CPT[9]  = pp->func_Pk_B13;
 
  175     pk_interp_eTNS_CPT[10] = pp->func_Pk_B14;
 
  176     pk_interp_eTNS_CPT[11] = pp->func_Pk_B22;
 
  177     pk_interp_eTNS_CPT[12] = pp->func_Pk_B23;
 
  178     pk_interp_eTNS_CPT[13] = pp->func_Pk_B24;
 
  179     pk_interp_eTNS_CPT[14] = pp->func_Pk_B33;
 
  180     pk_interp_eTNS_CPT[15] = pp->func_Pk_B34;
 
  181     pk_interp_eTNS_CPT[16] = pp->func_Pk_B44;
 
  182     pk_interp_eTNS_CPT[17] = pp->func_Pk_b2d;
 
  183     pk_interp_eTNS_CPT[18] = pp->func_Pk_b2v;
 
  184     pk_interp_eTNS_CPT[19] = pp->func_Pk_b22;
 
  185     pk_interp_eTNS_CPT[20] = pp->func_Pk_bs2d;
 
  186     pk_interp_eTNS_CPT[21] = pp->func_Pk_bs2v;
 
  187     pk_interp_eTNS_CPT[22] = pp->func_Pk_b2s2;
 
  188     pk_interp_eTNS_CPT[23] = pp->func_Pk_bs22;
 
  189     pk_interp_eTNS_CPT[24] = pp->func_sigma32Pklin;
 
  190     Xi_wedge = 
xi_Wedges(rad, pp->dataset_order, pp->mu_integral_limits, pp->Pk_mu_model, { parameter[0]/pp->sigma8_z, parameter[1]/pp->sigma8_z, parameter[2]/pp->sigma8_z, parameter[3], parameter[6] }, pk_interp_eTNS_CPT, pp->prec, parameter[4], parameter[5]);
 
  193   else ErrorCBL(
"the chosen model ("+pp->Pk_mu_model+
") is not currently implemented!", 
"xiWedges", 
"ModelFunction_TwoPointCorrelation_wedges.cpp");
 
  206   shared_ptr<STR_data_model> pp = static_pointer_cast<STR_data_model>(inputs);
 
  208   vector<double> Xi(rad.size());
 
  213   double alpha_perpendicular = parameter[0];
 
  216   double alpha_parallel = parameter[1];
 
  218   for (
size_t i=0; i<rad.size(); i++) {
 
  219     const int wedge = pp->dataset_order[i];
 
  220     const double rr = rad[i];
 
  222     double mu_min = double(wedge)/pp->nWedges;
 
  223     double mu_max = double(wedge+1)/pp->nWedges;
 
  224     const double delta = (mu_max-mu_min);
 
  226     const double B = parameter[2+wedge];
 
  227     const double A0 = parameter[4+wedge];
 
  228     const double A1 = parameter[6+wedge];
 
  229     const double A2 = parameter[8+wedge];
 
  231     auto integrand = [&] (
const double mu_fid) 
 
  233       return twopt::Xi_polar(rr, mu_fid, alpha_perpendicular, alpha_parallel, pp->func_multipoles);
 
Global functions to model two-point correlation functions of any type.
Functions to model the wedges of the two-point correlation function.
std::vector< std::vector< double > > xi_Wedges(const std::vector< double > rr, const int nWedges, const std::vector< std::vector< double >> mu_integral_limits, const std::string model, const std::vector< double > parameter, const std::vector< std::shared_ptr< glob::FuncGrid >> pk_interp, const double prec=1.e-5, const double alpha_perp=1, const double alpha_par=1.)
the model wedges of the two-point correlation function
std::vector< double > xiWedges(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
the model wedges of the two-point correlation function
std::vector< std::vector< double > > Xi_l(const std::vector< double > rr, const int nmultipoles, const std::string model, const std::vector< double > parameter, const std::vector< std::shared_ptr< glob::FuncGrid >> pk_interp, const double prec=1.e-5, const double alpha_perp=1., const double alpha_par=1.)
the multipole of order l of the two-point correlation function
std::vector< double > xiWedges_BAO(const std::vector< double > rad, const std::shared_ptr< void > inputs, std::vector< double > ¶meter)
return the wedges of the two-point correlation function, intended for anisotropic BAO measurements
double Xi_polar(const double rad_fid, const double mu_fid, const double alpha_perpendicular, const double alpha_parallel, const std::vector< std::shared_ptr< cbl::glob::FuncGrid >> xi_multipoles)
the polar two-point correlation function
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
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