Esempio n. 1
0
int main(int argc, char *argv[]){

  SID_init(&argc,&argv,NULL,NULL);

  // Parse arguments and initialize
  double z;
  if(argc<2 || argc>3){
    fprintf(stderr,"\n Syntax: %s z [gbpCosmo_file.txt]\n",argv[0]);
    fprintf(stderr," ------\n\n");
    return(ERROR_SYNTAX);
  }
  else
    z=(double)atof(argv[1]);

  SID_log("Computing clustering information for z=%.2lf...",SID_LOG_OPEN,z);

  // Initialize cosmology
  cosmo_info *cosmo=NULL;
  if(argc==2)
     init_cosmo_default(&cosmo);
  else if(argc==3)
     read_gbpCosmo_file(&cosmo,argv[2]);

  // Initialize
  int     mode     =PSPEC_LINEAR_TF;
  int     component=PSPEC_ALL_MATTER;
  init_sigma_M(&cosmo,z,mode,component);
  int     n_k     =((int    *)ADaPS_fetch(cosmo,"n_k"))[0];
  double *lk_P    = (double *)ADaPS_fetch(cosmo,"lk_P");
  double  h_Hubble=((double *)ADaPS_fetch(cosmo,"h_Hubble"))[0];
  SID_log("Done.",SID_LOG_CLOSE);

  // Generate file
  SID_log("Writing table to stdout...",SID_LOG_OPEN);
  double delta_c    =1.686;
  double m_per_mpc_h=M_PER_MPC/h_Hubble;
  printf("# Column (01): k [h Mpc^-1]\n");
  printf("#        (02): R [h^-1 Mpc] \n");
  printf("#        (03): M [h^-1 M_sol]\n");
  printf("#        (04): V_max [km/s] \n");
  printf("#        (05): P_k [(h^-1 Mpc)^3]\n");
  printf("#        (06): sigma\n");
  printf("#        (07): nu (peak height)\n");
  printf("#        (08): b_BPR\n");
  printf("#        (09): b_TRK\n");
  printf("#        (10): z-space boost Kaiser '87 (applied to b_TRK)\n");
  printf("#        (11): b_TRK total (w/ Kaiser boost)\n");
  printf("#        (12): b_halo_Poole \n");
  printf("#        (13): z-space boost Poole \n");
  printf("#        (14): b_total_Poole \n");
  printf("#        (15): b_halo_Poole        (substructure)\n");
  printf("#        (16): z-space boost Poole (substructure)\n");
  printf("#        (17): b_total_Poole       (substructure)\n");
  for(int i_k=0;i_k<n_k;i_k++){
     double k_P  =take_alog10(lk_P[i_k]);
     double R_P  =R_of_k(k_P);
     double M_R  =M_of_k(k_P,z,cosmo);
     double P_k  =power_spectrum(k_P,z,&cosmo,mode,component);
     double sigma=sqrt(power_spectrum_variance(k_P,z,&cosmo,mode,component));
     double V_max=V_max_NFW(M_R,z,NFW_MODE_DEFAULT,&cosmo);
     double nu   =delta_c/sigma;
     double bias =1.;
     if(M_R<1e16*M_SOL){
        printf("%10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le %10.5le\n",
               k_P*m_per_mpc_h,
               R_P/m_per_mpc_h,
               M_R/(M_SOL/h_Hubble),
               V_max*1e-3,
               P_k/pow(m_per_mpc_h,3.),
               sigma,
               nu,
               bias_model(M_R,delta_c,z,&cosmo,BIAS_MODEL_BPR),
               bias_model(M_R,delta_c,z,&cosmo,BIAS_MODEL_TRK),
               bias_model(M_R,delta_c,z,&cosmo,BIAS_MODEL_TRK|BIAS_MODEL_KAISER_BOOST),
               bias_model(M_R,delta_c,z,&cosmo,BIAS_MODEL_TRK|BIAS_MODEL_KAISER),
               bias_model(M_R,delta_c,z,&cosmo,BIAS_MODEL_POOLE_HALO),
               bias_model(M_R,delta_c,z,&cosmo,BIAS_MODEL_POOLE_ZSPACE),
               bias_model(M_R,delta_c,z,&cosmo,BIAS_MODEL_POOLE_TOTAL),
               bias_model(M_R,delta_c,z,&cosmo,BIAS_MODEL_POOLE_SUBSTRUCTURE|BIAS_MODEL_POOLE_HALO),
               bias_model(M_R,delta_c,z,&cosmo,BIAS_MODEL_POOLE_SUBSTRUCTURE|BIAS_MODEL_POOLE_ZSPACE),
               bias_model(M_R,delta_c,z,&cosmo,BIAS_MODEL_POOLE_SUBSTRUCTURE|BIAS_MODEL_POOLE_TOTAL));
     }
  }
  SID_log("Done.",SID_LOG_CLOSE);

  // Clean-up
  free_cosmo(&cosmo);

  SID_log("Done.",SID_LOG_CLOSE);
  SID_exit(ERROR_NONE);
}
Esempio n. 2
0
double bias_model(double x_in, double delta_c, double z, cosmo_info **cosmo, int mode) {
    // Decide what the input is
    int    flag_Vmax_ordinate = SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_VMAX_ORDINATE);
    double M_R;
    double V_max;
    if(flag_Vmax_ordinate)
        V_max = x_in;
    else
        M_R = x_in;

    double bias;
    int    flag_done = GBP_FALSE;

    // Tinker et al 2010
    if(SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_TRK)) {
        if(flag_done)
            SID_exit_error("Mode flag (%d) is invalid in bias_model().  Multiple model definitions.", SID_ERROR_LOGIC,
                           mode);
        flag_done = GBP_TRUE;
        if(flag_Vmax_ordinate)
            M_R = Vmax_to_Mvir_NFW(V_max, z, NFW_MODE_DEFAULT, cosmo);
        double y     = take_log10(Delta_vir(z, *cosmo));
        double A     = 1. + 0.24 * y * exp(-pow(4. / y, 4.));
        double B     = 0.183;
        double C     = 0.019 + 0.107 * y + 0.19 * exp(-pow(4. / y, 4.));
        double a     = 0.44 * y - 0.88;
        double b     = 1.5;
        double c     = 2.4;
        double sigma = sigma_M(cosmo, M_R, z, PSPEC_LINEAR_TF, PSPEC_ALL_MATTER);
        double nu    = delta_c / sigma;
        bias         = 1. - A * pow(nu, a) / (pow(nu, a) + pow(delta_c, a)) + B * pow(nu, b) + C * pow(nu, c);
    }
    // Basilakos and Plionis (2001;2003) w/ Papageorgiou et al 2013 coeeficients
    if(SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_BPR)) {
        if(flag_done)
            SID_exit_error("Mode flag (%d) is invalid in bias_model().  Multiple model definitions.", SID_ERROR_LOGIC,
                           mode);
        flag_done = GBP_TRUE;
        if(flag_Vmax_ordinate)
            M_R = Vmax_to_Mvir_NFW(V_max, z, NFW_MODE_DEFAULT, cosmo);
        double alpha_1 = 4.53;
        double alpha_2 = -0.41;
        double beta_1  = 0.37;
        double beta_2  = 0.36;
        double I_z;
        double C_1;
        double C_2;
        double Omega_M, Omega_k, Omega_Lambda, h_Hubble;
        double Ez;
        Omega_M      = ((double *)ADaPS_fetch(*cosmo, "Omega_M"))[0];
        Omega_k      = ((double *)ADaPS_fetch(*cosmo, "Omega_k"))[0];
        Omega_Lambda = ((double *)ADaPS_fetch(*cosmo, "Omega_Lambda"))[0];
        h_Hubble     = ((double *)ADaPS_fetch(*cosmo, "h_Hubble"))[0];
        Ez           = E_z(Omega_M, Omega_k, Omega_Lambda, z);
        I_z          = bias_model_BPR_integral(cosmo, z);
        C_1          = alpha_1 * pow(M_R / (1e13 * M_SOL / h_Hubble), beta_1);
        C_2          = alpha_2 * pow(M_R / (1e13 * M_SOL / h_Hubble), beta_2);
        bias         = (C_1 + C_2 * I_z) * Ez + 1.;
    }
    // Poole et al 2014
    if(SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_POOLE_HALO)) {
        if(flag_done)
            SID_exit_error("Mode flag (%d) is invalid in bias_model().  Multiple model definitions.", SID_ERROR_LOGIC,
                           mode);
        flag_done = GBP_TRUE;
        if(!flag_Vmax_ordinate)
            V_max = V_max_NFW(M_R, z, NFW_MODE_DEFAULT, cosmo) * 1e-3;
        else
            V_max *= 1e-3;
        double V_SF_o;
        double V_SF_z;
        double s_V_o;
        double s_V_z;
        double b_o_o;
        double b_o_z;
        double b_V_o;
        double b_V_z;
        if(SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_POOLE_SUBSTRUCTURE)) {
            V_SF_o = 5.326176e-02;
            V_SF_z = -1.673868e-01;
            s_V_o  = 4.026941e-01;
            s_V_z  = 6.096567e-01;
            b_o_o  = -1.974311e-01;
            b_o_z  = 2.138219e-01;
            b_V_o  = 2.707540e-01;
            b_V_z  = 8.202001e-02;
        } else {
            V_SF_o = 2.819063e-02;
            V_SF_z = -1.381993e-01;
            s_V_o  = 3.685953e-01;
            s_V_z  = 6.154695e-01;
            b_o_o  = -3.793559e-01;
            b_o_z  = 3.074326e-01;
            b_V_o  = 3.147507e-01;
            b_V_z  = 6.072666e-02;
        }
        double b_o  = b_o_o + b_o_z * z;
        double b_V  = (b_V_o + b_V_z * z) / 220.;
        double V_SF = take_alog10(V_SF_o + V_SF_z * z) * 220.;
        double s_V  = (s_V_o + s_V_z * z) / 220.;
        double s    = s_V * fabs(V_max - V_SF);
        bias        = take_alog10(0.5 * (b_o + b_V * V_max));
    }
    if(SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_POOLE_ZSPACE)) {
        if(flag_done)
            SID_exit_error("Mode flag (%d) is invalid in bias_model().  Multiple model definitions.", SID_ERROR_LOGIC,
                           mode);
        flag_done = GBP_TRUE;
        if(!flag_Vmax_ordinate)
            V_max = V_max_NFW(M_R, z, NFW_MODE_DEFAULT, cosmo) * 1e-3;
        else
            V_max *= 1e-3;
        double V_SF_o;
        double V_SF_z;
        double s_V_o;
        double s_V_zz;
        double b_o_o;
        double b_o_zz;
        double b_V_o;
        double b_V_z;
        double z_b_c;
        if(SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_POOLE_SUBSTRUCTURE)) {
            V_SF_o = 3.173152e-01;
            V_SF_z = -1.599133e-01;
            s_V_o  = 5.344408e-01;
            s_V_zz = 7.102406e-02;
            b_o_o  = 2.198795e-01;
            b_o_zz = -3.749491e-02;
            b_V_o  = -4.628602e-02;
            b_V_z  = -1.832620e-02;
            z_b_c  = 9.292014e-01;
        } else {
            V_SF_o = 3.100167e-01;
            V_SF_z = -2.026411e-01;
            s_V_o  = 3.342258e-01;
            s_V_zz = 9.233431e-02;
            b_o_o  = 2.206163e-01;
            b_o_zz = -4.419126e-02;
            b_V_o  = -4.804747e-02;
            b_V_z  = -1.454479e-02;
            z_b_c  = 7.852721e-01;
        }
        double b_o  = b_o_o + b_o_zz * (z - z_b_c) * (z - z_b_c);
        double b_V  = (b_V_o + b_V_z * z) / 220.;
        double V_SF = 220. * take_alog10(V_SF_o + V_SF_z * z);
        double s_V  = (s_V_o + s_V_zz * z * z) / 220.;
        double s    = s_V * fabs(V_max - V_SF);
        bias        = take_alog10(0.5 * (b_o + b_V * V_max));
    }
    if(SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_POOLE_TOTAL)) {
        if(flag_done)
            SID_exit_error("Mode flag (%d) is invalid in bias_model().  Multiple model definitions.", SID_ERROR_LOGIC,
                           mode);
        flag_done = GBP_TRUE;
        if(!flag_Vmax_ordinate)
            V_max = V_max_NFW(M_R, z, NFW_MODE_DEFAULT, cosmo) * 1e-3;
        else
            V_max *= 1e-3;
        double V_SF_o;
        double V_SF_z;
        double s_V_o;
        double s_V_z;
        double b_o_o;
        double b_o_z;
        double b_V_o;
        double b_V_z;
        if(SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_POOLE_SUBSTRUCTURE)) {
            V_SF_o = 2.128681e-01;
            V_SF_z = -2.280569e-01;
            s_V_o  = 1.118792e+00;
            s_V_z  = 6.121383e-01;
            b_o_o  = 1.198136e-02;
            b_o_z  = 2.112670e-01;
            b_V_o  = 2.153513e-01;
            b_V_z  = 7.763461e-02;
        } else {
            V_SF_o = 2.041659e-01;
            V_SF_z = -2.966696e-01;
            s_V_o  = 9.408169e-01;
            s_V_z  = 4.514711e-01;
            b_o_o  = -1.534952e-01;
            b_o_z  = 2.799483e-01;
            b_V_o  = 2.547096e-01;
            b_V_z  = 6.760491e-02;
        }
        double b_o  = b_o_o + b_o_z * z;
        double b_V  = (b_V_o + b_V_z * z) / 220.;
        double V_SF = V_SF_o + V_SF_z * z;
        double s_V  = (s_V_o + s_V_z * z) / 220.;
        double s    = s_V * fabs(V_max - V_SF);
        bias        = take_alog10(0.5 * (b_o + b_V * V_max));
    }
    if(!flag_done)
        SID_exit_error("Mode flag (%d) is invalid in bias_model().  No model definition.", SID_ERROR_LOGIC, mode);
    // Apply the Kaiser '87 model to whatever model has been processed above.  Be careful, there
    //   are some mode flags (such as BIAS_MODE_POOLE_ZSPACE) for which this does not make sence
    //   and we presently don't check for this.
    if(SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_KAISER_BOOST)) {
        double Omega_M_z = Omega_z(z, (*cosmo));
        double f         = pow(Omega_M_z, 0.55);
        double beta      = f / bias;
        double boost     = pow(1. + TWO_THIRDS * beta + 0.2 * beta * beta, 0.5);
        bias             = boost;
    }
    if(SID_CHECK_BITFIELD_SWITCH(mode, BIAS_MODEL_KAISER)) {
        double Omega_M_z = Omega_z(z, (*cosmo));
        double f         = pow(Omega_M_z, 0.55);
        double beta      = f / bias;
        double boost     = pow(1. + TWO_THIRDS * beta + 0.2 * beta * beta, 0.5);
        bias *= boost;
    }
    return (bias);
}