예제 #1
0
void output_matter_variance()
{
  int k,nr=50;
  double dlogr,r,slin,snl,mass,rmin = 0.05,rmax = 80.0,pnorm,pnorm_nl;
  FILE *fp;
  char aa[100];

  fprintf(stderr,"\n\nCALCULATING MATTER VARIANCE.\n");
  fprintf(stderr,    "----------------------------\n\n");

  sprintf(aa,"%s.sigma_r",Task.root_filename);
  fp = fopen(aa,"w");

  dlogr = (log(rmax) - log(rmin))/(nr-1);
  pnorm = SIGMA_8/sigmac(8.0);
  pnorm_nl = pnorm*sigmac(80.0)/nonlinear_sigmac(80.0);

  for(k=0;k<nr;++k)
    {
      r = exp(k*dlogr)*rmin;
      mass = 4./3.*PI*r*r*r*RHO_CRIT*OMEGA_M;
      slin = sigmac(r)*pnorm;
      snl = nonlinear_sigmac(r)*pnorm_nl;
      fprintf(fp,"%e %e %e %e\n",r,slin,snl,mass);
    }
  fclose(fp);

}
예제 #2
0
파일: main.c 프로젝트: jltinker/PUBLIC_SHMR
int main(int argc, char **argv)
{
    double s1, delta_vir, omega_m, x;
    int i, j;
    FILE *fp;

#ifdef PARALLEL
    printf("STARTING>>>\n");
    fflush(stdout);
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &ThisTask);
    MPI_Comm_size(MPI_COMM_WORLD, &NTask);
    printf("TASK %d reporting for duty.\n",ThisTask);
    fflush(stdout);
#endif

    ARGC = argc;
    ARGV = argv;

    OUTPUT=0;
    HOD.fredc = HOD.freds = 1.0;

    for(i=1; i<=99; ++i)
        HOD.free[i]=0;
    wp.esys=0;

    Work.chi2=0;
    Work.imodel=1;

    USE_ERRORS = 0;
    ITRANS=4;
    HUBBLE=0.7;
    BEST_FIT = 0;
    HOD.M_sat_break = 1.0e14;
    HOD.alpha1 = 1.0;

    if(argc==1)
        endrun("./HOD.x hod.bat_file > output");

    read_parameter_file(argv[1]);

    if(REDSHIFT>0)
    {
        SIGMA_8 = SIGMA_8*growthfactor(REDSHIFT);
        HUBBLEZ = sqrt(OMEGA_M*pow(1+REDSHIFT,3.0)+1-OMEGA_M);
        OMEGA_Z = OMEGA_M*pow(1+REDSHIFT,3.0)/(OMEGA_M*pow(1+REDSHIFT,3.0)+(1-OMEGA_M));
        fprintf(stdout,"SIGMA_8(Z=%.3f)= %.4f\n",REDSHIFT,SIGMA_8);
        fprintf(stdout,"H(Z=%.3f)/H0= %.4f\n",REDSHIFT,HUBBLEZ);
        HOD.M_min = 0;
        RESET_COSMOLOGY++;
        set_HOD_params();
    }

    /* Output the virial overdensity for reference.
     */
    if(OUTPUT)
    {
        omega_m=OMEGA_M*pow(1+REDSHIFT,3.0)/(OMEGA_M*pow(1+REDSHIFT,3.0)+(1-OMEGA_M));
        x=omega_m-1;
        delta_vir=(18*PI*PI+82*x-39*x*x)/(1+x);
        printf("DELTA_VIR(Omega_m,z) = %f\n",delta_vir);
    }

    /* Do some initialization if we're doing SHMR
     */
    if(SHMR_FLAG)
    {
        if(SATELLITE_PARAMETERIZATION)SHMR_PARAMS = 14;
        if(VARIABLE_ALPHA)SHMR_PARAMS += 2;
        if(VARIABLE_EXCLUSION)wpl.a[SHMR_PARAMS+1] = EXCLUSION_RADIUS;
        wpl.ncf = SHMR_PARAMS + VARIABLE_EXCLUSION;

        HOD.pdfs = 100;
        HOD.pdfc = 101;
        wpx.calculate_two_halo = 1;
        input_stellar_mass_bins();
        // if we have input from the prompt, take that
        if(argc>2 && atoi(argv[2])!=999)
        {
            fp = openfile(argv[2]);
            fscanf(fp,"%d %d",&i,&j);
            for(i=1; i<=wpl.ncf; ++i)
                fscanf(fp,"%lf",&wpl.a[i]);
            fclose(fp);
        }
    }

    for(i=1; i<=wpl.ncf; ++i)
        printf("wpl.a[%d]= %e\n",i,wpl.a[i]);

    /* LENSING TESTING FOR ALEXIE
     */
    if(argc>2)
        IDUM_MCMC=atoi(argv[2]);
    SIGMA_8Z0 = 0.8;

    if(argc>2)
        if(atoi(argv[2])==999)
            test(argc,argv);

    /* If there's no cross-correlation function,
     * set the second number density equal to the first
     */
    if(!XCORR)
        GALAXY_DENSITY2 = GALAXY_DENSITY;

    /* Initialize the non-linear power spectrum.
     */
    nonlinear_sigmac(8.0);
    sigmac_interp(1.0E13);
    sigmac_radius_interp(1.0);

    /* Skip the HOD stuff if we're SHMR-ing it:
     */
    if(SHMR_FLAG)
    {
        if(argc>2 && atoi(argv[2])==999)test(argc, argv);
        if(argc>3 && atoi(argv[3])==999)test(argc, argv);
        goto TASKS;
    }

    /* Get the galaxy bias factor
     */
    s1=qromo(func_galaxy_bias,log(HOD.M_low),log(HOD.M_max),midpnt);
    GALAXY_BIAS=s1/GALAXY_DENSITY;
    if(OUTPUT)
        fprintf(stdout,"Galaxy Bias bg= %f\n",GALAXY_BIAS);
    fflush(stdout);

    /* Get the galaxy satellite fraction
     */
    s1=qromo(func_satellite_density,log(HOD.M_low),log(HOD.M_max),midpnt)/
       GALAXY_DENSITY;
    if(OUTPUT)
        fprintf(stdout,"fsat %e\n",s1);
    fflush(stdout);

    /* Mean halo mass.
     */
    if(OUTPUT)
        fprintf(stdout,"M_eff %e\n",number_weighted_halo_mass());
    fflush(stdout);

    /* Set up BETA for wp integration.
     */
    BETA = pow(OMEGA_M,0.6)/GALAXY_BIAS;
    if(OUTPUT)
        printf("BETA = %f\n",BETA);

