CosmoBolognaLib
Free Software C++/Python libraries for cosmological calculations
Func.h
Go to the documentation of this file.
1 /********************************************************************
2  * Copyright (C) 2010 by Federico Marulli *
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 
34 #ifndef __FUNC__
35 #define __FUNC__
36 
37 #include "RandomNumbers.h"
38 #include "EigenWrapper.h"
39 #include "ChainMesh.h"
40 
41 // ============================================================================================
42 
43 
44 namespace cbl {
45 
46 
51 
74  double interpolated (const double _xx, const std::vector<double> xx, const std::vector<double> yy, const std::string type);
75 
107  double interpolated_2D (const double _x1, const double _x2, const std::vector<double> x1, const std::vector<double> x2, const std::vector<std::vector<double>> yy, const std::string type);
108 
129  std::vector<double> linear_interpolation_3D(const std::vector<double> min, std::vector<double> max, std::vector<int> steps, std::vector<std::vector<std::vector<double>>> func, const std::vector<std::vector<double>> pos);
130 
138  double Filter (const double r, const double rc);
139 
146  double legendre_polynomial (const double mu, const int l);
147 
154  double legendre_polynomial_integral (double mu, void *params);
155 
165  double Legendre_polynomial_mu_average (const int ll, const double mu, const double delta_mu);
166 
176  double Legendre_polynomial_mu_average (const double mu_min, const double mu_max, const int ll);
177 
187  double Legendre_polynomial_theta_average (const double theta_min, const double theta_max, const int ll);
188 
207  double Legendre_polynomial_triangles_average (const double r12_min, const double r12_max, const double r13_min, const double r13_max, const double r23_min, const double r23_max, const int ll, const double rel_err=1.e-5, const double abs_err=1.e-8, const int nevals=100);
208 
224  std::vector<std::vector<double>> Legendre_polynomial_triangles_average (const double r12, const double r13, const double deltaR, const int lMax, const double rel_err=1.e-5, const double abs_err=1.e-8, const int nevals=100);
225 
243  std::complex<double> spherical_harmonics (cbl::CoordinateType coordinate_type, const int l, const int m, const double coord1, const double coord2, const double coord3);
244 
258  std::vector<std::vector<std::complex<double>>> spherical_harmonics (const int lmax, const double xx, const double yy, const double zz);
259 
273  std::vector<std::complex<double>> spherical_harmonics_array (const int lmax, const double xx, const double yy, const double zz);
274 
280  double j0 (const double xx);
281 
287  double j2 (const double xx);
288 
294  double j4 (const double xx);
295 
302  double jl (const double xx, const int order);
303 
312  double j0_distance_average (const double kk, const double r_down, const double r_up);
313 
323  double j2_distance_average (const double kk, const double r_down, const double r_up);
324 
332  double jl_spherical_integrand (double rr, void *params);
333 
342  double jl_distance_average (const double kk, const int order, const double r_down, const double r_up);
343 
352  double trapezoid_integration (const std::vector<double> xx, const std::vector<double> yy);
353 
368  double coupling_3j (const int l, const int l_prime, const int l2);
369 
371  void gauleg (const double, const double, double *, double *, const int);
373 
374 
375  // ============================================================================================
376 
392  void read_vector (const std::string file_vector, std::vector<double> &xx, std::vector<double> &vector, const std::vector<int> col={});
393 
411  void read_matrix (const std::string file_matrix, std::vector<double> &xx, std::vector<double> &yy, std::vector<std::vector<double>> &matrix, const std::vector<int> col={});
412 
418  double determinant_matrix (const std::vector<std::vector<double>> mat);
419 
448  void invert_matrix (const std::vector<std::vector<double>> mat, std::vector<std::vector<double>> &mat_inv, const double prec=1.e-10, const int Nres=-1);
449 
483  void invert_matrix (const std::vector<std::vector<double>> mat, std::vector<std::vector<double>> &mat_inv, const int i1, const int i2, const double prec=1.e-10, const int Nres=-1);
484 
496  void covariance_matrix (const std::vector<std::vector<double>> mat, std::vector<std::vector<double>> &cov, const bool JK=false);
497 
513  void covariance_matrix (const std::vector<std::string> file, std::vector<double> &rad, std::vector<double> &mean, std::vector<std::vector<double>> &cov, const bool JK=false);
514 
528  void covariance_matrix (const std::vector<std::string> file, const std::string covariance_matrix_file, const bool JK=0);
529 
555  void read_invert_covariance (const std::string filecov, std::vector<std::vector<double>> &cov, std::vector<std::vector<double>> &cov_inv, const size_t i1, const size_t i2, const double prec=1.e-10, const int Nres=-1);
556 
576  double number_from_distribution (const std::vector<double> xx, const std::vector<double> fx, const double xmin, const double xmax, const int seed);
577 
600  std::vector<double> vector_from_distribution (const int nRan, const std::vector<double> xx, const std::vector<double> fx, const double xmin, const double xmax, const int seed);
601 
617  std::vector<size_t> minimum_maximum_indexes (const std::vector<double> xx, const double x_min, const double x_max);
618 
631  double get_mu (const double r1, const double r2, const double r3);
632 
642  double window_function (const double x, const double min=-1, const double max=1);
643 
652  double binomial_coefficient(const int n, const int m);
653 
667  double clebsh_gordan(const int j1, const int j2, const int m1, const int m2, const int j3, const int m3);
668 
676  template <typename T>
677  double sgn(T val);
678 
691  double wigner3j_auxA(double l1, double l2, double l3, double m1, double m2, double m3);
692 
705  double wigner3j_auxB(double l1, double l2, double l3, double m1, double m2, double m3);
706 
718  std::vector<double> wigner3j(double l2, double l3, double m1, double m2, double m3);
719 
732  double wigner3j(double l1, double l2, double l3, double m1, double m2, double m3);
733 
746  double wigner_3j(int j1, int j2, int j3, int m1, int m2, int m3);
747 
761  double wigner_6j(const int j1, const int j2, const int j3, const int j4, const int j5, const int j6);
762 
796  double three_spherical_bessel_integral (const double r1, const double r2, const double r3, const int L1, const int L2, const int L3);
797 
813  double average_three_spherical_bessel_integral (const double r1_min, const double r1_max, const double r2_min, const double r2_max, const double r3, const int L1, const int L2, const int L3);
814 
831  std::vector<double> generate_correlated_data (const std::vector<double> mean, const std::vector<std::vector<double>> covariance, const int idum =213123);
832 
851  std::vector<std::vector<double>> generate_correlated_data (const int nExtractions, const std::vector<double> mean, const std::vector<std::vector<double>> covariance, const int idum=12312);
852 
866  template <typename T>
867  void vectorReadFromBinary (std::ifstream &fin, std::vector< T > &vec, size_t NN)
868  {
869  for (size_t ii = 0; ii<NN; ii++) {
870  T var;
871  fin.read((char *)&var, sizeof(T));
872  vec.push_back(var);
873  }
874  }
875 
877 
878 
879  // ============================================================================================
880 
881 
886 
898  double Average (const std::vector<double> vect);
899 
911  double Average (const std::vector<double> vect, const std::vector<double> weight);
912 
923  double Sigma (const std::vector<double> vect);
924 
936  double Sigma (const std::vector<double> vect, const std::vector<double> weight);
937 
945  std::vector<double> Quartile (const std::vector<double> Vect);
946 
958  void Moment (const std::vector<double> data, double &ave, double &adev, double &sdev, double &var, double &skew, double &curt);
959 
961 
962 
963  // ============================================================================================
964 
965 
970 
971 
980  template <typename T>
981  T Pol2 (T xx, std::shared_ptr<void> pp, std::vector<double> par)
982  {
983  (void)pp;
984  return par[0]*pow(xx,2)+par[1]*xx+par[2];
985  }
986 
996  template <typename T>
997  T Pol3 (T xx, void *pp, std::vector<double> par)
998  {
999  return par[0]*pow(xx,3)+par[1]*pow(xx,2)+par[2]*xx+par[3];
1000  }
1001 
1007  inline std::vector<double> linearfit (const double xx)
1008  {
1009  std::vector<double> vect(2);
1010  vect[0] = 1.;
1011  for (int i=1; i<2; i++) vect[i] = xx*vect[i-1];
1012  return vect;
1013  }
1014 
1020  inline std::vector<double> quadratic (const double xx)
1021  {
1022  std::vector<double> vect(3);
1023  vect[0] = 1.;
1024  for (int i=1; i<3; i++) vect[i] = xx*vect[i-1];
1025  return vect;
1026  }
1027 
1034  inline std::vector<double> cubicfit (const double xx)
1035  {
1036  std::vector<double> vect(4);
1037  vect[0] = 1.;
1038  for (int i=1; i<4; i++) vect[i] = xx*vect[i-1];
1039  return vect;
1040  }
1041 
1052  template <typename T>
1053  T identity (T xx, std::shared_ptr<void> pp, std::vector<double> par)
1054  {
1055  (void)xx; (void)pp; (void)par;
1056  return 1.;
1057  }
1058 
1070  template <typename T>
1071  T rectangular (T xx, std::shared_ptr<void> pp, std::vector<double> par)
1072  {
1073  if (xx>par[0] && par[1]>xx)
1074  return 1./(par[1]-par[0]);
1075  else return 0.;
1076  }
1077 
1078 
1087  double closest_probability (double xx, std::shared_ptr<void> pp, std::vector<double> par);
1088 
1097  double distribution_probability (double xx, std::shared_ptr<void> pp, std::vector<double> par);
1098 
1106  double chainMeshInterpolate (std::vector<double> xx, std::shared_ptr<void> pars);
1107 
1115  double multivariateGaussian (std::vector<double> xx, std::shared_ptr<void> pars);
1116 
1126  template <typename T>
1127  T gaussian (T xx, std::shared_ptr<void> pp, std::vector<double> par)
1128  {
1129  (void)pp;
1130  T gauss = 1./(par[1]*sqrt(2.*par::pi))*exp(-pow(xx-par[0],2)/(2.*par[1]*par[1]));
1131  return (par.size()==2) ? gauss : gauss*par[2];
1132  }
1133 
1142  template <typename T>
1143  T poisson (T xx, std::shared_ptr<void> pp, std::vector<double> par)
1144  {
1145  (void)pp;
1146  T pois = exp(int(xx) * log(par[0]) - lgamma(int(xx) + 1.0) - par[0]);
1147  return pois;
1148  }
1149 
1156  template <typename T>
1157  T maxwellian_distr (const T vel, const T sigma)
1158  {
1159  return sqrt(54./par::pi)*pow(vel/sigma,2)*exp(-1.5*pow(vel/sigma,2))/sigma;
1160  }
1161 
1169  template <typename T>
1170  T powerlaw (const T xx, const T x0, const T gamma)
1171  {
1172  return pow(xx/x0,-gamma);
1173  }
1174 
1183  template <typename T>
1184  T double_powerlaw (const T xx, const T x0, const T alpha, const T beta)
1185  {
1186  return pow(2.,beta-alpha)/(pow(xx/x0,alpha)*pow(1.+xx/x0,beta-alpha));
1187  }
1188 
1194  template <typename T>
1195  T TopHat_WF (const T kR)
1196  {
1197  return 3.*(sin(kR)-kR*cos(kR))/pow(kR,3);
1198  }
1199 
1207  template <typename T>
1208  T TopHat_WF_D1 (const T kR)
1209  {
1210  return (3.*(kR*kR-3.)*sin(kR)+9.*kR*cos(kR))*pow(kR, -4);
1211  }
1212 
1219  template <typename T>
1220  T Radius (const T Mass, const T Rho)
1221  {
1222  return pow(3.*Mass/(4.*par::pi*Rho),1./3.);
1223  }
1224 
1230  template <typename T>
1231  T volume_sphere (const T RR)
1232  {
1233  return 4./3.*par::pi*pow(RR, 3);
1234  }
1235 
1242  template <typename T>
1243  T Mass (const T RR, const T Rho)
1244  {
1245  return 4./3.*par::pi*Rho*pow(RR,3);
1246  }
1247 
1257  template <typename T>
1258  T radial_velocity (const T vx, const T vy, const T vz, const T ra, const T dec)
1259  {
1260  return vx*cos(dec)*sin(ra)+vy*cos(dec)*cos(ra)+vz*sin(dec);
1261  }
1262 
1268  template <typename T>
1269  T P_2 (const T x)
1270  {
1271  return (3.*x*x-1.)*0.5;
1272  }
1273 
1279  template <typename T>
1280  T P_4 (const T x)
1281  {
1282  return (35.*x*x*x*x-30.*x*x+3.)*0.125;
1283  }
1284 
1290  template <typename T>
1291  T P_6 (const T x)
1292  {
1293  return (231.*x*x*x*x*x*x-315.*x*x*x*x+105.*x*x-5.)*0.0625;
1294  }
1295 
1297 
1298 
1299  // ============================================================================================
1300 
1301 
1306 
1320  void measure_var_function (const std::vector<double> var, const int bin, const double V_min, const double V_max, const double Volume, std::vector<double> &Var, std::vector<double> &Phi, std::vector<double> &err);
1321 
1347  void distribution (std::vector<double> &xx, std::vector<double> &fx, std::vector<double> &err, const std::vector<double> FF, const std::vector<double> WW, const int nbin, const bool linear=true, const std::string file_out=par::defaultString, const double fact=1., const double V1=par::defaultDouble, const double V2=par::defaultDouble, const std::string bin_type="Linear", const bool conv=false, const double sigma=0.);
1348 
1357  double MC_Int (double func(const double), const double x1, const double x2, const int seed=3213);
1358 
1368  double MC_Int (double func(const double, const double AA), const double AA, const double x1, double x2, const int seed=3213);
1369 
1383  double MC_Int (double func(const double, const double AA, const double BB, const double CC, const double DD, const double EE), const double AA, const double BB, const double CC, const double DD, const double EE, const double x1, const double x2, const int seed=3213);
1384 
1385 
1386  // ============================================================================================
1387 
1388 
1403  void bin_function (const std::string file_grid, double func(double, void*), void *par, const int bin, const double x_min, const double x_max, const std::string binning, std::vector<double> &xx, std::vector<double> &yy);
1404 
1422  void bin_function_2D (const std::string file_grid, double func(double *, size_t, void *), void * par, const int bin, const double x1_min, const double x1_max, const double x2_min, const double x2_max, const std::string binning, std::vector<double> &xx1, std::vector<double> &xx2, std::vector<std::vector<double>> &yy);
1423 
1425  double func_grid_lin (double, void *);
1426  double func_grid_loglin (double, void *);
1427  double func_grid_log (double, void *);
1428  double func_grid_lin_2D (double *, size_t, void *);
1429  double func_grid_loglin_2D (double *, size_t, void *);
1430  double func_grid_log_2D (double *, size_t, void *);
1432 
1433 
1452  //
1453  void convolution (const std::vector<double> f1, const std::vector<double> f2, std::vector<double> &res, const double deltaX);
1454 
1456 
1457 
1458  // ============================================================================================
1459 
1460 
1465 
1472  double degrees (const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_radians_);
1473 
1480  double radians (const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_degrees_);
1481 
1488  double arcseconds (const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_radians_);
1489 
1496  double arcminutes (const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_radians_);
1497 
1505  double converted_angle (const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_radians_, const CoordinateUnits outputUnits=CoordinateUnits::_degrees_);
1506 
1518  void polar_coord (const double XX, const double YY, const double ZZ, double &ra, double &dec, double &dd);
1519 
1531  void cartesian_coord (const double ra, const double dec, const double dd, double &XX, double &YY, double &ZZ);
1532 
1544  void polar_coord (const std::vector<double> XX, const std::vector<double> YY, const std::vector<double> ZZ, std::vector<double> &ra, std::vector<double> &dec, std::vector<double> &dd);
1545 
1557  void cartesian_coord (const std::vector<double> ra, const std::vector<double> dec, const std::vector<double> dd, std::vector<double> &XX, std::vector<double> &YY, std::vector<double> &ZZ);
1558 
1571  double Euclidean_distance (const double x1, const double x2, const double y1, const double y2, const double z1, const double z2);
1572 
1584  double perpendicular_distance (const double ra1, const double ra2, const double dec1, const double dec2, const double d1, const double d2);
1585 
1599  double angular_distance (const double x1, const double x2, const double y1, const double y2, const double z1, const double z2);
1600 
1612  double haversine_distance (const double ra1, const double ra2, const double dec1, const double dec2);
1613 
1614 
1615  /* ======== Alfonso Veropalumbo ======== */
1616 
1628  void sdss_atbound (double &angle, const double minval, const double maxval);
1629 
1639  void sdss_atbound2 (double &theta, double &phi);
1640 
1655  void eq2sdss (const std::vector<double> ra, const std::vector<double> dec, std::vector<double> &lambda, std::vector<double> &eta);
1656 
1670  void sdss2eq (const std::vector<double> lambda, const std::vector<double> eta, std::vector<double> &ra, std::vector<double> &dec);
1671 
1685  void sdss_stripe (const std::vector<double> eta, const std::vector<double> lambda, std::vector<int> &stripe, std::vector<int> &str_u);
1686 
1687 
1689 
1690 
1691  // ============================================================================================
1692 
1693 
1698 
1699 
1725  double xi_from_Pk (const double rr, const std::vector<double> lgkk, const std::vector<double> lgPk, const double k_min=0., const double k_max=100., const double aa=0., const double prec=1.e-2);
1726 
1754  double xi_from_Pk (const double rr, const std::string file, const int c1=1, const int c2=2, const double k_min=0., const double k_max=100., const double aa=0., const double prec=1.e-2);
1755 
1776  double Pk_from_xi (const double kk, const std::vector<double> lgrr, const std::vector<double> lgxi, const double r_min=0.03, const double r_max=100.);
1777 
1801  double Pk_from_xi (const double kk, const std::string file, const int c1=1, const int c2=2, const double r_min=0.03, const double r_max=100.);
1802 
1803  namespace glob {
1805  double func_xi_GSL (double, void *);
1806  double func_SSM_GSL (double, void *);
1808  }
1809 
1834  double wp (const double rp, const std::vector<double> rr, const std::vector<double> xi, const double r_max=100.);
1835 
1859  double wp (const double rp, const std::string file, const double r_max=100.);
1860 
1901  double sigmaR (const double RR, const int corrType, const std::vector<double> rr, const std::vector<double> corr);
1902 
1918  double xi_projected_powerlaw (const double rp, const double r0, const double gamma);
1919 
1935  double xi_ratio (const double beta);
1936 
1954  double xi_ratio (const double f_sigma8, const double bias_sigma8);
1955 
1957 
1972  double xi_ratio (double xx, std::shared_ptr<void> pp, std::vector<double> par); // for the chi2 function
1974 
1991  double error_xi_ratio (const double beta, const double error_beta);
1992 
2020  double barred_xi_direct (const double RR, const std::vector<double> rr, const std::vector<double> xi, const double rAPP=0., const double r0=-1., const double gamma=1.);
2021 
2049  double barred_xi__direct (const double RR, const std::vector<double> rr, const std::vector<double> xi, const double rAPP=0., const double r0=-1., const double gamma=1.);
2050 
2076  double barred_xi_ (const double RR, const std::vector<double> rr, const std::vector<double> xi, const double rAPP=0., const double r0=-1., const double gamma=1.);
2077 
2103  double barred_xi__ (const double RR, const std::vector<double> rr, const std::vector<double> xi, const double rAPP=0., const double r0=-1., const double gamma=1.);
2104 
2120  double multipole_xi0 (const int indexR, const std::vector<double> mu, const std::vector<std::vector<double>> xi);
2121 
2137  double multipole_xi2 (const int indexR, const std::vector<double> mu, const std::vector<std::vector<double>> xi);
2138 
2154  double multipole_xi4 (const int indexR, const std::vector<double> mu, const std::vector<std::vector<double>> xi);
2155 
2169  double error_multipole_xi0 (const int indexR, const std::vector<double> mu, const std::vector<std::vector<double>> error);
2170 
2184  double error_multipole_xi2 (const int indexR, const std::vector<double> mu, const std::vector<std::vector<double>> error);
2185 
2199  double error_multipole_xi4 (const int indexR, const std::vector<double> mu, const std::vector<std::vector<double>> error);
2200 
2213  double multipole_xi0 (const double ss, const std::vector<double> rp, const std::vector<double> pi, const std::vector<std::vector<double>> xi, const double delta_s);
2214 
2227  double multipole_xi2 (const double ss, const std::vector<double> rp, const std::vector<double> pi, const std::vector<std::vector<double>> xi, const double delta_s);
2228 
2241  double multipole_xi4 (const double ss, const std::vector<double> rp, const std::vector<double> pi, const std::vector<std::vector<double>> xi, const double delta_s);
2242 
2253  double error_multipole_xi0 (const double ss, const std::vector<double> rp, const std::vector<double> pi, const std::vector<std::vector<double>> error, const double delta_s);
2254 
2265  double error_multipole_xi2 (const double ss, const std::vector<double> rp, const std::vector<double> pi, const std::vector<std::vector<double>> error, const double delta_s);
2266 
2277  double error_multipole_xi4 (const double ss, const std::vector<double> rp, const std::vector<double> pi, const std::vector<std::vector<double>> error, const double delta_s);
2278 
2280 
2291  double multipoles (double rr, std::shared_ptr<void> pp, std::vector<double> par);
2293 
2305  double multipole_xi0_model (const double beta, const double xi_real);
2306 
2322  double multipole_xi0_model (const double f_sigma8, const double bias_sigma8, const double sigma8z, const double xi_matter);
2323 
2325 
2335  double multipole_xi0_model (double xx, std::shared_ptr<void> pp, std::vector<double> par);
2337 
2351  double multipole_xi2_model (const double beta, const double xi_real, const double xi_);
2352 
2368  double multipole_xi4_model (const double beta, const double xi_real, const double xi_, const double xi__);
2369 
2371  // theoretical model for the linear xi(rp,pi)
2372  double xi2D_lin_model (double, double, std::shared_ptr<void> , std::vector<double>);
2374 
2396  double xi2D_lin_model (const double beta, const double bias, const double xi_real, const double xi_, const double xi__, const double P_2, const double P_4);
2397 
2433  double xi2D_lin_model (const double rp, const double pi, const double beta, const double bias, const std::vector<double> rad_real, const std::vector<double> xi_real, const std::vector<double> xi_, const std::vector<double> xi__, const int index=-1, const bool bias_nl=0, const double bA=0.);
2434 
2436  // dispersion model for xi(rp,pi)
2437  double xi2D_model (double, double, std::shared_ptr<void>, std::vector<double>);
2439 
2491  double xi2D_model (const double rp, const double pi, const double beta, const double bias, const double sigmav, const std::vector<double> rad_real, const std::vector<double> xi_real, const std::vector<double> xi_, const std::vector<double> xi__, const double var, const int FV, int index=-1, const bool bias_nl=0, const double bA=0., const double v_min=-3000., const double v_max=3000., const int step_v=500);
2492 
2523  double xi2D_lin_model (const double rp, const double pi, const double beta, const double bias, const std::shared_ptr<void> funcXiR, const std::shared_ptr<void> funcXiR_, const std::shared_ptr<void> funcXiR__, const bool bias_nl=0, const double bA=0.);
2524 
2569  double xi2D_model (const double rp, const double pi, const double beta, const double bias, const double sigmav, const std::shared_ptr<void> funcXiR, const std::shared_ptr<void> funcXiR_, const std::shared_ptr<void> funcXiR__, const double var, const int FV, const bool bias_nl=0, const double bA=0., const double v_min=-3000., const double v_max=3000., const int step_v=500);
2570 
2583  double f_v (const double vel, const double sigmav, const int FV);
2584 
2606  double f_v (const double vel, const double rp, const double pi, const double var, const double sigmav0, const double cmu, const double cs1, const double cs2);
2607 
2619  double f_star (const double xx, const double f_g, const double k_star);
2620 
2635  double b_nl (const double rr, const double bA, const double bB=10., const double bC=4.);
2636 
2655  double relative_error_beta (const double bias, const double Volume, const double density);
2656 
2665  double Pkl_Kaiser_integrand(const double mu, void *parameters);
2666 
2673  double sigma2_integrand (const double mu, void *parameters);
2674 
2681  double covariance_XiMultipoles_integrand (const double kk, void *parameters);
2682 
2689  double XiMultipoles_integrand (const double kk, void *parameters);
2690 
2698  double XiMultipoles_from_Xi2D_integrand (const double mu, void *parameters);
2699 
2707  double Pkl_Kaiser_integral(const int order, const double bias, const double f);
2708 
2718  std::vector<double> Pk0_Kaiser(const std::vector<double> kk, const std::vector<double> Pk, const double bias, const double f);
2719 
2729  std::vector<double> Pk2_Kaiser(const std::vector<double> kk, const std::vector<double> Pk, const double bias, const double f);
2730 
2740  std::vector<double> Pk4_Kaiser(const std::vector<double> kk, const std::vector<double> Pk, const double bias, const double f);
2741 
2751  std::vector<std::vector<double>> Pkl_Kaiser(const std::vector<int> orders, const std::vector<double> kk, const std::vector<double> Pk, const double bias, const double f);
2752 
2765  std::vector<double> Xi0(const std::vector<double> r, const std::vector<double> kk, const std::vector<double> Pk0, const double k_cut=0.7, const double cut_pow=2, const int IntegrationMethod = 1);
2766 
2779  std::vector<double> Xi2 (const std::vector<double> rr, const std::vector<double> kk, const std::vector<double> Pk2, const double k_cut=0.58, const double cut_pow=4, const int IntegrationMethod = 1);
2780 
2793  std::vector<double> Xi4 (const std::vector<double> rr, const std::vector<double> kk, const std::vector<double> Pk4, const double k_cut=0.6, const double cut_pow=2, const int IntegrationMethod = 1);
2794 
2809  std::vector<std::vector<double>> Xi02_AP (const double alpha_perpendicular, const double alpha_parallel, const std::vector<double> rr, const std::vector<double> rl, const std::vector<double> Xi0, const std::vector<double> Xi2);
2810 
2826  std::vector<std::vector<double>> Xi024_AP (const double alpha_perpendicular, const double alpha_parallel, const std::vector<double> rr, const std::vector<double> rl, const std::vector<double> Xi0, const std::vector<double> Xi2, const std::vector<double> Xi4);
2827 
2843  std::vector<std::vector<double>> XiWedges_AP (const std::vector<double> mu_min, const std::vector<double> delta_mu, const double alpha_perpendicular, const double alpha_parallel, const std::vector<double> rr, const std::vector<double> rl, const std::vector<double> Xi0, const std::vector<double> Xi2, const std::vector<double> Xi4);
2844 
2870  std::vector< std::vector<double>> sigma2_k (const double nObjects, const double Volume, const std::vector<double> kk, const std::vector<std::vector<double>> Pk_multipoles, const std::vector<int> orders);
2871 
2900  void Covariance_XiMultipoles (std::vector<double> &rr, std::vector<std::vector<double>> &covariance, const int nbins, const double rMin, const double rMax, const double nObjects, const double Volume, const std::vector<double> kk, const std::vector<std::vector<double>> Pk_multipoles, const std::vector<int> orders, const cbl::BinType bin_type=cbl::BinType::_linear_);
2901 
2938  void Covariance_XiWedges (std::vector<double> &rr, std::vector<std::vector<double>> &covariance, const std::vector<double> mu, const std::vector<double> delta_mu, const int nbins, const double rMin, const double rMax, const double nObjects, const double Volume, const std::vector<double> kk, const std::vector<std::vector<double>> Pk_multipoles, const std::vector<int> orders, const cbl::BinType bin_type=cbl::BinType::_linear_);
2939 
2941 
2942 
2943 // ============================================================================================
2944 
2945 
2953  namespace glob {
2954 
2955  struct STR_grid
2956  {
2957  std::vector<double> _xx, _yy;
2958  };
2959 
2960  struct STR_grid_2D
2961  {
2962  std::vector<double> _xx1, _xx2;
2963  std::vector<std::vector<double>> _yy;
2964  };
2965 
2966  struct STR_xi0_model
2967  {
2968  double bias_sigma8;
2969  double sigma8z;
2970  std::vector<double> xi_matter;
2971  };
2972 
2973  struct STR_xi2D_model
2974  {
2975  std::vector<double> rp, pi, xi_real, xi_, xi__, P2, P4, vel;
2976  std::vector<int> lim_index_fit, type;
2977  int step_v, FV, dim;
2978  double delta_v;
2979  bool bias_nl;
2980  };
2981 
2982  struct STR_xi
2983  {
2984  double rr, aa;
2985  std::vector<double> lgkk, lgPk;
2986  };
2987 
2988  struct STR_SSM
2989  {
2990  int unit;
2991  double hh, mass, rho, n_spec;
2992  std::vector<double> lgkk, lgPk;
2993  };
2994 
2995  struct STR_jl_distance_average
2996  {
2997  int order;
2998  double k;
2999  };
3000 
3001  struct STR_Pl_mu_integral
3002  {
3003  int order;
3004  };
3005 
3006  struct STR_Pkl_Kaiser_integrand
3007  {
3008  int l;
3009  double Pk, bias, f;
3010  };
3011 
3012  struct STR_closest_probability
3013  {
3014  std::vector<double> values;
3015  std::vector<double> weights;
3016  };
3017 
3018  struct STR_distribution_probability
3019  {
3020  std::shared_ptr<cbl::glob::FuncGrid> func;
3021  };
3022 
3023  struct STR_chainMeshInterpolate
3024  {
3025  cbl::chainmesh::ChainMesh ChainMesh;
3026  int DistNum;
3027  };
3028 
3029  struct STR_multivariateGaussian
3030  {
3031  Eigen::VectorXd MeanVec;
3032  Eigen::MatrixXd CovMat;
3033  };
3034 
3035  struct STR_sigma2_integrand
3036  {
3037  int l1, l2;
3038  double density_inv,kk;
3039  std::vector<int> orders;
3040  std::vector<FuncGrid> Pk_multipoles_interp;
3041  };
3042 
3043  struct STR_XiMultipoles_integrand
3044  {
3045  double r;
3046  int l;
3047  FuncGrid *Pkl;
3048  double k_cut;
3049  double cut_pow;
3050  };
3051 
3052  struct STR_xi2D_smu_integrand
3053  {
3054  FuncGrid *func;
3055  int order;
3056  };
3057 
3058  struct STR_covariance_XiMultipoles_integrand
3059  {
3060  FuncGrid *s2, *jl1r1, *jl2r2;
3061  };
3062  }
3063 
3064 
3069 
3083  std::vector<std::vector<double>> Xi02_AP (const double alpha_perpendicular, const double alpha_parallel, const std::vector<double> rr, const std::shared_ptr<glob::FuncGrid> xi0_interp, const std::shared_ptr<glob::FuncGrid> xi2_interp);
3084 
3099  std::vector< std::vector<double>> Xi024_AP (const double alpha_perpendicular, const double alpha_parallel, const std::vector<double> rr, const std::shared_ptr<glob::FuncGrid> xi0_interp, const std::shared_ptr<glob::FuncGrid> xi2_interp, const std::shared_ptr<glob::FuncGrid> xi4_interp);
3100 
3115  std::vector<std::vector<double>> XiWedges_AP (const std::vector<double> mu_min, const std::vector<double> delta_mu, const double alpha_perpendicular, const double alpha_parallel, const std::vector<double> rr, const std::shared_ptr<glob::FuncGrid> xi0_interp, const std::shared_ptr<glob::FuncGrid> xi2_interp, const std::shared_ptr<glob::FuncGrid> xi4_interp);
3116 
3118 
3119 }
3120 
3121 #endif
Implementation of the chain-mesh data structure.
functions that wrap Eigen routines
Class functions used to generate random numbers.
The class ChainMesh.
Definition: ChainMesh.h:60
static const std::string defaultString
default std::string value
Definition: Constants.h:336
static const double defaultDouble
default double value
Definition: Constants.h:348
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
Var
the catalogue variables
Definition: Catalogue.h:70
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
The global namespace of the CosmoBolognaLib
Definition: CAMB.h:38
void distribution(std::vector< double > &xx, std::vector< double > &fx, std::vector< double > &err, const std::vector< double > FF, const std::vector< double > WW, const int nbin, const bool linear=true, const std::string file_out=par::defaultString, const double fact=1., const double V1=par::defaultDouble, const double V2=par::defaultDouble, const std::string bin_type="Linear", const bool conv=false, const double sigma=0.)
derive and store the number distribution of a given std::vector
Definition: Func.cpp:1654
void sdss_atbound(double &angle, const double minval, const double maxval)
check if ra coordinate is inside the boundaries
Definition: Func.cpp:1347
double MC_Int(double func(const double), const double x1, const double x2, const int seed=3213)
simple Monte Carlo integration of f(x)
Definition: Func.cpp:295
double sigmaR(const double RR, const int corrType, const std::vector< double > rr, const std::vector< double > corr)
the rms mass fluctuation within a given radius
Definition: FuncXi.cpp:227
void vectorReadFromBinary(std::ifstream &fin, std::vector< T > &vec, size_t NN)
reads a vector from a binary file
Definition: Func.h:867
T maxwellian_distr(const T vel, const T sigma)
the Maxwellian distribution
Definition: Func.h:1157
double sigma2_integrand(const double mu, void *parameters)
integrand of the 2d power spectrum to obtain sigma^2(k)
std::vector< double > Pk0_Kaiser(const std::vector< double > kk, const std::vector< double > Pk, const double bias, const double f)
function to obtain the linear RSD power spectrum monopole
std::string conv(const T val, const char *fact)
convert a number to a std::string
Definition: Kernel.h:903
double legendre_polynomial_integral(double mu, void *params)
the order l Legendre polynomial integrand
Definition: Func.cpp:1795
double Euclidean_distance(const double x1, const double x2, const double y1, const double y2, const double z1, const double z2)
the Euclidean distance in 3D relative to the origin (0,0,0), i.e. the Euclidean norm
Definition: Func.cpp:250
double barred_xi_direct(const double RR, const std::vector< double > rr, const std::vector< double > xi, const double rAPP=0., const double r0=-1., const double gamma=1.)
the barred correlation function
Definition: FuncXi.cpp:331
void read_matrix(const std::string file_matrix, std::vector< double > &xx, std::vector< double > &yy, std::vector< std::vector< double >> &matrix, const std::vector< int > col={})
read a matrix from file
Definition: Func.cpp:612
double error_multipole_xi2(const int indexR, const std::vector< double > mu, const std::vector< std::vector< double >> error)
error on xi2(s) from ξ(r,μ)
double Legendre_polynomial_mu_average(const int ll, const double mu, const double delta_mu)
the average of the Legendre polynomial of the l-th order over the mu range
Definition: Func.cpp:1806
double multivariateGaussian(std::vector< double > xx, std::shared_ptr< void > pars)
the multivariate Gaussian function
Definition: Func.cpp:79
std::vector< std::vector< double > > XiWedges_AP(const std::vector< double > mu_min, const std::vector< double > delta_mu, const double alpha_perpendicular, const double alpha_parallel, const std::vector< double > rr, const std::vector< double > rl, const std::vector< double > Xi0, const std::vector< double > Xi2, const std::vector< double > Xi4)
function to obtain the 2pcf wedges
double Average(const std::vector< double > vect)
the average of a std::vector
Definition: Func.cpp:870
CoordinateType
the coordinate type
Definition: Kernel.h:624
double error_multipole_xi4(const int indexR, const std::vector< double > mu, const std::vector< std::vector< double >> error)
error on xi4(s) from ξ(r,μ)
double Pkl_Kaiser_integral(const int order, const double bias, const double f)
function to obtain the Kaiser factor
T Mass(const T RR, const T Rho)
the mass of a sphere of a given radius and density
Definition: Func.h:1243
T volume_sphere(const T RR)
the volume of a sphere of a given radius
Definition: Func.h:1231
double j2(const double xx)
the l=2 spherical Bessel function
Definition: Func.cpp:2048
std::vector< std::vector< double > > Xi02_AP(const double alpha_perpendicular, const double alpha_parallel, const std::vector< double > rr, const std::vector< double > rl, const std::vector< double > Xi0, const std::vector< double > Xi2)
function to obtain the monopole and quadrupole of the two point correlation function
double j2_distance_average(const double kk, const double r_down, const double r_up)
the distance average l=2 spherical Bessel function this function is used to obtain the analytic twop ...
Definition: Func.cpp:2087
double multipole_xi0(const int indexR, const std::vector< double > mu, const std::vector< std::vector< double >> xi)
xi0(s) from ξ(r,μ)
double chainMeshInterpolate(std::vector< double > xx, std::shared_ptr< void > pars)
a multidimension interpolator
Definition: Func.cpp:68
std::vector< double > Xi2(const std::vector< double > rr, const std::vector< double > kk, const std::vector< double > Pk2, const double k_cut=0.58, const double cut_pow=4, const int IntegrationMethod=1)
function to obtain the two point correlation function quadrupole
T Radius(const T Mass, const T Rho)
the radius of a sphere of a given mass and density
Definition: Func.h:1220
std::vector< std::complex< double > > spherical_harmonics_array(const int lmax, const double xx, const double yy, const double zz)
the spherical harmonics up to
Definition: Func.cpp:2009
double barred_xi__(const double RR, const std::vector< double > rr, const std::vector< double > xi, const double rAPP=0., const double r0=-1., const double gamma=1.)
the double barred correlation function
Definition: FuncXi.cpp:412
double barred_xi_(const double RR, const std::vector< double > rr, const std::vector< double > xi, const double rAPP=0., const double r0=-1., const double gamma=1.)
the barred correlation function
Definition: FuncXi.cpp:392
double haversine_distance(const double ra1, const double ra2, const double dec1, const double dec2)
the haversine angular separation
Definition: Func.cpp:286
double converted_angle(const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_radians_, const CoordinateUnits outputUnits=CoordinateUnits::_degrees_)
conversion to angle units
Definition: Func.cpp:192
double multipole_xi0_model(const double beta, const double xi_real)
the model multipole ξ0 of the two-point correlation function
T rectangular(T xx, std::shared_ptr< void > pp, std::vector< double > par)
the rectangular distribution
Definition: Func.h:1071
double xi_projected_powerlaw(const double rp, const double r0, const double gamma)
the projected correlation function, wp(rp), computed by modelling the two-point correlation function,...
Definition: FuncXi.cpp:278
double f_v(const double vel, const double sigmav, const int FV)
pairwise velocity distribution
Definition: FuncXi.cpp:616
double Legendre_polynomial_triangles_average(const double r12_min, const double r12_max, const double r13_min, const double r13_max, const double r23_min, const double r23_max, const int ll, const double rel_err=1.e-5, const double abs_err=1.e-8, const int nevals=100)
the average of the Legendre polynomial of the l-th order over the
Definition: Func.cpp:1836
double jl_spherical_integrand(double rr, void *params)
the generic integrand to obtain the distance average spherical Bessel function of order l
Definition: Func.cpp:2099
double angular_distance(const double x1, const double x2, const double y1, const double y2, const double z1, const double z2)
the angular separation in 3D
Definition: Func.cpp:277
double XiMultipoles_integrand(const double kk, void *parameters)
integrand to obtain covariance for the 2PCF multipoles
double interpolated_2D(const double _x1, const double _x2, const std::vector< double > x1, const std::vector< double > x2, const std::vector< std::vector< double >> yy, const std::string type)
2D interpolation
Definition: Func.cpp:502
double Legendre_polynomial_theta_average(const double theta_min, const double theta_max, const int ll)
the average of the Legendre polynomial of the l-th order over the range
Definition: Func.cpp:1827
T identity(T xx, std::shared_ptr< void > pp, std::vector< double > par)
the Identity function
Definition: Func.h:1053
double relative_error_beta(const double bias, const double Volume, const double density)
estimated relative error on
Definition: Func.cpp:1072
T TopHat_WF(const T kR)
the top-hat window function
Definition: Func.h:1195
void cartesian_coord(const double ra, const double dec, const double dd, double &XX, double &YY, double &ZZ)
conversion from polar coordinates to Cartesian coordinates
Definition: Func.cpp:221
double multipole_xi2(const int indexR, const std::vector< double > mu, const std::vector< std::vector< double >> xi)
xi2(s) from ξ(r,μ)
double multipole_xi4(const int indexR, const std::vector< double > mu, const std::vector< std::vector< double >> xi)
xi4(s) from ξ(r,μ)
double multipole_xi4_model(const double beta, const double xi_real, const double xi_, const double xi__)
the model multipole ξ4 of the two-point correlation function
std::vector< std::vector< double > > Pkl_Kaiser(const std::vector< int > orders, const std::vector< double > kk, const std::vector< double > Pk, const double bias, const double f)
function to obtain Pk multipoles from linear RSD (Kaiser)
T P_4(const T x)
the Legendre polynomial P4
Definition: Func.h:1280
void invert_matrix(const std::vector< std::vector< double >> mat, std::vector< std::vector< double >> &mat_inv, const double prec=1.e-10, const int Nres=-1)
function to invert a matrix
Definition: Func.cpp:673
T poisson(T xx, std::shared_ptr< void > pp, std::vector< double > par)
the poisson distribution
Definition: Func.h:1143
double three_spherical_bessel_integral(const double r1, const double r2, const double r3, const int L1, const int L2, const int L3)
compute the integral of three spherical bessel function, from Mehrem (2011)
Definition: Func.cpp:2554
std::vector< std::vector< double > > sigma2_k(const double nObjects, const double Volume, const std::vector< double > kk, const std::vector< std::vector< double >> Pk_multipoles, const std::vector< int > orders)
multipole expansion of the per-mode covariance sigma2_k (see Grieb et al. 2016, eq....
double error_xi_ratio(const double beta, const double error_beta)
error on the ratio between the redshift-space and real-space correlation functions
Definition: FuncXi.cpp:322
double Pk_from_xi(const double kk, const std::vector< double > lgrr, const std::vector< double > lgxi, const double r_min=0.03, const double r_max=100.)
the power spectrum computed from the Fourier transform of the two-point correlation function
Definition: FuncXi.cpp:141
double barred_xi__direct(const double RR, const std::vector< double > rr, const std::vector< double > xi, const double rAPP=0., const double r0=-1., const double gamma=1.)
the double barred correlation function
Definition: FuncXi.cpp:361
std::vector< double > Pk4_Kaiser(const std::vector< double > kk, const std::vector< double > Pk, const double bias, const double f)
function to obtain the linear RSD power spectrum hexadecapole
T double_powerlaw(const T xx, const T x0, const T alpha, const T beta)
the double power-law function
Definition: Func.h:1184
T P_6(const T x)
the Legendre polynomial P6
Definition: Func.h:1291
double j0(const double xx)
the l=0 spherical Bessel function
Definition: Func.cpp:2039
double trapezoid_integration(const std::vector< double > xx, const std::vector< double > yy)
integral, computed with the trapezoid rule, using ordered data
Definition: Func.cpp:2203
std::vector< double > wigner3j(double l2, double l3, double m1, double m2, double m3)
Wigner symbol.
Definition: Func.cpp:2267
double xi2D_model(const double rp, const double pi, const double beta, const double bias, const double sigmav, const std::vector< double > rad_real, const std::vector< double > xi_real, const std::vector< double > xi_, const std::vector< double > xi__, const double var, const int FV, int index=-1, const bool bias_nl=0, const double bA=0., const double v_min=-3000., const double v_max=3000., const int step_v=500)
the non-linear dispersion model for ξ(rp,π)
Definition: FuncXi.cpp:574
std::vector< double > linear_interpolation_3D(const std::vector< double > min, std::vector< double > max, std::vector< int > steps, std::vector< std::vector< std::vector< double >>> func, const std::vector< std::vector< double >> pos)
3D interpolation on a 3D regular grid
Definition: Func.cpp:546
double xi_ratio(const double beta)
the ratio between the redshift-space and real-space correlation functions
Definition: FuncXi.cpp:287
T radial_velocity(const T vx, const T vy, const T vz, const T ra, const T dec)
the radial velocity
Definition: Func.h:1258
std::vector< double > linearfit(const double xx)
linear function
Definition: Func.h:1007
std::vector< std::vector< double > > Xi024_AP(const double alpha_perpendicular, const double alpha_parallel, const std::vector< double > rr, const std::vector< double > rl, const std::vector< double > Xi0, const std::vector< double > Xi2, const std::vector< double > Xi4)
function to obtain the monopole, quadrupole and hexadecapole of the two-point correlation function
double multipole_xi2_model(const double beta, const double xi_real, const double xi_)
the model multipole ξ2 of the two-point correlation function
T Pol2(T xx, std::shared_ptr< void > pp, std::vector< double > par)
the quadratic function
Definition: Func.h:981
double Pkl_Kaiser_integrand(const double mu, void *parameters)
integrand of the 2d power spectrum to obtain power spectrum multipole
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
std::vector< double > Pk2_Kaiser(const std::vector< double > kk, const std::vector< double > Pk, const double bias, const double f)
function to obtain the linear RSD power spectrum quadrupole
double coupling_3j(const int l, const int l_prime, const int l2)
compute the Wigner 3-j symbol
Definition: Func.cpp:2520
double f_star(const double xx, const double f_g, const double k_star)
velocity distribution used to model BAO
Definition: FuncXi.cpp:642
std::complex< double > spherical_harmonics(cbl::CoordinateType coordinate_type, const int l, const int m, const double coord1, const double coord2, const double coord3)
the order l, degree m spherical harmonics
Definition: Func.cpp:1939
void Covariance_XiMultipoles(std::vector< double > &rr, std::vector< std::vector< double >> &covariance, const int nbins, const double rMin, const double rMax, const double nObjects, const double Volume, const std::vector< double > kk, const std::vector< std::vector< double >> Pk_multipoles, const std::vector< int > orders, const cbl::BinType bin_type=cbl::BinType::_linear_)
Covariance matrix for two-point correlation multipoles (see Grieb et al. 2016, Eq....
double Filter(const double r, const double rc)
filter W(r/rc), used e.g. for filtering the correlation function
Definition: Func.cpp:94
double xi_from_Pk(const double rr, const std::vector< double > lgkk, const std::vector< double > lgPk, const double k_min=0., const double k_max=100., const double aa=0., const double prec=1.e-2)
the two-point correlation function computed from the Fourier transform of the power spectrum
Definition: FuncXi.cpp:80
double radians(const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_degrees_)
conversion to radians
Definition: Func.cpp:126
double interpolated(const double _xx, const std::vector< double > xx, const std::vector< double > yy, const std::string type)
1D interpolation
Definition: Func.cpp:445
double clebsh_gordan(const int j1, const int j2, const int m1, const int m2, const int j3, const int m3)
get the Clebsh-Gordan coefficient in the notation
Definition: Func.cpp:2511
double average_three_spherical_bessel_integral(const double r1_min, const double r1_max, const double r2_min, const double r2_max, const double r3, const int L1, const int L2, const int L3)
compute the integral of three spherical bessel function, from Mehrem (2011), averaged on r1-r2 shells
Definition: Func.cpp:2585
double binomial_coefficient(const int n, const int m)
get the binomial coefficient
Definition: Func.cpp:2217
double Sigma(const std::vector< double > vect)
the standard deviation of a std::vector
Definition: Func.cpp:925
double j0_distance_average(const double kk, const double r_down, const double r_up)
the distance average l=0 spherical Bessel function this function is used to obtain the analytic twop ...
Definition: Func.cpp:2075
void Covariance_XiWedges(std::vector< double > &rr, std::vector< std::vector< double >> &covariance, const std::vector< double > mu, const std::vector< double > delta_mu, const int nbins, const double rMin, const double rMax, const double nObjects, const double Volume, const std::vector< double > kk, const std::vector< std::vector< double >> Pk_multipoles, const std::vector< int > orders, const cbl::BinType bin_type=cbl::BinType::_linear_)
Covariance matrix for two-point correlation wedges (see Grieb et al. 2016, Eq. 19 https://arxiv....
double wigner_3j(int j1, int j2, int j3, int m1, int m2, int m3)
Wigner symbol, use it for l<100.
Definition: Func.cpp:2493
std::vector< double > Quartile(const std::vector< double > Vect)
the first, second and third quartiles of a std::vector
Definition: Func.cpp:1002
std::vector< double > quadratic(const double xx)
quadratic function
Definition: Func.h:1020
T P_2(const T x)
the Legendre polynomial P2
Definition: Func.h:1269
void Moment(const std::vector< double > data, double &ave, double &adev, double &sdev, double &var, double &skew, double &curt)
compute the moments of a set of data
Definition: Func.cpp:1058
void sdss2eq(const std::vector< double > lambda, const std::vector< double > eta, std::vector< double > &ra, std::vector< double > &dec)
convert sdss coordinates to R.A., Dec.
Definition: Func.cpp:1397
double error_multipole_xi0(const int indexR, const std::vector< double > mu, const std::vector< std::vector< double >> error)
error on xi0(s) from ξ(r,μ)
double sgn(T val)
sgn the sign function
Definition: Func.cpp:2227
std::vector< double > generate_correlated_data(const std::vector< double > mean, const std::vector< std::vector< double >> covariance, const int idum=213123)
generate a covariant sample of n points using a covariance matrix
Definition: Func.cpp:2142
void sdss_stripe(const std::vector< double > eta, const std::vector< double > lambda, std::vector< int > &stripe, std::vector< int > &str_u)
compute the SDSS stripe given SDSS coordinates
Definition: Func.cpp:1420
std::vector< double > Xi4(const std::vector< double > rr, const std::vector< double > kk, const std::vector< double > Pk4, const double k_cut=0.6, const double cut_pow=2, const int IntegrationMethod=1)
function to obtain the two point correlation function hexadecapole
double closest_probability(double xx, std::shared_ptr< void > pp, std::vector< double > par)
probability of the closest element to x from a list with weights
Definition: Func.cpp:47
void covariance_matrix(const std::vector< std::vector< double >> mat, std::vector< std::vector< double >> &cov, const bool JK=false)
compute the covariance matrix from an input dataset
Definition: Func.cpp:761
void read_invert_covariance(const std::string filecov, std::vector< std::vector< double >> &cov, std::vector< std::vector< double >> &cov_inv, const size_t i1, const size_t i2, const double prec=1.e-10, const int Nres=-1)
read and invert the covariance matrix
Definition: Func.cpp:1522
double wigner3j_auxA(double l1, double l2, double l3, double m1, double m2, double m3)
Wigner auxiliar function A.
Definition: Func.cpp:2240
T powerlaw(const T xx, const T x0, const T gamma)
the power-law function
Definition: Func.h:1170
T Pol3(T xx, void *pp, std::vector< double > par)
the cubic function
Definition: Func.h:997
double degrees(const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_radians_)
conversion to degrees
Definition: Func.cpp:104
double j4(const double xx)
the l=4 spherical Bessel function
Definition: Func.cpp:2057
void bin_function_2D(const std::string file_grid, double func(double *, size_t, void *), void *par, const int bin, const double x1_min, const double x1_max, const double x2_min, const double x2_max, const std::string binning, std::vector< double > &xx1, std::vector< double > &xx2, std::vector< std::vector< double >> &yy)
create a 2D grid given an input function
Definition: Func.cpp:1183
double jl_distance_average(const double kk, const int order, const double r_down, const double r_up)
the distance average for the order l-th spherical Bessel function
Definition: Func.cpp:2109
CoordinateUnits
the coordinate units
Definition: Kernel.h:562
@ _radians_
angle in radians
@ _degrees_
angle in degrees
std::vector< double > vector_from_distribution(const int nRan, const std::vector< double > xx, const std::vector< double > fx, const double xmin, const double xmax, const int seed)
return a std::vector of numbers sampled from a given distribution
Definition: Func.cpp:1455
BinType
the binning type
Definition: Kernel.h:505
@ _linear_
linear binning
void sdss_atbound2(double &theta, double &phi)
set the angular coordinates in the SDSS boundaries
Definition: Func.cpp:1356
std::vector< double > cubicfit(const double xx)
cubic function
Definition: Func.h:1034
double perpendicular_distance(const double ra1, const double ra2, const double dec1, const double dec2, const double d1, const double d2)
the perpendicular separation, rp
Definition: Func.cpp:259
double get_mu(const double r1, const double r2, const double r3)
get the cosine of the angle between two sides of a triangle
Definition: Func.cpp:2529
double determinant_matrix(const std::vector< std::vector< double >> mat)
compute the determinant of a matrix
Definition: Func.cpp:648
double covariance_XiMultipoles_integrand(const double kk, void *parameters)
integrand to obtain the 2PCF multipoles
double XiMultipoles_from_Xi2D_integrand(const double mu, void *parameters)
integrand to obtain the 2PCF multipoles from 2D 2pcf in polar coordinates
double legendre_polynomial(const double mu, const int l)
the order l Legendre polynomial
Definition: Func.cpp:1786
void measure_var_function(const std::vector< double > var, const int bin, const double V_min, const double V_max, const double Volume, std::vector< double > &Var, std::vector< double > &Phi, std::vector< double > &err)
measure the var function (where "var" could be the mass, the luminosity, the radius,...
Definition: Func.cpp:1084
std::vector< double > Xi0(const std::vector< double > r, const std::vector< double > kk, const std::vector< double > Pk0, const double k_cut=0.7, const double cut_pow=2, const int IntegrationMethod=1)
function to obtain the two point correlation funciton monopole
double jl(const double xx, const int order)
the order l spherical Bessel function
Definition: Func.cpp:2066
void convolution(const std::vector< double > f1, const std::vector< double > f2, std::vector< double > &res, const double deltaX)
convolution of two functions
Definition: Func.cpp:1580
void eq2sdss(const std::vector< double > ra, const std::vector< double > dec, std::vector< double > &lambda, std::vector< double > &eta)
convert from equatorial coordinates R.A., Dec to sdss coordinates
Definition: Func.cpp:1373
double arcseconds(const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_radians_)
conversion to arcseconds
Definition: Func.cpp:148
void bin_function(const std::string file_grid, double func(double, void *), void *par, const int bin, const double x_min, const double x_max, const std::string binning, std::vector< double > &xx, std::vector< double > &yy)
create a 1D grid given an input function
Definition: Func.cpp:1118
double distribution_probability(double xx, std::shared_ptr< void > pp, std::vector< double > par)
probability of an interpolated distribution
Definition: Func.cpp:58
void read_vector(const std::string file_vector, std::vector< double > &xx, std::vector< double > &vector, const std::vector< int > col={})
read a vector from file
Definition: Func.cpp:582
double window_function(const double x, const double min=-1, const double max=1)
the unnormalized window function
Definition: Func.cpp:2538
double wigner3j_auxB(double l1, double l2, double l3, double m1, double m2, double m3)
Wigner auxiliar function B.
Definition: Func.cpp:2253
double number_from_distribution(const std::vector< double > xx, const std::vector< double > fx, const double xmin, const double xmax, const int seed)
return a number sampled from a given distribution
Definition: Func.cpp:1446
double xi2D_lin_model(const double beta, const double bias, const double xi_real, const double xi_, const double xi__, const double P_2, const double P_4)
the linear dispersion model for ξ(rp,π)
Definition: FuncXi.cpp:473
double wigner_6j(const int j1, const int j2, const int j3, const int j4, const int j5, const int j6)
Wigner symbol.
Definition: Func.cpp:2502
double wp(const double rp, const std::vector< double > rr, const std::vector< double > xi, const double r_max=100.)
the projected two-point correlation function
Definition: FuncXi.cpp:192
void polar_coord(const double XX, const double YY, const double ZZ, double &ra, double &dec, double &dd)
conversion from Cartesian coordinates to polar coordinates
Definition: Func.cpp:214
double b_nl(const double rr, const double bA, const double bB=10., const double bC=4.)
a possible parameterization of the non-linear bias
Definition: FuncXi.cpp:653
double arcminutes(const double angle, const CoordinateUnits inputUnits=CoordinateUnits::_radians_)
conversion to arcminutes
Definition: Func.cpp:170
std::vector< size_t > minimum_maximum_indexes(const std::vector< double > xx, const double x_min, const double x_max)
return the std::vector indexes corresponding to a given interval
Definition: Func.cpp:1503