double func_find_mone2(double m) { double fsat; HOD.M1=exp(m); set_HOD_params(); fsat = qromo(func_satfrac,log(HOD.M_low),log(HOD.M_max),midpnt)/GALAXY_DENSITY; return fsat-fsat_g1; }
/* * This function parses the parameterfile in a simple way. * Each paramater is defined by a keyword (`tag'), and can be * either of type douple, int, or character string. * The routine makes sure that each parameter appears * exactly once in the parameterfile. */ void read_parameter_file(char *fname) { #define DOUBLE 1 #define STRING 2 #define INT 3 #define CHAR 4 #define LONG 4 #define MAXTAGS 300 FILE *fd,*fdout; char buf[200],buf1[200],buf2[200],buf3[200],tempchar,aa[100]; int i,j,nt,ii,nn,ctemp; int id[MAXTAGS]; void *addr[MAXTAGS]; char tag[MAXTAGS][200]; int errorFlag=0; int IDUM_MCMC_TEMP=-555; nt=0; strcpy(tag[nt],"fit_for_bias"); addr[nt]=&Task.fit_for_bias; id[nt++]=INT; // inputs for the SHMR relation strcpy(tag[nt],"EXTERNAL_CONSTRAINTS"); addr[nt]=&EXTERNAL_CONSTRAINTS; id[nt++]=INT; strcpy(tag[nt],"VARIABLE_EXCLUSION"); addr[nt]=&VARIABLE_EXCLUSION; id[nt++]=INT; strcpy(tag[nt],"EXCLUSION_RADIUS"); addr[nt]=&EXCLUSION_RADIUS; id[nt++]=DOUBLE; strcpy(tag[nt],"VARIABLE_ALPHA"); addr[nt]=&VARIABLE_ALPHA; id[nt++]=INT; strcpy(tag[nt],"SHMR_FLAG"); addr[nt]=&SHMR_FLAG; id[nt++]=INT; strcpy(tag[nt],"PCA"); addr[nt]=&PCA; id[nt++]=INT; strcpy(tag[nt],"SMF_PCA"); addr[nt]=&SMF_PCA; id[nt++]=INT; strcpy(tag[nt],"SHMR"); addr[nt]=&Task.SHMR; id[nt++]=INT; strcpy(tag[nt],"COLOR"); addr[nt]=&COLOR; id[nt++]=INT; strcpy(tag[nt],"SHMR.MhaloNorm"); addr[nt]=&wpl.a[1]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.MstarNorm"); addr[nt]=&wpl.a[2]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.beta"); addr[nt]=&wpl.a[3]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.delta"); addr[nt]=&wpl.a[4]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.gamma"); addr[nt]=&wpl.a[5]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.scatter"); addr[nt]=&wpl.a[6]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.McutNorm"); addr[nt]=&wpl.a[7]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.M1Norm"); addr[nt]=&wpl.a[8]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.McutSlope"); addr[nt]=&wpl.a[9]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.M1Slope"); addr[nt]=&wpl.a[10]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.alpha_sat"); addr[nt]=&wpl.a[11]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.M1HighA"); addr[nt]=&wpl.a[12]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.M1HighB"); addr[nt]=&wpl.a[13]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR.M1LowCut"); addr[nt]=&wpl.a[14]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.MhaloNorm"); addr[nt]=&wpl.a[12]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.MstarNorm"); addr[nt]=&wpl.a[13]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.beta"); addr[nt]=&wpl.a[14]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.delta"); addr[nt]=&wpl.a[15]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.gamma"); addr[nt]=&wpl.a[16]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.scatter"); addr[nt]=&wpl.a[17]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.McutNorm"); addr[nt]=&wpl.a[18]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.M1Norm"); addr[nt]=&wpl.a[19]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.McutSlope"); addr[nt]=&wpl.a[20]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.M1Slope"); addr[nt]=&wpl.a[21]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.alpha_sat"); addr[nt]=&wpl.a[22]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.M1HighA"); addr[nt]=&wpl.a[23]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.M1HighB"); addr[nt]=&wpl.a[24]; id[nt++]=DOUBLE; strcpy(tag[nt],"SHMR2.M1LowCut"); addr[nt]=&wpl.a[25]; id[nt++]=DOUBLE; SATELLITE_PARAMETERIZATION=0; strcpy(tag[nt],"SATELLITE_PARAMETERIZATION"); addr[nt]=&SATELLITE_PARAMETERIZATION; id[nt++]=INT; strcpy(tag[nt],"red_central_nbin"); addr[nt]=&HOD.red_central_nbin; id[nt++]=INT; for(i=1;i<=10;++i) { sprintf(aa,"red_central_fraction[%d]",i); strcpy(tag[nt],aa); addr[nt]=&wpl.a[26+i]; id[nt++]=DOUBLE; } Files.UseStellarMassBinsClustering = 1; strcpy(tag[nt],"StellarMassBinsClustering"); addr[nt]=Files.StellarMassBinsClustering; id[nt++]=STRING; Files.UseStellarMassBinsLensing = 1; strcpy(tag[nt],"StellarMassBinsLensing"); addr[nt]=Files.StellarMassBinsLensing; id[nt++]=STRING; strcpy(tag[nt],"StellarMassFunctionFilename"); addr[nt]=Files.StellarMassFunctionFilename; id[nt++]=STRING; strcpy(tag[nt],"StellarMassFunctionCovarFilename"); addr[nt]=Files.StellarMassFunctionCovarFilename; id[nt++]=STRING; strcpy(tag[nt],"ClusteringFilenames"); addr[nt]=Files.ClusteringFilenames; id[nt++]=STRING; strcpy(tag[nt],"ClusteringCovarFilenames"); addr[nt]=Files.ClusteringCovarFilenames; id[nt++]=STRING; strcpy(tag[nt],"LensingFilenames"); addr[nt]=Files.LensingFilenames; id[nt++]=STRING; FISHER = 0; strcpy(tag[nt],"FISHER"); addr[nt]=&FISHER; id[nt++]=INT; JPL_FLAG = 0; strcpy(tag[nt],"JPL_FLAG"); addr[nt]=&JPL_FLAG; id[nt++]=INT; wpl.dont_fit_lensing = 0; strcpy(tag[nt],"DONT_FIT_LENSING"); addr[nt]=&DONT_FIT_LENSING; id[nt++]=INT; wpl.dont_fit_clustering = 0; strcpy(tag[nt],"DONT_FIT_CLUSTERING"); addr[nt]=&DONT_FIT_CLUSTERING; id[nt++]=INT; wpl.dont_fit_smf = 0; strcpy(tag[nt],"DONT_FIT_SMF"); addr[nt]=&DONT_FIT_SMF; id[nt++]=INT; wpl.stepfac = 0; strcpy(tag[nt],"STEPFAC"); addr[nt]=&wpl.stepfac; id[nt++]=DOUBLE; wpl.stepfac_burn = 0.01; strcpy(tag[nt],"STEPFAC_BURN"); addr[nt]=&wpl.stepfac_burn; id[nt++]=DOUBLE; LENSING_OUTPUT_FLAG = 0; strcpy(tag[nt],"LENSING_OUTPUT_FLAG"); addr[nt]=&LENSING_OUTPUT_FLAG; id[nt++]=INT; strcpy(tag[nt],"RESTART"); addr[nt]=&RESTART; id[nt++]=INT; strcpy(tag[nt],"RESTART_FILE"); addr[nt]=&RESTART_FILE; id[nt++]=STRING; strcpy(tag[nt],"GAMMA"); addr[nt]=&GAMMA; id[nt++]=DOUBLE; strcpy(tag[nt],"OMEGA_M"); addr[nt]=&OMEGA_M; id[nt++]=DOUBLE; strcpy(tag[nt],"OMEGA_TEMP"); addr[nt]=&OMEGA_TEMP; id[nt++]=DOUBLE; strcpy(tag[nt],"OMEGA_B"); addr[nt]=&OMEGA_B; id[nt++]=DOUBLE; strcpy(tag[nt],"SIGMA_8"); addr[nt]=&SIGMA_8; id[nt++]=DOUBLE; strcpy(tag[nt],"RHO_CRIT"); addr[nt]=&RHO_CRIT; id[nt++]=DOUBLE; strcpy(tag[nt],"HUBBLE"); addr[nt]=&HUBBLE; id[nt++]=DOUBLE; strcpy(tag[nt],"REDSHIFT"); addr[nt]=&REDSHIFT; id[nt++]=DOUBLE; strcpy(tag[nt],"ITRANS"); addr[nt]=&ITRANS; id[nt++]=INT; strcpy(tag[nt],"LINEAR_PSP"); addr[nt]=&LINEAR_PSP; id[nt++]=INT; strcpy(tag[nt],"KAISER"); addr[nt]=&KAISER; id[nt++]=INT; strcpy(tag[nt],"BETA"); addr[nt]=&BETA; id[nt++]=DOUBLE; strcpy(tag[nt],"SIGV"); addr[nt]=&SIGV; id[nt++]=DOUBLE; strcpy(tag[nt],"IDUM_MCMC"); addr[nt]=&IDUM_MCMC_TEMP; id[nt++]=INT; strcpy(tag[nt],"SPECTRAL_INDX"); addr[nt]=&SPECTRAL_INDX; id[nt++]=DOUBLE; strcpy(tag[nt],"DELTA_CRIT"); addr[nt]=&DELTA_CRIT; id[nt++]=DOUBLE; strcpy(tag[nt],"DELTA_HALO"); addr[nt]=&DELTA_HALO; id[nt++]=DOUBLE; strcpy(tag[nt],"BOX_SIZE"); addr[nt]=&BOX_SIZE; id[nt++]=DOUBLE; strcpy(tag[nt],"RESOLUTION"); addr[nt]=&RESOLUTION; id[nt++]=DOUBLE; strcpy(tag[nt],"VBIAS"); addr[nt]=&VBIAS; id[nt++]=DOUBLE; strcpy(tag[nt],"VBIAS_C"); addr[nt]=&VBIAS_C; id[nt++]=DOUBLE; strcpy(tag[nt],"TF_file"); addr[nt]=Files.TF_file; id[nt++]=STRING; strcpy(tag[nt],"M1"); addr[nt]=&HOD.M1; id[nt++]=DOUBLE; strcpy(tag[nt],"M_min"); addr[nt]=&HOD.M_min; id[nt++]=DOUBLE; strcpy(tag[nt],"M_cen_max"); addr[nt]=&HOD.M_cen_max; id[nt++]=DOUBLE; strcpy(tag[nt],"M_cut"); addr[nt]=&HOD.M_cut; id[nt++]=DOUBLE; strcpy(tag[nt],"M_max"); addr[nt]=&HOD.M_max; id[nt++]=DOUBLE; strcpy(tag[nt],"sigma_logM"); addr[nt]=&HOD.sigma_logM; id[nt++]=DOUBLE; HOD.MaxCen=1; strcpy(tag[nt],"MaxCen"); addr[nt]=&HOD.MaxCen; id[nt++]=DOUBLE; strcpy(tag[nt],"alpha"); addr[nt]=&HOD.alpha; id[nt++]=DOUBLE; strcpy(tag[nt],"alpha1"); addr[nt]=&HOD.alpha1; id[nt++]=DOUBLE; strcpy(tag[nt],"M_sat_break"); addr[nt]=&HOD.M_sat_break; id[nt++]=DOUBLE; strcpy(tag[nt],"pdfc"); addr[nt]=&HOD.pdfc; id[nt++]=INT; strcpy(tag[nt],"pdf"); addr[nt]=&tempchar; id[nt++]=CHAR; strcpy(tag[nt],"pdfs"); addr[nt]=&HOD.pdfs; id[nt++]=INT; strcpy(tag[nt],"M_min_fac"); addr[nt]=&HOD.M_min_fac; id[nt++]=DOUBLE; /* Paramaters for the second HOD function * (for x-corr) */ strcpy(tag[nt],"XCORR"); addr[nt]=&XCORR; id[nt++]=INT; XCORR=0; strcpy(tag[nt],"GALAXY_DENSITY2"); addr[nt]=&GALAXY_DENSITY2; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M1"); addr[nt]=&HOD2.M1; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M_min"); addr[nt]=&HOD2.M_min; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M_cen_max"); addr[nt]=&HOD2.M_cen_max; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M_cut"); addr[nt]=&HOD2.M_cut; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M_max"); addr[nt]=&HOD2.M_max; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.sigma_logM"); addr[nt]=&HOD2.sigma_logM; id[nt++]=DOUBLE; HOD2.MaxCen=1; strcpy(tag[nt],"HOD2.MaxCen"); addr[nt]=&HOD2.MaxCen; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.alpha"); addr[nt]=&HOD2.alpha; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.alpha1"); addr[nt]=&HOD2.alpha1; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M_sat_break"); addr[nt]=&HOD2.M_sat_break; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.pdfc"); addr[nt]=&HOD2.pdfc; id[nt++]=INT; HOD2.pdfc=-1; strcpy(tag[nt],"HOD2.pdfs"); addr[nt]=&HOD2.pdfs; id[nt++]=INT; HOD2.pdfs=-1; /* Finished with HOD2 params */ strcpy(tag[nt],"color"); addr[nt]=&HOD.color; id[nt++]=INT; HOD.color=0; strcpy(tag[nt],"fblue0_cen"); addr[nt]=&HOD.fblue0_cen; id[nt++]=DOUBLE; strcpy(tag[nt],"sigma_fblue_cen"); addr[nt]=&HOD.sigma_fblue_cen; id[nt++]=DOUBLE; strcpy(tag[nt],"fblue0_sat"); addr[nt]=&HOD.fblue0_sat; id[nt++]=DOUBLE; strcpy(tag[nt],"sigma_fblue_sat"); addr[nt]=&HOD.sigma_fblue_sat; id[nt++]=DOUBLE; strcpy(tag[nt],"GALAXY_DENSITY"); addr[nt]=&GALAXY_DENSITY; id[nt++]=DOUBLE; strcpy(tag[nt],"EXCLUSION"); addr[nt]=&EXCLUSION; id[nt++]=INT; strcpy(tag[nt],"FIX_PARAM"); addr[nt]=&FIX_PARAM; id[nt++]=INT; strcpy(tag[nt],"POWELL"); addr[nt]=&POWELL; id[nt++]=INT; strcpy(tag[nt],"OUTPUT"); addr[nt]=&OUTPUT; id[nt++]=INT; for(i=0;i<=16;++i) { sprintf(tag[nt],"free[%d]",i); addr[nt]=&HOD.free[i]; id[nt++]=INT; } strcpy(tag[nt],"clustering"); addr[nt]=&Task.clustering; id[nt++]=INT; strcpy(tag[nt],"lensing"); addr[nt]=&Task.lensing; id[nt++]=INT; strcpy(tag[nt],"cvir"); addr[nt]=&Task.cvir; id[nt++]=INT; Task.cvir = 0; strcpy(tag[nt],"matter_xi"); addr[nt]=&Task.matter_xi; id[nt++]=INT; Task.matter_xi = 0; strcpy(tag[nt],"matter_pk"); addr[nt]=&Task.matter_pk; id[nt++]=INT; Task.matter_pk = 0; strcpy(tag[nt],"halostats"); addr[nt]=&Task.halostats; id[nt++]=INT; Task.halostats = 0; strcpy(tag[nt],"sigma_r"); addr[nt]=&Task.sigma_r; id[nt++]=INT; Task.sigma_r = 0; strcpy(tag[nt],"wp_minimize"); addr[nt]=&Task.wp_minimize; id[nt++]=INT; Task.wp_minimize=0; strcpy(tag[nt],"shmr_minimize"); addr[nt]=&Task.shmr_minimize; id[nt++]=INT; Task.shmr_minimize=0; strcpy(tag[nt],"MCMC"); addr[nt]=&Task.MCMC; id[nt++]=INT; Task.MCMC=0; strcpy(tag[nt],"populate_sim"); addr[nt]=&Task.populate_sim; id[nt++]=INT; Task.populate_sim=0; strcpy(tag[nt],"HaloFile"); addr[nt]=&Files.HaloFile; id[nt++]=STRING; strcpy(tag[nt],"HOD"); addr[nt]=&Task.HOD; id[nt++]=INT; Task.HOD=0; strcpy(tag[nt],"COVAR"); addr[nt]=&COVAR; id[nt++]=INT; COVAR=1; strcpy(tag[nt],"DEPROJECTED"); addr[nt]=&DEPROJECTED; id[nt++]=INT; strcpy(tag[nt],"fname_covar"); addr[nt]=&wp.fname_covar; id[nt++]=STRING; wp.pi_max=40; strcpy(tag[nt],"pi_max"); addr[nt]=&wp.pi_max; id[nt++]=DOUBLE; strcpy(tag[nt],"fname_wp"); addr[nt]=&wp.fname_wp; id[nt++]=STRING; strcpy(tag[nt],"root_filename"); addr[nt]=&Task.root_filename; id[nt++]=STRING; strcpy(tag[nt],"CVIR_FAC"); addr[nt]=&CVIR_FAC; id[nt++]=DOUBLE; if((fd=fopen(fname,"r"))) { nn=filesize(fd); sprintf(buf,"%s","hod-usedvalues"); if(!(fdout=fopen(buf,"w"))) { fprintf(stdout,"error opening file '%s' \n",buf); errorFlag=1; } else { /*while(!feof(fd))*/ for(ii=1;ii<=nn;++ii) { fgets(buf,200,fd); if(sscanf(buf,"%s%s%s",buf1,buf2,buf3)<2) continue; if(buf1[0]=='%') continue; for(i=0,j=-1;i<nt;i++) if(strcmp(buf1,tag[i])==0) { j=i; tag[i][0]=0; break; } if(j>=0) { switch(id[j]) { case DOUBLE: *((double*)addr[j])=atof(buf2); fprintf(fdout,"%-35s%g\n",buf1,*((double*)addr[j])); break; case STRING: strcpy(addr[j],buf2); fprintf(fdout,"%-35s%s\n",buf1,buf2); break; case INT: *((int*)addr[j])=atoi(buf2); fprintf(fdout,"%-35s%d\n",buf1,*((int*)addr[j])); break; case CHAR: *((char*)addr[j])=buf2[0]; fprintf(fdout,"%-35s%c\n",buf1,*((int*)addr[j])); break; } } else { fprintf(stderr,"Error in file %s: Tag '%s' not allowed or multiple defined.\n", fname,buf1); errorFlag=1; } } } fclose(fd); fclose(fdout); } else { fprintf(stderr,"Parameter file %s not found.\n", fname); exit(1); } /* Check the params for some basic interpretation */ MASS_PER_PARTICLE=pow(RESOLUTION,3.0)*RHO_CRIT*OMEGA_M; if(HOD.M_min<1.0E4 && HOD.M_min>0) { HOD.M_min=pow(RESOLUTION,3.0)*RHO_CRIT*OMEGA_M*HOD.M_min; fprintf(stderr,"HOD.M_min= %e\n",HOD.M_min); } if(HOD.M1<1.0E5) { HOD.M1=HOD.M1*MASS_PER_PARTICLE; fprintf(stderr,"HOD.M1= %e\n",HOD.M1); } /* SCale the M_max value by OMEGA_M=0.3 */ /* HOD.M_max*=(OMEGA_M/0.3); */ for(i=0;i<nt;i++) { if(!strcmp(tag[i],"SHMR.M1HighA") && SATELLITE_PARAMETERIZATION) { errorFlag=1; fprintf(stderr,"ERROR: missing SHMR.M1HighA when choosing extended SATELLITE_PARAMETERIZATION=1"); } if(!strcmp(tag[i],"SHMR.M1HighB") && SATELLITE_PARAMETERIZATION) { errorFlag=1; fprintf(stderr,"ERROR: missing SHMR.M1HighA when choosing extended SATELLITE_PARAMETERIZATION=1"); } if(!strcmp(tag[i],"SHMR.M1LowCut") && SATELLITE_PARAMETERIZATION) { errorFlag=1; fprintf(stderr,"ERROR: missing SHMR.M1HighA when choosing extended SATELLITE_PARAMETERIZATION=1"); } if(!strcmp(tag[i],"SHMR2.M1HighA") && SATELLITE_PARAMETERIZATION && COLOR) { errorFlag=1; fprintf(stderr,"ERROR: missing SHMR2.M1HighA when choosing extended SATELLITE_PARAMETERIZATION=1"); } if(!strcmp(tag[i],"SHMR2.M1HighB") && SATELLITE_PARAMETERIZATION && COLOR) { errorFlag=1; fprintf(stderr,"ERROR: missing SHMR2.M1HighA when choosing extended SATELLITE_PARAMETERIZATION=1"); } if(!strcmp(tag[i],"SHMR2.M1LowCut") && SATELLITE_PARAMETERIZATION && COLOR) { errorFlag=1; fprintf(stderr,"ERROR: missing SHMR2.M1HighA when choosing extended SATELLITE_PARAMETERIZATION=1"); } if(!strcmp(tag[i],"fit_for_bias"))continue; if(!strcmp(tag[i],"EXTERNAL_CONSTRAINTS"))continue; if(!strcmp(tag[i],"VARIABLE_EXCLUSION"))continue; if(!strcmp(tag[i],"EXCLUSION_RADIUS"))continue; if(!strcmp(tag[i],"VARIABLE_ALPHA"))continue; if(!strcmp(tag[i],"SATELLITE_PARAMETERIZATION"))continue; if(!strcmp(tag[i],"FISHER"))continue; if(!strcmp(tag[i],"JPL_FLAG"))continue; if(!strcmp(tag[i],"DONT_FIT_CLUSTERING"))continue; if(!strcmp(tag[i],"DONT_FIT_SMF"))continue; if(!strcmp(tag[i],"DONT_FIT_LENSING"))continue; if(!strcmp(tag[i],"STEPFAC"))continue; if(!strcmp(tag[i],"STEPFAC_BURN"))continue; if(!strcmp(tag[i],"LENSING_OUTPUT_FLAG"))continue; if(!strcmp(tag[i],"DENSITY_DEPENDENCE"))continue; if(!strcmp(tag[i],"DENSITY_THRESHOLD") && !DENSITY_DEPENDENCE)continue; if(!strcmp(tag[i],"M_min_fac") && !DENSITY_DEPENDENCE)continue; if(!strcmp(tag[i],"HaloDensityFile") && !DENSITY_DEPENDENCE)continue; if(!strcmp(tag[i],"HOD2.M_min") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.M_max") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.MaxCen") && !(HOD2.pdfc>=4 && HOD.pdfc<=6))continue; if(!strcmp(tag[i],"HOD2.M_cut") && HOD2.pdfs<2)continue; if(!strcmp(tag[i],"HOD2.M1") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.M_cen_max") && HOD2.pdfc!=7)continue; if(!strcmp(tag[i],"HOD2.sigma_logM") && (!XCORR || (HOD2.pdfc==1 || HOD2.pdfc==7)))continue; if(!strcmp(tag[i],"HOD2.pdfs") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.pdfc") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.alpha") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.alpha1") && HOD2.pdfs!=4 && HOD2.pdfs!=5)continue; if(!strcmp(tag[i],"HOD2.M_sat_break") && HOD2.pdfs!=4 && HOD2.pdfs!=5)continue; if(!strcmp(tag[i],"GALAXY_DENSITY2") && !XCORR)continue; if(!strcmp(tag[i],"XCORR"))continue; if(!strcmp(tag[i],"alpha1"))continue; if(!strcmp(tag[i],"M_sat_break"))continue; if(!strcmp(tag[i],"OMEGA_TEMP")) { OMEGA_TEMP = OMEGA_M; continue; } if(!strcmp(tag[i],"pdf"))continue; if(!strcmp(tag[i],"REDSHIFT"))continue; if(!strcmp(tag[i],"WP_ONLY"))continue; if(!strcmp(tag[i],"RESTART"))continue; if(!strcmp(tag[i],"RESTART_FILE") && RESTART==0)continue; if(!strcmp(tag[i],"DEPROJECTED"))continue; if(!strcmp(tag[i],"POWELL"))continue; if(!strcmp(tag[i],"LINEAR_PSP"))continue; if(!strcmp(tag[i],"BOX_SIZE"))continue; if(!strcmp(tag[i],"RESOLUTION"))continue; if(!strcmp(tag[i],"DELTA_HALO"))continue; if(!strcmp(tag[i],"VBIAS"))continue; if(!strcmp(tag[i],"COVAR"))continue; if(!strcmp(tag[i],"VBIAS_C"))continue; if(!strcmp(tag[i],"CVIR_FAC"))continue; if(!strcmp(tag[i],"ITRANS"))continue; if(!strcmp(tag[i],"IDUM_MCMC"))continue; if(!strcmp(tag[i],"FIX_PARAM"))continue; if(!strcmp(tag[i],"DEPROJECTED"))continue; if(!strcmp(tag[i],"OUTPUT"))continue; if(!strcmp(tag[i],"JENKINS_A"))continue; if(!strcmp(tag[i],"JENKINS_B"))continue; if(!strcmp(tag[i],"JENKINS_C"))continue; if(!strcmp(tag[i],"BEST_FIT"))continue; if(!strcmp(tag[i],"KAISER"))continue; if(!strcmp(tag[i],"SIGV"))continue; if(!strcmp(tag[i],"BETA"))continue; if(!strcmp(tag[i],"HUBBLE"))continue; if(!strcmp(tag[i],"OMEGA_B"))continue; if(!strcmp(tag[i],"MCMC"))continue; if(!strcmp(tag[i],"wp_minimize"))continue; if(!strcmp(tag[i],"wp_format"))continue; if(!strcmp(tag[i],"n_wp"))continue; if(!strcmp(tag[i],"wp_npca"))continue; if(!strcmp(tag[i],"zspace_minimize"))continue; if(!strcmp(tag[i],"pi_max"))continue; if(!strcmp(tag[i],"esys"))continue; if(HOD.color) { if(!strcmp(tag[i],"fblue0_cen") || !strcmp(tag[i],"sigma_fblue_cen") || !strcmp(tag[i],"fblue0_sat") || !strcmp(tag[i],"sigma_fblue_sat")) { fprintf(stderr,"Parameters for color HOD not specified.\n"); exit(0); } continue; } if(!strcmp(tag[i],"color"))continue; if(!strcmp(tag[i],"fblue0_cen"))continue; if(!strcmp(tag[i],"sigma_fblue_cen"))continue; if(!strcmp(tag[i],"fblue0_sat"))continue; if(!strcmp(tag[i],"sigma_fblue_sat"))continue; if(!strcmp(tag[i],"red_central_fraction[1]"))continue; if(!strcmp(tag[i],"red_central_fraction[2]"))continue; if(!strcmp(tag[i],"red_central_fraction[3]"))continue; if(!strcmp(tag[i],"red_central_fraction[4]"))continue; if(!strcmp(tag[i],"red_central_fraction[5]"))continue; if(!strcmp(tag[i],"red_central_fraction[6]"))continue; if(!strcmp(tag[i],"red_central_fraction[7]"))continue; if(!strcmp(tag[i],"red_central_fraction[8]"))continue; if(!strcmp(tag[i],"red_central_fraction[9]"))continue; if(!strcmp(tag[i],"red_central_fraction[10]"))continue; if(!strcmp(tag[i],"red_central_nbin"))continue; if(!strcmp(tag[i],"free[0]"))continue; if(!strcmp(tag[i],"free[1]"))continue; if(!strcmp(tag[i],"free[2]"))continue; if(!strcmp(tag[i],"free[3]"))continue; if(!strcmp(tag[i],"free[4]"))continue; if(!strcmp(tag[i],"free[5]"))continue; if(!strcmp(tag[i],"free[6]"))continue; if(!strcmp(tag[i],"free[7]"))continue; if(!strcmp(tag[i],"free[8]"))continue; if(!strcmp(tag[i],"free[9]"))continue; if(!strcmp(tag[i],"free[10]"))continue; if(!strcmp(tag[i],"free[11]"))continue; if(!strcmp(tag[i],"free[12]"))continue; if(!strcmp(tag[i],"free[13]"))continue; if(!strcmp(tag[i],"free[14]"))continue; if(!strcmp(tag[i],"free[15]"))continue; if(!strcmp(tag[i],"free[16]"))continue; if(!strcmp(tag[i],"All"))continue; if(!strcmp(tag[i],"populate_sim"))continue; if(!strcmp(tag[i],"HaloFile"))continue; if(!strcmp(tag[i],"HOD"))continue; if(!strcmp(tag[i],"PCA"))continue; if(!strcmp(tag[i],"SMF_PCA"))continue; if(!strcmp(tag[i],"PVD"))continue; if(!strcmp(tag[i],"matter_xi"))continue; if(!strcmp(tag[i],"matter_pk"))continue; if(!strcmp(tag[i],"sigma_r"))continue; if(!strcmp(tag[i],"kaiser_xi"))continue; if(!strcmp(tag[i],"cvir"))continue; if(!strcmp(tag[i],"StellarMassBinsClustering")) { Files.UseStellarMassBinsClustering = 0; continue; } if(!strcmp(tag[i],"StellarMassBinsLensing")) { Files.UseStellarMassBinsLensing = 0; continue; } if(!strcmp(tag[i],"TF_file")) { if(ITRANS==11) { sprintf(Files.TF_file,"CMBFAST_trans.dat"); fprintf(stderr,"No transfer function file, using [%s]\n",Files.TF_file); } continue; } if(!strcmp(tag[i],"fname_covar")) { if(Task.wp_minimize) { fprintf(stderr,"No filename specified for covariance matrix.\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"fname_wp")) { if(Task.wp_minimize) { fprintf(stderr,"No filename specified for wp data.\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"M_cut")) { if(HOD.pdfs==2 || HOD.pdfs==3){ fprintf(stderr,"No value for M_cut given for pdfs= 2/3\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"M_cen_max")) { if(HOD.pdfc==7) { fprintf(stderr,"No value for M_cen_max given for pdfc= 7\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"sigma_logM")) { if(HOD.pdfc==2){ fprintf(stderr,"No value for sigma_logM given for pdfc=2\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"MaxCen")) { if(HOD.pdfc==5){ fprintf(stderr,"No value for MaxCen given for pdfc=5\n"); errorFlag=1; } continue; } if(*tag[i]) { fprintf(stderr,"Error. I miss a value for tag '%s' in parameter file '%s'.\n", tag[i],fname); errorFlag=1; } } if(PCA==1 && COVAR==1) { fprintf(stderr,"EEROR: you have both PCA and COVAR set to 1.\n"); errorFlag=1; } IDUM_MCMC=IDUM_MCMC_TEMP; MCMC = Task.MCMC; if(errorFlag) endrun("error in input_params "); /* See if we need to calc HOD.M_max */ if(HOD.M_max<=0) { if(BOX_SIZE<=0) endrun("ERROR: M_max<=0 but not BOX_SIZE set!\n"); HOD.M_max = find_maximum_halo_mass(); printf("main> Setting HOD.M_max= %e for BOX_SIZE= %f\n",HOD.M_max,BOX_SIZE); } /* Other initialization stuff. */ MSTAR=mstar(); set_HOD_params(); if(COLOR == 0) BLUE_FLAG = 1; #undef DOUBLE #undef STRING #undef INT #undef MAXTAGS }
void populate_simulation_hod() { FILE *fp,*fpa[9],*fp2,*fpb[9],*fpc[9],*fps[9],*fpt; int i,j,k,n,imass,n1,j_start=0,i1,galcnt[1000],halocnt[1000],imag; double mass,xg[3],vg[3],nsat,nc[10],ncen,mlo,mag,err1,err2,r,fac,sigv; char aa[1000]; float x1,xh[3],vh[3],vgf[3]; long IDUM3 = -445; float **galarr; int *galid,id1=0,id2=0,j1; float dx,dy,dz,dr,drh,rv1,rv2,rmin,rmax; float **haloarr; int ngal,nsati[9],ALL_FILES=0,TRACK_GALAXIES=0,WARREN_MASS_CORRECTION=0,haloid; float *xt,*yt,*zt,*vxt,*vyt,*vzt; int SO_FILE = 1, JEANS_DISPERSION = 0; // if(RESOLUTION > 1.6) // WARREN_MASS_CORRECTION = 1; TRACK_GALAXIES=1; galarr = matrix(1,10000000,0,5); haloarr = matrix(1,10000000,0,6); galid = ivector(1,10000000); fp=openfile(Files.HaloFile); sprintf(aa,"%s.mock",Task.root_filename); fp2 = fopen(aa,"w"); sprintf(aa,"%s.mock_halo",Task.root_filename); fpt = fopen(aa,"w"); for(i=0;i<1000;++i) halocnt[i]=0; for(i=0;i<1000;++i) galcnt[i]=0; set_HOD_params(); mlo = HOD.M_low; printf("MLO %e %e %f\n",mlo,HOD.M_min,HOD.sigma_logM); printf("BOX_SIZE %f\n",BOX_SIZE); fflush(stdout); haloid = 0; while(!feof(fp)) { if(SO_FILE) { fscanf(fp,"%d %lf %f %f %f %f %f %f %f %f", &i,&mass,&x1,&x1,&xh[0],&xh[1],&xh[2],&vh[0],&vh[1],&vh[2]); fgets(aa,1000,fp); /* fac=sqrt(4.499E-48)*pow(4*DELTA_HALO*PI*OMEGA_M*RHO_CRIT/3,1.0/6.0)*3.09E19; sigv=fac*pow(mass,1.0/3.0)/sqrt(2.0); printf("%e %e %f\n",mass,sigv,VBIAS); if(i==2) one_halo(1,1); */ //haloid = i; } else { fscanf(fp,"%d %d %e %e %e %e %e %e %e", &i,&imass,&xh[0],&xh[1],&xh[2],&x1,&vh[0],&vh[1],&vh[2]); mass=imass*RHO_CRIT*OMEGA_M*pow(RESOLUTION,3.0); } haloid++; //in case it's not iterated in the file if(mass>HOD.M_max)continue; if(WARREN_MASS_CORRECTION) mass = imass*(1-pow(imass,-0.6))*RHO_CRIT*OMEGA_M*pow(RESOLUTION,3.0); if(mass<mlo)continue; for(i=0;i<3;++i) { if(xh[i]<0)xh[i]+=BOX_SIZE; if(xh[i]>BOX_SIZE)xh[i]-=BOX_SIZE; } i1 = (int)(log10(mass)/0.1); halocnt[i1]++; ncen=N_cen(mass); if(drand48()>ncen)goto SATELLITES; if(VBIAS_C>0) { NFW_central_velocity(mass,vg,mag); for(i=0;i<3;++i) vh[i]+=vg[i]; } fprintf(fp2,"%e %e %e %e %e %e\n",xh[0],xh[1],xh[2],vh[0],vh[1],vh[2]); fprintf(fpt,"%d\n",haloid); // THis mocks up the ~22 columns of the MR mocks // fprintf(fpt,"%d %d %d %e %e %e 0.0 0.0 0.0 %e %e %e 0.0 0.0 0.0 0.0 0.0 0.0 %e 0.0 0.0\n", // 0,0,0,xh[0],xh[1],xh[2],vh[0],vh[1],vh[2],log10(mass)); if(VBIAS_C>0) { for(i=0;i<3;++i) vh[i]-=vg[i]; } galcnt[i1]++; if(TRACK_GALAXIES) { id2++; galid[id2] = haloid; galarr[id2][0] = xh[0]; galarr[id2][1] = xh[1]; galarr[id2][2] = xh[2]; galarr[id2][3] = vh[0]; galarr[id2][4] = vh[1]; galarr[id2][5] = vh[2]; } if(TRACK_GALAXIES) { id1++; haloarr[id1][0] = xh[0]; haloarr[id1][1] = xh[1]; haloarr[id1][2] = xh[2]; haloarr[id1][3] = vh[0]; haloarr[id1][4] = vh[1]; haloarr[id1][5] = vh[2]; haloarr[id1][6] = mass; } SATELLITES: nsat = N_sat(mass); if(nsat>250) n1 = gasdev(&IDUM3)*sqrt(nsat) + nsat; else n1 = poisson_deviate(nsat); /* if(nsat>1) fprintf(stdout,"BUH %d %f %e %d %e %f\n",haloid,nsat,mass,n1,HOD.M1,pow(mass/HOD.M1,HOD.alpha)); */ for(i=1;i<=n1;++i) { r = NFW_position(mass,xg); if(JEANS_DISPERSION) jeans_dispersion(mass,r,vg); else NFW_velocity(mass,vg,mag); for(k=0;k<3;++k) { xg[k]+=xh[k]; if(xg[k]<0)xg[k]+=BOX_SIZE; if(xg[k]>BOX_SIZE)xg[k]-=BOX_SIZE; vg[k]+=vh[k]; /* vg[k] = vgf[k]; */ /* vg[k] = gasdev(&IDUM3)*500; vg[k] = non_gaussian_velocity(); */ } fprintf(fp2,"%e %e %e %e %e %e\n",xg[0],xg[1],xg[2],vg[0],vg[1],vg[2]); fprintf(fpt,"%d\n",haloid); // fprintf(fpt,"%d %d %d %e %e %e 0.0 0.0 0.0 %e %e %e 0.0 0.0 0.0 0.0 0.0 0.0 %e 0.0 0.0\n",1,1,1,xg[0],xg[1],xg[2],vg[0],vg[1],vg[2],log10(mass)); if(TRACK_GALAXIES) { id2++; galid[id2] = haloid; galarr[id2][0] = xg[0]; galarr[id2][1] = xg[1]; galarr[id2][2] = xg[2]; galarr[id2][3] = vg[0]; galarr[id2][4] = vg[1]; galarr[id2][5] = vg[2]; } /* Bin up the galaxies by halo mass to check the HOD */ galcnt[i1]++; } if(feof(fp))break; } fclose(fp2); fclose(fpt); /* output the binned HOD */ sprintf(aa,"%s.binned_HOD",Task.root_filename); fp2=fopen(aa,"w"); for(i=0;i<1000;++i) if(galcnt[i]>0) fprintf(fp2,"%d %f %f %d %d\n", i,(i+0.5)*0.1,(float)galcnt[i]/halocnt[i],galcnt[i],halocnt[i]); fclose(fp2); /* Calculate the two-halo term */ if(TRACK_GALAXIES) { fprintf(stderr,"Calling nbody_2halo...\n"); calc_nbody_two_halo(galarr,galid,id2); } return ; /* Track the close pairs - for Non-Tinkers, don't worry about this. */ rmin = 1.5; rmax = 2.5; for(i=1;i<=id2;++i) for(j=i+1;j<=id2;++j) { if(galid[i]==galid[j])continue; dx = galarr[i][0] - galarr[j][0]; if(dx>BOX_SIZE/2)dx = BOX_SIZE-dx; if(dx>rmax)continue; dy = galarr[i][1] - galarr[j][1]; if(dy>BOX_SIZE/2)dy = BOX_SIZE-dy; if(dy>rmax)continue; dz = galarr[i][2] - galarr[j][2]; if(dz>BOX_SIZE/2)dz = BOX_SIZE-dz; if(dz>rmax)continue; dr = sqrt(dx*dx+dy*dy+dz*dz); if(dr<rmin || dr>rmax)continue; i1 = galid[i]; j1 = galid[j]; dx = haloarr[i1][0] - haloarr[j1][0]; if(dx>BOX_SIZE/2)dx = BOX_SIZE-dx; dy = haloarr[i1][1] - haloarr[j1][1]; if(dy>BOX_SIZE/2)dy = BOX_SIZE-dy; dz = haloarr[i1][2] - haloarr[j1][2]; if(dz>BOX_SIZE/2)dz = BOX_SIZE-dz; drh = sqrt(dx*dx+dy*dy+dz*dz); rv1 = pow(3*haloarr[i1][6]/(4*DELTA_HALO*PI*RHO_CRIT*OMEGA_M),1.0/3.0); rv2 = pow(3*haloarr[j1][6]/(4*DELTA_HALO*PI*RHO_CRIT*OMEGA_M),1.0/3.0); if(dr < rv1+rv2) { dx = galarr[i][3] - galarr[j][3]; dy = galarr[i][4] - galarr[j][4]; dz = galarr[i][5] - galarr[j][5]; printf("%e %e %e %e %e %e %e\n",dr,rv1+rv2,haloarr[i1][6],haloarr[j1][6],dx,dy,dz); fflush(stdout); } } exit(0); }
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); }
/* * This function parses the parameterfile in a simple way. * Each paramater is defined by a keyword (`tag'), and can be * either of type douple, int, or character string. * The routine makes sure that each parameter appears * exactly once in the parameterfile. */ void read_parameter_file(char *fname) { #define DOUBLE 1 #define STRING 2 #define INT 3 #define CHAR 4 #define LONG 4 #define MAXTAGS 300 FILE *fd,*fdout; char buf[200],buf1[200],buf2[200],buf3[200],tempchar; int i,j,nt,ii,nn,ctemp; int id[MAXTAGS]; void *addr[MAXTAGS]; char tag[MAXTAGS][200]; int errorFlag=0; int IDUM_MCMC_TEMP=-555; nt=0; fprintf(stdout,"Tags are %i of %d\n",nt,MAXTAGS); strcpy(tag[nt],"RESTART"); addr[nt]=&RESTART; id[nt++]=INT; strcpy(tag[nt],"RESTART_FILE"); addr[nt]=&RESTART_FILE; id[nt++]=STRING; strcpy(tag[nt],"GAMMA"); addr[nt]=&GAMMA; id[nt++]=DOUBLE; strcpy(tag[nt],"OMEGA_M"); addr[nt]=&OMEGA_M; id[nt++]=DOUBLE; strcpy(tag[nt],"OMEGA_TEMP"); addr[nt]=&OMEGA_TEMP; id[nt++]=DOUBLE; strcpy(tag[nt],"OMEGA_B"); addr[nt]=&OMEGA_B; id[nt++]=DOUBLE; strcpy(tag[nt],"SIGMA_8"); addr[nt]=&SIGMA_8; id[nt++]=DOUBLE; strcpy(tag[nt],"RHO_CRIT"); addr[nt]=&RHO_CRIT; id[nt++]=DOUBLE; strcpy(tag[nt],"HUBBLE"); addr[nt]=&HUBBLE; id[nt++]=DOUBLE; strcpy(tag[nt],"REDSHIFT"); addr[nt]=&REDSHIFT; id[nt++]=DOUBLE; strcpy(tag[nt],"ITRANS"); addr[nt]=&ITRANS; id[nt++]=INT; strcpy(tag[nt],"LINEAR_PSP"); addr[nt]=&LINEAR_PSP; id[nt++]=INT; strcpy(tag[nt],"KAISER"); addr[nt]=&KAISER; id[nt++]=INT; strcpy(tag[nt],"BETA"); addr[nt]=&BETA; id[nt++]=DOUBLE; strcpy(tag[nt],"SIGV"); addr[nt]=&SIGV; id[nt++]=DOUBLE; strcpy(tag[nt],"IDUM_MCMC"); addr[nt]=&IDUM_MCMC_TEMP; id[nt++]=INT; strcpy(tag[nt],"SPECTRAL_INDX"); addr[nt]=&SPECTRAL_INDX; id[nt++]=DOUBLE; strcpy(tag[nt],"DELTA_CRIT"); addr[nt]=&DELTA_CRIT; id[nt++]=DOUBLE; strcpy(tag[nt],"DELTA_HALO"); addr[nt]=&DELTA_HALO; id[nt++]=DOUBLE; strcpy(tag[nt],"BOX_SIZE"); addr[nt]=&BOX_SIZE; id[nt++]=DOUBLE; strcpy(tag[nt],"RESOLUTION"); addr[nt]=&RESOLUTION; id[nt++]=DOUBLE; strcpy(tag[nt],"VBIAS"); addr[nt]=&VBIAS; id[nt++]=DOUBLE; strcpy(tag[nt],"VBIAS_C"); addr[nt]=&VBIAS_C; id[nt++]=DOUBLE; //Added scale-dep bias parameters strcpy(tag[nt],"HBIAS_C1"); addr[nt]=&HBIAS_C1; id[nt++]=DOUBLE; strcpy(tag[nt],"HBIAS_C2"); addr[nt]=&HBIAS_C2; id[nt++]=DOUBLE; strcpy(tag[nt],"HBIAS_D1"); addr[nt]=&HBIAS_D1; id[nt++]=DOUBLE; strcpy(tag[nt],"HBIAS_D2"); addr[nt]=&HBIAS_D2; id[nt++]=DOUBLE; strcpy(tag[nt],"TF_file"); addr[nt]=Files.TF_file; id[nt++]=STRING; strcpy(tag[nt],"M1"); addr[nt]=&HOD.M1; id[nt++]=DOUBLE; strcpy(tag[nt],"M_min"); addr[nt]=&HOD.M_min; id[nt++]=DOUBLE; strcpy(tag[nt],"M_cen_max"); addr[nt]=&HOD.M_cen_max; id[nt++]=DOUBLE; strcpy(tag[nt],"M_cut"); addr[nt]=&HOD.M_cut; id[nt++]=DOUBLE; strcpy(tag[nt],"M_max"); addr[nt]=&HOD.M_max; id[nt++]=DOUBLE; strcpy(tag[nt],"sigma_logM"); addr[nt]=&HOD.sigma_logM; id[nt++]=DOUBLE; HOD.MaxCen=1; strcpy(tag[nt],"MaxCen"); addr[nt]=&HOD.MaxCen; id[nt++]=DOUBLE; strcpy(tag[nt],"alpha"); addr[nt]=&HOD.alpha; id[nt++]=DOUBLE; strcpy(tag[nt],"alpha1"); addr[nt]=&HOD.alpha1; id[nt++]=DOUBLE; strcpy(tag[nt],"M_sat_break"); addr[nt]=&HOD.M_sat_break; id[nt++]=DOUBLE; strcpy(tag[nt],"M_cen_lin"); addr[nt]=&HOD.M_cen_lin; id[nt++]=DOUBLE; strcpy(tag[nt],"pdfc"); addr[nt]=&HOD.pdfc; id[nt++]=INT; strcpy(tag[nt],"pdf"); addr[nt]=&tempchar; id[nt++]=CHAR; strcpy(tag[nt],"pdfs"); addr[nt]=&HOD.pdfs; id[nt++]=INT; strcpy(tag[nt],"M_min_fac"); addr[nt]=&HOD.M_min_fac; id[nt++]=DOUBLE; /* Paramaters for the second HOD function * (for x-corr) */ strcpy(tag[nt],"XCORR"); addr[nt]=&XCORR; id[nt++]=INT; XCORR=0; strcpy(tag[nt],"GALAXY_DENSITY2"); addr[nt]=&GALAXY_DENSITY2; id[nt++]=DOUBLE; strcpy(tag[nt],"GALDENS_ERR2"); addr[nt]=&GALDENS_ERR2; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M1"); addr[nt]=&HOD2.M1; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M_min"); addr[nt]=&HOD2.M_min; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M_cen_max"); addr[nt]=&HOD2.M_cen_max; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M_cut"); addr[nt]=&HOD2.M_cut; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M_max"); addr[nt]=&HOD2.M_max; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.sigma_logM"); addr[nt]=&HOD2.sigma_logM; id[nt++]=DOUBLE; HOD2.MaxCen=1; strcpy(tag[nt],"HOD2.MaxCen"); addr[nt]=&HOD2.MaxCen; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.alpha"); addr[nt]=&HOD2.alpha; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.alpha1"); addr[nt]=&HOD2.alpha1; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.M_sat_break"); addr[nt]=&HOD2.M_sat_break; id[nt++]=DOUBLE; strcpy(tag[nt],"HOD2.pdfc"); addr[nt]=&HOD2.pdfc; id[nt++]=INT; HOD2.pdfc=-1; strcpy(tag[nt],"HOD2.pdfs"); addr[nt]=&HOD2.pdfs; id[nt++]=INT; HOD2.pdfs=-1; /* Finished with HOD2 params */ strcpy(tag[nt],"color"); addr[nt]=&HOD.color; id[nt++]=INT; HOD.color=0; strcpy(tag[nt],"fblue0_cen"); addr[nt]=&HOD.fblue0_cen; id[nt++]=DOUBLE; strcpy(tag[nt],"sigma_fblue_cen"); addr[nt]=&HOD.sigma_fblue_cen; id[nt++]=DOUBLE; strcpy(tag[nt],"fblue0_sat"); addr[nt]=&HOD.fblue0_sat; id[nt++]=DOUBLE; strcpy(tag[nt],"sigma_fblue_sat"); addr[nt]=&HOD.sigma_fblue_sat; id[nt++]=DOUBLE; strcpy(tag[nt],"GALAXY_DENSITY"); addr[nt]=&GALAXY_DENSITY; id[nt++]=DOUBLE; strcpy(tag[nt],"GALDENS_ERR"); addr[nt]=&GALDENS_ERR; id[nt++]=DOUBLE; strcpy(tag[nt],"EXCLUSION"); addr[nt]=&EXCLUSION; id[nt++]=INT; strcpy(tag[nt],"FIX_PARAM"); addr[nt]=&FIX_PARAM; id[nt++]=INT; strcpy(tag[nt],"POWELL"); addr[nt]=&POWELL; id[nt++]=INT; strcpy(tag[nt],"OUTPUT"); addr[nt]=&OUTPUT; id[nt++]=INT; for(i=0;i<=21;++i) { sprintf(tag[nt],"free[%d]",i); addr[nt]=&HOD.free[i]; id[nt++]=INT; } strcpy(tag[nt],"All"); addr[nt]=&Task.All; id[nt++]=INT; strcpy(tag[nt],"real_space_xi"); addr[nt]=&Task.real_space_xi; id[nt++]=INT; strcpy(tag[nt],"z_space_xi"); addr[nt]=&Task.z_space_xi; id[nt++]=INT; strcpy(tag[nt],"kaiser_xi"); addr[nt]=&Task.kaiser_xi; id[nt++]=INT; strcpy(tag[nt],"multipoles"); addr[nt]=&Task.multipoles; id[nt++]=INT; strcpy(tag[nt],"r_half"); addr[nt]=&Task.r_half; id[nt++]=INT; strcpy(tag[nt],"PVD"); addr[nt]=&Task.PVD; id[nt++]=INT; Task.PVD = 0; strcpy(tag[nt],"cvir"); addr[nt]=&Task.cvir; id[nt++]=INT; Task.cvir = 0; strcpy(tag[nt],"massfunc"); addr[nt]=&Task.massfunc; id[nt++]=INT; Task.cvir = 0; strcpy(tag[nt],"matter_xi"); addr[nt]=&Task.matter_xi; id[nt++]=INT; Task.matter_xi = 0; strcpy(tag[nt],"matter_pk"); addr[nt]=&Task.matter_pk; id[nt++]=INT; Task.matter_pk = 0; strcpy(tag[nt],"sigma_r"); addr[nt]=&Task.sigma_r; id[nt++]=INT; Task.sigma_r = 0; strcpy(tag[nt],"wp_minimize"); addr[nt]=&Task.wp_minimize; id[nt++]=INT; Task.wp_minimize=0; strcpy(tag[nt],"m2n_minimize"); addr[nt]=&Task.m2n_minimize; id[nt++]=INT; Task.m2n_minimize=0; strcpy(tag[nt],"zspace_minimize"); addr[nt]=&Task.zspace_minimize; id[nt++]=INT; Task.zspace_minimize=0; strcpy(tag[nt],"MCMC"); addr[nt]=&Task.MCMC; id[nt++]=INT; Task.MCMC=0; strcpy(tag[nt],"populate_sim"); addr[nt]=&Task.populate_sim; id[nt++]=INT; Task.populate_sim=0; strcpy(tag[nt],"HaloFile"); addr[nt]=&Files.HaloFile; id[nt++]=STRING; strcpy(tag[nt],"HaloDensityFile"); addr[nt]=&Files.HaloDensityFile; id[nt++]=STRING; //Added to supply input covariance matrix for MCMC strcpy(tag[nt],"CovarMCMCFile"); addr[nt]=&Files.CovarMCMCFile; id[nt++]=STRING; Files.i_CovarMCMC=1; strcpy(tag[nt],"DENSITY_DEPENDENCE"); addr[nt]=&DENSITY_DEPENDENCE; id[nt++]=INT; strcpy(tag[nt],"DENSITY_THRESHOLD"); addr[nt]=&DENSITY_THRESHOLD; id[nt++]=DOUBLE; strcpy(tag[nt],"WP_ONLY"); addr[nt]=&WP_ONLY; id[nt++]=INT; strcpy(tag[nt],"M2N"); addr[nt]=&Task.M2N; id[nt++]=INT; Task.M2N=0; strcpy(tag[nt],"M2N_type"); addr[nt]=&Task.M2N_type; id[nt++]=INT; Task.M2N_type=0; strcpy(tag[nt],"HOD"); addr[nt]=&Task.HOD; id[nt++]=INT; Task.HOD=0; strcpy(tag[nt],"COVAR"); addr[nt]=&COVAR; id[nt++]=INT; COVAR=1; strcpy(tag[nt],"MN_COVAR"); addr[nt]=&MN_COVAR; id[nt++]=INT; MN_COVAR=1; strcpy(tag[nt],"PCA"); addr[nt]=&PCA; id[nt++]=INT; PCA=0; strcpy(tag[nt],"wp_npca"); addr[nt]=&wp.npca; id[nt++]=INT; wp.npca=0; strcpy(tag[nt],"DEPROJECTED"); addr[nt]=&DEPROJECTED; id[nt++]=INT; strcpy(tag[nt],"fname_covar"); addr[nt]=&wp.fname_covar; id[nt++]=STRING; strcpy(tag[nt],"mn_fname_covar"); addr[nt]=&M2N_mass.fname_covar; id[nt++]=STRING; wp.pi_max=40; strcpy(tag[nt],"pi_max"); addr[nt]=&wp.pi_max; id[nt++]=DOUBLE; strcpy(tag[nt],"esys"); addr[nt]=&wp.esys; id[nt++]=DOUBLE; strcpy(tag[nt],"fname_wp"); addr[nt]=&wp.fname_wp; id[nt++]=STRING; wp.format=1; strcpy(tag[nt],"wp_format"); addr[nt]=&wp.format; id[nt++]=INT; wp.n_wp=9; strcpy(tag[nt],"n_wp"); addr[nt]=&wp.n_wp; id[nt++]=INT; strcpy(tag[nt],"root_filename"); addr[nt]=&Task.root_filename; id[nt++]=STRING; strcpy(tag[nt],"CVIR_FAC"); addr[nt]=&CVIR_FAC; id[nt++]=DOUBLE; strcpy(tag[nt],"JENKINS_A"); addr[nt]=&JENKINS_A; id[nt++]=DOUBLE; strcpy(tag[nt],"JENKINS_C"); addr[nt]=&JENKINS_C; id[nt++]=DOUBLE; strcpy(tag[nt],"JENKINS_B"); addr[nt]=&JENKINS_B; id[nt++]=DOUBLE; strcpy(tag[nt],"BEST_FIT"); addr[nt]=&BEST_FIT; id[nt++]=INT; /* M2N filename and params */ strcpy(tag[nt],"m2n_filename"); addr[nt]=&M2N_mass.filename; id[nt++]=STRING; /* Input filename and parameters for w(theta) calculations */ strcpy(tag[nt],"FIT_WTHETA"); addr[nt]=&Task.FIT_WTHETA; id[nt++]=INT; Task.FIT_WTHETA=0; strcpy(tag[nt],"fname_nz"); addr[nt]=&wp.fname_nz; id[nt++]=STRING; wp.np_nz=0; strcpy(tag[nt],"angular_xi"); addr[nt]=&Task.angular_xi; id[nt++]=INT; Task.angular_xi = 0; //Whether to print the bias(M) strcpy(tag[nt],"print_bias"); addr[nt]=&Task.print_bias; id[nt++]=INT; Task.print_bias = 0; /* Input parameters for correctly handling redshift range for number density */ strcpy(tag[nt],"REDSHIFT_MIN"); addr[nt]=&REDSHIFT_MIN; id[nt++]=DOUBLE; REDSHIFT_MIN=-1; strcpy(tag[nt],"REDSHIFT_MAX"); addr[nt]=&REDSHIFT_MAX; id[nt++]=DOUBLE; REDSHIFT_MAX=-1; if((fd=fopen(fname,"r"))) { nn=filesize(fd); sprintf(buf,"%s","hod-usedvalues"); if(!(fdout=fopen(buf,"w"))) { fprintf(stdout,"error opening file '%s' \n",buf); errorFlag=1; } else { /*while(!feof(fd))*/ for(ii=1;ii<=nn;++ii) { fgets(buf,200,fd); if(sscanf(buf,"%s%s%s",buf1,buf2,buf3)<2) continue; if(buf1[0]=='%') continue; for(i=0,j=-1;i<nt;i++) if(strcmp(buf1,tag[i])==0) { j=i; tag[i][0]=0; break; } if(j>=0) { switch(id[j]) { case DOUBLE: *((double*)addr[j])=atof(buf2); fprintf(fdout,"%-35s%g\n",buf1,*((double*)addr[j])); break; case STRING: strcpy(addr[j],buf2); fprintf(fdout,"%-35s%s\n",buf1,buf2); break; case INT: *((int*)addr[j])=atoi(buf2); fprintf(fdout,"%-35s%d\n",buf1,*((int*)addr[j])); break; case CHAR: *((char*)addr[j])=buf2[0]; fprintf(fdout,"%-35s%c\n",buf1,*((int*)addr[j])); break; } } else { fprintf(stderr,"Error in file %s: Tag '%s' not allowed or multiple defined.\n", fname,buf1); errorFlag=1; } } } fclose(fd); fclose(fdout); } else { fprintf(stderr,"Parameter file %s not found.\n", fname); exit(1); } /* Check the params for some basic interpretation */ MASS_PER_PARTICLE=pow(RESOLUTION,3.0)*RHO_CRIT*OMEGA_M; if(HOD.M_min<1.0E4 && HOD.M_min>0) { HOD.M_min=pow(RESOLUTION,3.0)*RHO_CRIT*OMEGA_M*HOD.M_min; fprintf(stderr,"HOD.M_min= %e\n",HOD.M_min); } if(HOD.M1<1.0E5) { HOD.M1=HOD.M1*MASS_PER_PARTICLE; fprintf(stderr,"HOD.M1= %e\n",HOD.M1); } /* SCale the M_max value by OMEGA_M=0.3 */ /* HOD.M_max*=(OMEGA_M/0.3); */ for(i=0;i<nt;i++) { if(!strcmp(tag[i],"DENSITY_DEPENDENCE"))continue; if(!strcmp(tag[i],"DENSITY_THRESHOLD") && !DENSITY_DEPENDENCE)continue; if(!strcmp(tag[i],"M_min_fac") && !DENSITY_DEPENDENCE)continue; if(!strcmp(tag[i],"HaloDensityFile") && !DENSITY_DEPENDENCE)continue; if(!strcmp(tag[i],"HOD2.M_min") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.M_max") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.MaxCen") && !(HOD2.pdfc>=4 && HOD.pdfc<=6))continue; if(!strcmp(tag[i],"HOD2.M_cut") && HOD2.pdfs<2)continue; if(!strcmp(tag[i],"HOD2.M1") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.M_cen_max") && HOD2.pdfc!=7)continue; if(!strcmp(tag[i],"HOD2.sigma_logM") && (!XCORR || (HOD2.pdfc==1 || HOD2.pdfc==7)))continue; if(!strcmp(tag[i],"HOD2.pdfs") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.pdfc") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.alpha") && !XCORR)continue; if(!strcmp(tag[i],"HOD2.alpha1") && HOD2.pdfs!=4 && HOD2.pdfs!=5)continue; if(!strcmp(tag[i],"HOD2.M_sat_break") && HOD2.pdfs!=4 && HOD2.pdfs!=5)continue; if(!strcmp(tag[i],"GALDENS_ERR")) continue; if(!strcmp(tag[i],"GALAXY_DENSITY2") && !XCORR)continue; if(!strcmp(tag[i],"GALDENS_ERR2") && !XCORR)continue; if(!strcmp(tag[i],"XCORR"))continue; if(!strcmp(tag[i],"alpha1"))continue; if(!strcmp(tag[i],"M_sat_break"))continue; if(!strcmp(tag[i],"M_cen_lin"))continue; if(!strcmp(tag[i],"OMEGA_TEMP")) { OMEGA_TEMP = OMEGA_M; continue; } if(!strcmp(tag[i],"pdf"))continue; if(!strcmp(tag[i],"REDSHIFT"))continue; if(!strcmp(tag[i],"WP_ONLY"))continue; if(!strcmp(tag[i],"RESTART"))continue; if(!strcmp(tag[i],"RESTART_FILE"))continue; if(!strcmp(tag[i],"DEPROJECTED"))continue; if(!strcmp(tag[i],"POWELL"))continue; if(!strcmp(tag[i],"LINEAR_PSP"))continue; if(!strcmp(tag[i],"BOX_SIZE"))continue; if(!strcmp(tag[i],"RESOLUTION"))continue; if(!strcmp(tag[i],"DELTA_HALO"))continue; if(!strcmp(tag[i],"VBIAS"))continue; if(!strcmp(tag[i],"COVAR"))continue; if(!strcmp(tag[i],"MN_COVAR"))continue; if(!strcmp(tag[i],"VBIAS_C"))continue; if(!strcmp(tag[i],"CVIR_FAC"))continue; if(!strcmp(tag[i],"ITRANS"))continue; if(!strcmp(tag[i],"IDUM_MCMC"))continue; if(!strcmp(tag[i],"FIX_PARAM"))continue; if(!strcmp(tag[i],"DEPROJECTED"))continue; if(!strcmp(tag[i],"OUTPUT"))continue; if(!strcmp(tag[i],"JENKINS_A"))continue; if(!strcmp(tag[i],"JENKINS_B"))continue; if(!strcmp(tag[i],"JENKINS_C"))continue; if(!strcmp(tag[i],"BEST_FIT"))continue; if(!strcmp(tag[i],"KAISER"))continue; if(!strcmp(tag[i],"SIGV"))continue; if(!strcmp(tag[i],"BETA"))continue; if(!strcmp(tag[i],"HUBBLE"))continue; if(!strcmp(tag[i],"OMEGA_B"))continue; //scale-dep bias if(!strcmp(tag[i],"HBIAS_C1"))continue; if(!strcmp(tag[i],"HBIAS_C2"))continue; if(!strcmp(tag[i],"HBIAS_D1"))continue; if(!strcmp(tag[i],"HBIAS_D2"))continue; if(!strcmp(tag[i],"MCMC"))continue; if(!strcmp(tag[i],"wp_minimize"))continue; if(!strcmp(tag[i],"m2n_minimize"))continue; if(!strcmp(tag[i],"wp_format"))continue; if(!strcmp(tag[i],"n_wp"))continue; if(!strcmp(tag[i],"wp_npca"))continue; if(!strcmp(tag[i],"zspace_minimize"))continue; if(!strcmp(tag[i],"pi_max"))continue; if(!strcmp(tag[i],"esys"))continue; if(HOD.color) { if(!strcmp(tag[i],"fblue0_cen") || !strcmp(tag[i],"sigma_fblue_cen") || !strcmp(tag[i],"fblue0_sat") || !strcmp(tag[i],"sigma_fblue_sat")) { fprintf(stderr,"Parameters for color HOD not specified.\n"); exit(0); } continue; } if(!strcmp(tag[i],"color"))continue; if(!strcmp(tag[i],"fblue0_cen"))continue; if(!strcmp(tag[i],"sigma_fblue_cen"))continue; if(!strcmp(tag[i],"fblue0_sat"))continue; if(!strcmp(tag[i],"sigma_fblue_sat"))continue; if(!strcmp(tag[i],"free[0]"))continue; if(!strcmp(tag[i],"free[1]"))continue; if(!strcmp(tag[i],"free[2]"))continue; if(!strcmp(tag[i],"free[3]"))continue; if(!strcmp(tag[i],"free[4]"))continue; if(!strcmp(tag[i],"free[5]"))continue; if(!strcmp(tag[i],"free[6]"))continue; if(!strcmp(tag[i],"free[7]"))continue; if(!strcmp(tag[i],"free[8]"))continue; if(!strcmp(tag[i],"free[9]"))continue; if(!strcmp(tag[i],"free[10]"))continue; if(!strcmp(tag[i],"free[11]"))continue; if(!strcmp(tag[i],"free[12]"))continue; if(!strcmp(tag[i],"free[13]"))continue; if(!strcmp(tag[i],"free[14]"))continue; if(!strcmp(tag[i],"free[15]"))continue; if(!strcmp(tag[i],"free[16]"))continue; if(!strcmp(tag[i],"free[17]"))continue; if(!strcmp(tag[i],"free[18]"))continue; if(!strcmp(tag[i],"free[19]"))continue; if(!strcmp(tag[i],"free[20]"))continue; if(!strcmp(tag[i],"free[21]"))continue; if(!strcmp(tag[i],"All"))continue; if(!strcmp(tag[i],"populate_sim"))continue; if(!strcmp(tag[i],"HaloFile"))continue; if(!strcmp(tag[i],"CovarMCMCFile")) { //set to NOT use the file Files.i_CovarMCMC=0; continue;} if(!strcmp(tag[i],"HOD"))continue; if(!strcmp(tag[i],"M2N"))continue; if(!strcmp(tag[i],"M2N_type"))continue; if(!strcmp(tag[i],"PCA"))continue; if(!strcmp(tag[i],"PVD"))continue; if(!strcmp(tag[i],"matter_xi"))continue; if(!strcmp(tag[i],"matter_pk"))continue; if(!strcmp(tag[i],"sigma_r"))continue; if(!strcmp(tag[i],"kaiser_xi"))continue; if(!strcmp(tag[i],"cvir"))continue; if(!strcmp(tag[i],"massfunc"))continue; if(!strcmp(tag[i],"angular_xi"))continue; if(!strcmp(tag[i],"print_bias"))continue; if(!strcmp(tag[i],"REDSHIFT_MIN"))continue; if(!strcmp(tag[i],"REDSHIFT_MAX"))continue; if(!strcmp(tag[i],"FIT_WTHETA"))continue; //If we want to do w(theta), but there's no fname_nz, give up if(!strcmp(tag[i],"fname_nz")) { if( (Task.angular_xi) || Task.FIT_WTHETA || Task.All ) { fprintf(stderr,"No filename specified for n(z) data\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"TF_file")) { if(ITRANS==11) { sprintf(Files.TF_file,"CMBFAST_trans.dat"); fprintf(stderr,"No transfer function file, using [%s]\n",Files.TF_file); } continue; } if(!strcmp(tag[i],"fname_covar")) { if(Task.wp_minimize) { fprintf(stderr,"No filename specified for covariance matrix.\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"fname_wp")) { if(Task.wp_minimize) { fprintf(stderr,"No filename specified for wp data.\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"m2n_filename")) { if(Task.m2n_minimize) { fprintf(stderr,"No filename specified for m2n data.\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"mn_fname_covar")) { if(Task.m2n_minimize) { fprintf(stderr,"No filename specified for m2n covariance matrix.\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"M_cut")) { if(HOD.pdfs==2 || HOD.pdfs==3){ fprintf(stderr,"No value for M_cut given for pdfs= 2/3\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"M_cen_max")) { if(HOD.pdfc==7) { fprintf(stderr,"No value for M_cen_max given for pdfc= 7\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"sigma_logM")) { if(HOD.pdfc==2){ fprintf(stderr,"No value for sigma_logM given for pdfc=2\n"); errorFlag=1; } continue; } if(!strcmp(tag[i],"MaxCen")) { if(HOD.pdfc==5){ fprintf(stderr,"No value for MaxCen given for pdfc=5\n"); errorFlag=1; } continue; } if(*tag[i]) { fprintf(stderr,"Error. I miss a value for tag '%s' in parameter file '%s'.\n", tag[i],fname); errorFlag=1; } } if(PCA==1 && COVAR==1) { fprintf(stderr,"ERROR: you have both PCA and COVAR set to 1.\n"); errorFlag=1; } IDUM_MCMC=IDUM_MCMC_TEMP; MCMC = Task.MCMC; if(errorFlag) endrun("error in input_params "); /* Other initialization stuff. */ MSTAR=mstar(); //printf("NGALS xp %e\n",GALAXY_DENSITY); ctemp = HOD.color; if(Task.wp_minimize) HOD.color = 0; wp.ngal=0; set_HOD_params(); HOD.color = ctemp; if(XCORR)set_HOD2_params(); //Set to run with cosmology correction if redshifts are available if(REDSHIFT_MIN >= 0 && REDSHIFT_MAX>REDSHIFT_MIN) GALDENS_CCORR=1; //printf("NGALS xx %e %e\n",GALAXY_DENSITY,wp.ngal); #undef DOUBLE #undef STRING #undef INT #undef MAXTAGS }
void aspen_breakout() { int i,j,k,i1; double x1,x2,x3,x4,x5,x6,r,dr,fsat,m1,mcut,mmin,dlogm; char fname[100]; FILE *fp; //goto loop_m1; // goto loop_cvir; //goto loop_alpha; //goto loop_mcut2; /* Vary M_min, find M1 such that fsat is fixed. */ OUTPUT=3; HOD.alpha = 1.0; for(i=1;i<=5;++i) { muh(0); RESET_FLAG_1H++; RESET_FLAG_2H++; RESET_KAISER++; sprintf(Task.root_filename,"fsat.%d",i); HOD.M_min = pow(10.0,i+9.0); HOD.M_cut = 4*HOD.M_min; if(i==1) { HOD.M1 = 30*HOD.M_min; set_HOD_params(); fsat = fsat_g1 = qromo(func_satfrac,log(HOD.M_min),log(HOD.M_max),midpnt)/GALAXY_DENSITY; fprintf(stderr,"%e %e %e %f %f\n",HOD.M_min,HOD.M1,GALAXY_DENSITY,fsat,HOD.M1/HOD.M_min); muh(2); } set_HOD_params(); HOD.M1 = exp(zbrent(func_find_mone2,log(HOD.M_low/10),log(HOD.M_max),1.0E-4)); fsat = qromo(func_satfrac,log(HOD.M_low),log(HOD.M_max),midpnt)/GALAXY_DENSITY; fprintf(stdout,"MUH %e %e %e %f %f\n",HOD.M_min,HOD.M1,GALAXY_DENSITY,fsat,HOD.M1/HOD.M_min); sprintf(fname,"fsat_1h.%d",i); output_wp(fname); sprintf(fname,"fsat_wp.%d",i); output_wp(fname); sprintf(fname,"fsat_hod.%d",i); output_hod(fname); } exit(0); /* Vary sigma8 at fixed HOD/ngal (so change mmin) */ for(i=0;i<=3;++i) { SIGMA_8 = 0.9*growthfactor((double)i); fprintf(stderr,"z=%d, sigma8= %f\n",i,SIGMA_8); RESET_COSMOLOGY++; RESET_FLAG_1H++; RESET_FLAG_2H++; RESET_KAISER++; //HOD.M_min = 0; set_HOD_params(); sprintf(fname,"SIGMA8a.%d",i); output_wp(fname); } exit(0); SIGMA_8=0.9; RESET_COSMOLOGY++; loop_m1: /* Vary fsat by varying M1 */ m1 = HOD.M1; i1 = 0; for(i=-2;i<=2;++i) { HOD.M1 = m1*pow(10.0,i/10.0); RESET_FLAG_1H++; RESET_FLAG_2H++; RESET_KAISER++; HOD.M_min = HOD.M_low = 0; set_HOD_params(); fsat = qromo(func_satfrac,log(HOD.M_low),log(HOD.M_max),midpnt)/GALAXY_DENSITY; fprintf(stderr,"M1= %e fsat=%f\n",HOD.M1,fsat); sprintf(fname,"M1_wp.%d",++i1); output_wp(fname); sprintf(fname,"M1_hod.%d",i1); output_hod(fname); } HOD.M1 = m1; exit(0); loop_mcut1: /* Vary M_cut, fix M1 and fsat */ mcut = HOD.M_cut; HOD.M_min = 0; set_HOD_params(); dlogm = (log(HOD.M1) - log(HOD.M_min))/4; mmin = log(HOD.M_min); fsat_g1 = qromo(func_satfrac,log(HOD.M_low),log(HOD.M_max),midpnt)/GALAXY_DENSITY; i1 = 0; for(i=0;i<5;++i) { HOD.M_cut = exp(dlogm*i+mmin); HOD.M1 = exp(zbrent(func_find_mone,log(HOD.M_min),log(HOD.M_max),1.0E-4)); RESET_FLAG_1H++; RESET_FLAG_2H++; RESET_KAISER++; HOD.M_min = HOD.M_low = 0; set_HOD_params(); fprintf(stderr,"M_cut= %e M1= %e %f\n",HOD.M_cut,HOD.M1,HOD.M1/HOD.M_cut); sprintf(fname,"Mcut1_wp.%d",++i1); output_wp(fname); sprintf(fname,"Mcut1_hod.%d",i1); output_hod(fname); } loop_mcut2: /* Vary M_cut/fsat, keep M_cut/M1 = 1 */ mcut = 3.0e13; m1 = 3.0e13; i1 = 0; dlogm = (log(3.0e13) - log(10.0e12))/4; for(i=0;i<5;++i) { HOD.M_cut = HOD.M1 = exp(dlogm*i)*10.0e12; RESET_FLAG_1H++; RESET_FLAG_2H++; RESET_KAISER++; HOD.M_min = HOD.M_low = 0; set_HOD_params(); fsat = qromo(func_satfrac,log(HOD.M_low),log(HOD.M_max),midpnt)/GALAXY_DENSITY; fprintf(stderr,"M_min= %e M1= %e fsat=%f\n",HOD.M_min,HOD.M1,fsat); sprintf(fname,"Mcut2_wp.%d",++i1); output_wp(fname); sprintf(fname,"Mcut2_hod.%d",i1); output_hod(fname); } loop_alpha: /* Vary Mcut as above, but fix f_sat by varying alpha */ mcut = 3.0e13; m1 = 3.0e13; i1 = 0; mmin = log(6.0e12); dlogm = (log(3.0e13) - mmin)/4; HOD.M_cut = HOD.M1 = exp(mmin); HOD.alpha = 0.1; HOD.M_min = HOD.M_low = 0; set_HOD_params(); fsat = qromo(func_satfrac,log(HOD.M_low),log(HOD.M_max),midpnt)/GALAXY_DENSITY; fprintf(stderr,"fsat = %f %e\n",fsat,HOD.M_min); for(i=0;i<5;++i) { HOD.M_cut = HOD.M1 = exp(dlogm*i + mmin); RESET_FLAG_1H++; RESET_FLAG_2H++; RESET_KAISER++; HOD.alpha = zbrent(func_find_alpha,0.05,2.0,1.0E-4); fprintf(stderr,"M_cut= %e alpha = %f\n",HOD.M_cut,HOD.alpha); sprintf(fname,"alpha_wp.%d",++i1); output_wp(fname); sprintf(fname,"alpha_hod.%d",i1); output_hod(fname); } loop_cvir: /* Vary cvir with central one above */ HOD.M_cut = HOD.M1 = exp(dlogm*2 + mmin); HOD.alpha = zbrent(func_find_alpha,0.05,2.0,1.0E-4); fprintf(stderr,"M_cut= %e alpha = %f\n",HOD.M_cut,HOD.alpha); i1 = 0; for(i=0;i<5;++i) { CVIR_FAC = pow(3.0,i-2); RESET_FLAG_1H++; RESET_FLAG_2H++; RESET_KAISER++; sprintf(fname,"cvir_wp.%d",++i1); output_wp(fname); sprintf(fname,"cvir_hod.%d",i1); output_hod(fname); } exit(0); }