TASKS:
    tasks(argc,argv);
}
예제 #3
0
파일: chi2_zspace.c 프로젝트: rmredd/HOD_MN
double chi2_zspace(double *a)
{
  static double **xiz;
  int i,j,na=0,nb=0,nc=0,i1,i2,j1,j2;
  double chi2d=0,chi2a=0,chi2b=0,chi2c=0,chi2,e,rhalf[100],**tmp,**tmp2;
  double x,rslo,rplo,drs,drp,dx1,rshi,rphi,x1,x2,psend=0,precv;
  static int iter=0,flag=1;


  if(flag)
    {
      flag=0;
      COVARZ=0;
      Work.chi2=1;
      Work.SysErrFlag=0;
      initialize_chi2_zspace();
      input_datafiles();
      if(Work.izspace)
	xiz = dmatrix(1,Work.n_z,1,Work.n_z);

      if(Work.ihalf_covar)
	{
	  tmp=dmatrix(1,Work.n_half,1,1);
	  tmp2=dmatrix(1,Work.n_half,1,Work.n_half);
	  for(i=0;i<Work.n_half;++i)
	    for(j=0;j<Work.n_half;++j)
	      {
		tmp2[i+1][j+1]=Work.covar_h[i][j];
	      }
	  gaussj(tmp2,Work.n_half,tmp,1);
	  for(i=1;i<=Work.n_half;++i)
	    for(j=1;j<=Work.n_half;++j)
	      {
		Work.covar_h[i-1][j-1]=tmp2[i][j];
		if(i==j && !ThisTask)
		  printf("DIAG HALF %d %d %e\n",i,j,Work.covar_q[i-1][j-1]);
	      }
	  free_dmatrix(tmp,1,Work.n_half,1,1);
	  free_dmatrix(tmp2,1,Work.n_half,1,Work.n_half);
	}
      if(Work.iquad_covar)
	{
	  tmp=dmatrix(1,Work.n_quad,1,1);
	  tmp2=dmatrix(1,Work.n_quad,1,Work.n_quad);
	  for(i=0;i<Work.n_quad;++i)
	    for(j=0;j<Work.n_quad;++j)
	      {
		tmp2[i+1][j+1]=Work.covar_q[i][j];
	      }
	  gaussj(tmp2,Work.n_quad,tmp,1);
	  for(i=1;i<=Work.n_quad;++i)
	    for(j=1;j<=Work.n_quad;++j)
	      {
		Work.covar_q[i-1][j-1]=tmp2[i][j];
		if(i==j && !ThisTask)
		  printf("DIAG QUAD %d %d %e\n",i,j,Work.covar_q[i-1][j-1]);
	      }
	  free_dmatrix(tmp,1,Work.n_quad,1,1);
	  free_dmatrix(tmp2,1,Work.n_quad,1,Work.n_quad);
	}
      if(Work.imono_covar)
	{
	  tmp=dmatrix(1,Work.n_mono,1,1);
	  tmp2=dmatrix(1,Work.n_mono,1,Work.n_mono);
	  for(i=0;i<Work.n_mono;++i)
	    for(j=0;j<Work.n_mono;++j)
	      {
		tmp2[i+1][j+1]=Work.covar_m[i][j];
	      }
	  gaussj(tmp2,Work.n_mono,tmp,1);
	  for(i=1;i<=Work.n_mono;++i)
	    for(j=1;j<=Work.n_mono;++j)
	      {
		Work.covar_m[i-1][j-1]=tmp2[i][j];
		if(i==j && !ThisTask)
		  printf("DIAG MONO %d %d %e\n",i,j,Work.covar_m[i-1][j-1]);
	      }
	  free_dmatrix(tmp,1,Work.n_mono,1,1);
	  free_dmatrix(tmp2,1,Work.n_mono,1,Work.n_mono);
	}
    }

  if(!LINEAR_PSP)
    nonlinear_sigmac(8.0);

  RESET_PVZ=1;

  Work.em_abs=Work.eq_abs=0;
  Work.percentage_error=0;

  if(Work.imono || Work.iquad)
    {
      xi_multipoles();
       
      if(Work.imono && !Work.imono_covar)
	{
	  for(i=0;i<Work.n_mono;++i)
	    {
	      if(Work.r_mono[i]>=Work.rmlo && Work.r_mono[i]<=Work.rmhi)
		{
		  e=0;//esys_mono(Work.r_mono[i])*Work.xi_mono[i];
		  chi2a+=(Work.xi_mono[i]-Work.data_m[i])*(Work.xi_mono[i]-Work.data_m[i])/
		    (Work.err_m[i]*Work.err_m[i] + e*e);
		  if(!ThisTask && OUTPUTZ)
		    printf("CHIMONO%d %d %f %e %e %e %e\n",Work.imodel,iter,Work.r_mono[i],
			   Work.xi_mono[i],Work.data_m[i],Work.err_m[i],e);
		}
	    }
	}
	  
      if(Work.imono && Work.imono_covar)
	{
	  for(i=0;i<Work.n_mono;++i)
	    for(j=0;j<Work.n_mono;++j)
	      {
		chi2a+=(Work.xi_mono[i]-Work.data_m[i])*(Work.xi_mono[j]-Work.data_m[j])*
		  Work.covar_m[i][j];
		if(!ThisTask && OUTPUTZ && i==j)
		  printf("CHIMONO %d %f %e %e %e\n",iter,Work.r_mono[i],
			 Work.xi_mono[i],Work.data_m[i],Work.err_m[i]);
	      }
	}

      if(Work.iquad && !Work.iquad_covar)
	{
	  for(i=0;i<Work.n_quad;++i)
	    {
	      if(Work.r_quad[i]>=Work.rqlo && Work.r_quad[i]<=Work.rqhi)
		{
		  e=esys_quad(Work.r_quad[i]);
		  if(Work.r_quad[i]<3)e*=Work.xi_quad[i];

		  /* Try percentage error on (1+abs(Q)) -- originally 0.02
		   */
		  e = 0.013*(1+mabs(Work.xi_quad[i]));
		  if(Work.xi_quad[i]>0.2)
		    e = 0.013*(Work.xi_quad[i]);

		  x1=(Work.xi_quad[i]-Work.data_q[i])*
		    (Work.xi_quad[i]-Work.data_q[i])/
		    (Work.err_q[i]*Work.err_q[i] + e*e);
		  chi2b+=x1;
		  if(!ThisTask && OUTPUTZ) {
		    printf("CHIQUAD%d %d %f %e %e %e %e %e\n",
			   Work.imodel,iter,Work.r_quad[i],
			   Work.xi_quad[i],Work.data_q[i],Work.err_q[i],e,x1);
		    fflush(stdout); }
		}
	    }
	}      
    }
  if(Work.iquad && Work.iquad_covar)
    {

      for(i=0;i<Work.n_quad;++i)
	for(j=0;j<Work.n_quad;++j)
	  {
	    chi2b+= (Work.xi_quad[i]-Work.data_q[i])*(Work.xi_quad[j]-Work.data_q[j])*
	      (Work.covar_q[i][j]);
	    if(!ThisTask && OUTPUTZ && i==j)
	      printf("CHIQUAD %d %f %e %e %e\n",
		     iter,Work.r_quad[j],
		     Work.xi_quad[j],Work.data_q[j],Work.err_q[i]);
	  }
    }

  if(Work.ihalf && !Work.ihalf_covar)
    {
      if(!ThisTask)printf("HERE %d\n",Work.n_half);
      calc_rhalf(Work.r_half,rhalf,Work.n_half);
      for(i=0;i<Work.n_half;++i)
	{
	  // if(Work.r_half[i]<Work.rhlo || Work.r_half[i]>Work.rhhi)continue;
	  e=esys_half(Work.r_half[i])*rhalf[i];
	  e=0;
	  /*rhalf=small_scale_measure(Work.r_half[i]);*/
	  chi2c+=(rhalf[i]-Work.data_h[i])*(rhalf[i]-Work.data_h[i])/
	    (Work.err_h[i]*Work.err_h[i] + e*e);
	  if(!ThisTask && OUTPUTZ)
	    printf("CHIHALF%d %d %f %e %e %e %e\n",Work.imodel,iter,Work.r_half[i],
		   rhalf[i],Work.data_h[i],Work.err_h[i],e);
	}
    }
  if(Work.ihalf && Work.ihalf_covar)
    {
      calc_rhalf(Work.r_half,rhalf,Work.n_half);
      for(i=0;i<Work.n_half;++i)
	for(j=0;j<Work.n_half;++j)
	  {
	    chi2c+=(rhalf[i]-Work.data_h[i])*(rhalf[j]-Work.data_h[j])*
	      (Work.covar_h[i][j]);
	    if(!ThisTask && OUTPUTZ && i==j)
	      printf("CHIHALF %d %f %e %e %e\n",
		     iter,Work.r_half[j],
		     rhalf[j],Work.data_h[j],Work.err_h[i]);
	    /*
	    if(OUTPUTZ && i==j)
	      printf("CPUHALF%02d %d %f %e %e %e\n",ThisTask,
		     iter,Work.r_half[j],
		     rhalf[j],Work.data_h[j],Work.err_h[i]);
	    */
	  }
    }


  if(Work.izspace)
    {
      for(i=0;i<Work.n_z;++i)
	for(j=0;j<Work.n_z;++j)
	  {
	    if(!i)continue;
	    if(i>12 || j>12)continue;

	    rplo=pow(10.0,-1.12+0.2*j);
	    if(!j)rplo=0;
	    rphi=pow(10.0,-1.12+0.2*(j+1));
	    rslo=pow(10.0,-1.12+0.2*i);
	    if(!i)rslo=0;
	    rshi=pow(10.0,-1.12+0.2*(i+1));
	    /*
	    x2 = integrated_bin(rslo,rplo,rshi-rslo,rphi-rplo,10);
	    x=one_halo(Work.rsigma[i][j],Work.rpi[i][j]) + 
	      two_halo(Work.rsigma[i][j],Work.rpi[i][j]);
	    */
	    x = xi2d_interp(rslo,rplo,rshi,rphi);
	    e = 0.03*x;

	      chi2d+=(x-Work.data_z[i][j])*(x-Work.data_z[i][j])/
		(Work.err_z[i][j]*Work.err_z[i][j] + e*e);
	    if(!ThisTask && OUTPUTZ){
	      printf("CHIZSPACE %d %f %f %e %e %e %e %e\n",iter,Work.rsigma[i][j],
		     Work.rpi[i][j],Work.data_z[i][j],Work.err_z[i][j],x,x2,x1);
	      fflush(stdout); }
	  }
    }

  chi2=chi2a+chi2b+chi2c+chi2d;
  ++iter;
  if(!ThisTask)
    {
      printf("ITERZ %d %e %e %e %e %e\n",iter,chi2,chi2a,chi2b,chi2c,chi2d);
      fflush(stdout);
    }
  //  printf("CPUCHIZ%02d %d %e %e %e %e %e\n",ThisTask,iter,chi2,chi2a,chi2b,chi2c,chi2d);
  //fflush(stdout);
  return(chi2);
}