void drg_model() { int k,i,n=40,j,i1,i2,ngal; double dlogr,r,mass,xk,pnorm,psp,rm,sig,t0,t1,pnorm1,mp,mlo,mhi,dr, slo,shi,dsdM,rlo,rhi,dlogm,f1,f2,fac,cvir,rvir,rs,r1,r2,mtot=0,m, chi2lf,chi2w,x0,mlow; FILE *fp,*fp2; float x1,x2,x3,x4; char aa[1000],fname[1000],**argv; float *xx,*yy,*zz,*vx,*vy,*vz; float *wdata,*rdata,*edata,*lfdata,*lferr,*lfmag,*wmodel; int magcnt[100]; int nwdata, nlf, j1, ngrid = 10, ingal; double tmin, tmax, dtheta, theta, delta_mag, maglo; /* FITTING RIK'S DATA */ rlo = log(1.0); rhi = log(1000); dtheta = (rhi-rlo)/(19); for(i=0;i<20;++i) { theta = exp(rlo+i*dtheta); printf("ALL %e %e\n",theta,wtheta(theta)); fflush(stdout); } sprintf(Task.root_filename,"all"); tasks(ARGC,ARGV); RESET_FLAG_1H++; RESET_FLAG_2H++; GALAXY_DENSITY = 4.9e-4; NGAL_DRG = 4.9e-4; HOD.pdfc = 10; // set up centrals for RED HOD.freds = 0.3; // for RED HOD.fredc = 1; HOD.mass_shift = zbrent(func_findmshift2,0.0,2.434682,1.0E-4); //spaced in fcen0 fprintf(stdout,"fsat = %.2f fcen = %.2f mu = %.2f ngal= %e %e\n",HOD.freds,HOD.fredc, HOD.mass_shift,GALAXY_DENSITY,qromo(func_galaxy_density,log(HOD.M_low),log(HOD.M_max),midpnt)); for(i=0;i<20;++i) { theta = exp(rlo+i*dtheta); printf("RED %e %e\n",theta,wtheta(theta)); fflush(stdout); } sprintf(Task.root_filename,"red"); tasks(ARGC,ARGV); RESET_FLAG_1H++; RESET_FLAG_2H++; GALAXY_DENSITY = 1.9e-3; HOD.pdfc = 11; // set up centrals for BLUE HOD.freds = 1 - HOD.freds; // for BLUE printf("ngal = %e\n",qromo(func_galaxy_density,log(HOD.M_low),log(HOD.M_max),midpnt)); for(i=0;i<20;++i) { theta = exp(rlo+i*dtheta); printf("BLUE %e %e\n",theta,wtheta(theta)); fflush(stdout); } sprintf(Task.root_filename,"blue"); tasks(ARGC,ARGV); exit(0); BOX_SIZE = 160.; fp = openfile("wtheta_corrected.data"); nwdata = filesize(fp); wdata = vector(1,nwdata); rdata = vector(1,nwdata); edata = vector(1,nwdata); wmodel = vector(1,nwdata); for(i=1;i<=nwdata;++i) fscanf(fp,"%f %f %f",&rdata[i],&wdata[i],&edata[i]); fclose(fp); fp = openfile("LF_DRG.data"); nlf = filesize(fp); lfmag = vector(1,nlf); lfdata = vector(1,nlf); lferr = vector(1,nlf); for(i=1;i<=nlf;++i) fscanf(fp,"%f %f %f",&lfmag[i],&lfdata[i],&lferr[i]); fclose(fp); delta_mag = 0.45; maglo = -23.86-delta_mag/2; MSTAR = mstar(); tmin = log(1.0); tmax = log(1000); dtheta = (tmax-tmin)/(19); //HOD.M_min *= 1.5; //HOD.M_low *= 1.5; // get mean mass of centrals (ALL) MALL = qromo(func_drg1,log(HOD.M_low),log(HOD.M_max),midpnt)/ qromo(func_drg1a,log(HOD.M_low),log(HOD.M_max),midpnt); //new model HOD.mass_shift = 0.5; HOD.pdfc = 10; //HOD.shift_alpha = 1; mlow = 1; mhi = 2; dlogm = log(mhi/mlow)/ngrid; //analytic_sham(); /********************************** */ // let's do the prediction for the blue galaxies. // best-fit model (alpha=1) fit10 is 12 28 // best-fit model (alpha=1) fit9 is 30 19 j1 = 12; j = 19; // set up HOD as DRGs // for stepping in mshift ERROR_FLAG = 0; MSHIFT = exp((j1-0.5)*dlogm)*mlow; HOD.fredc = 1; HOD.mass_shift = zbrent(func_findmshift,0.0,10.0,1.0E-4); HOD.freds = (j-0.5)/ngrid; HOD.fredc = zbrent(func_findfredc,0.0,1.0,1.0E-4); // for stepping in fsat0 HOD.fredc = (j1-0.5)/ngrid; HOD.freds = (j-0.5)/ngrid; HOD.mass_shift = zbrent(func_findmshift2,0.0,1.434682,1.0E-4); //spaced in fcen0 // 9panel c2 5.9 //CHI 993 0.978682 0.660204 0.181224 2.119014e-01 8.793237e+00 1.237535 6.664499e-04 HOD.mass_shift = 0.181; HOD.fredc = 0.66; HOD.freds = 0.3;//0.979; HOD.freds = 1 - HOD.freds; // for NON-DRGs HOD.pdfc = 11; // set up centrals as 1-f(DRG) //HOD.pdfc = 7; // square-well blues at low-mass end //HOD.M_min = 7e11; //HOD.M_cen_max = 1.5e12; //HOD.M_low = 7e11; GALAXY_DENSITY = qromo(func_galaxy_density,log(HOD.M_low),log(HOD.M_max),midpnt); fprintf(stdout,"fsat = %.2f fcen = %.2f ngal= %e\n",HOD.freds,HOD.fredc, GALAXY_DENSITY); RESET_FLAG_1H++; RESET_FLAG_2H++; for(i=0;i<20;++i) { theta = exp(tmin+i*dtheta); fprintf(stdout,"WTH %e %e\n",theta,wtheta(theta)); } sprintf(Task.root_filename,"BX"); //tasks(2,argv); exit(0); /* ****************************************/ if(ARGC>3) ingal = atoi(ARGV[3]); else ingal = 1; NGAL_DRG = 6.5e-4;//*(1+(ingal-5)/2.5*0.13); // do an outer loop of the mass shifts for(j1=1;j1<=ngrid;++j1) { // go in steps of mean mass shift from 1 to 2. MSHIFT = exp((j1-0.5)*dlogm)*mlow; HOD.fredc = 1; HOD.mass_shift = zbrent(func_findmshift,0.0,10.0,1.0E-4); //HOD.mass_shift = 1.116703; //figure 3 // doing equally spaced in fcen0 //HOD.fredc = (j1-0.5)/ngrid; for(j=1;j<=ngrid;++j) { ERROR_FLAG = 0; HOD.freds = (j-0.5)/ngrid; HOD.fredc = zbrent(func_findfredc,0.0,1.0,1.0E-4); if(ERROR_FLAG) HOD.fredc = 1.0; ERROR_FLAG = 0; /* HOD.mass_shift = zbrent(func_findmshift2,0.0,1.434682,1.0E-4); //spaced in fcen0 if(ERROR_FLAG) { chi2lf = chi2w = 1.0e6; printf("CHI %d %d %f %f %f %e %e %f\n",j1,j,HOD.freds,HOD.fredc,HOD.mass_shift,chi2lf,chi2w,MSHIFT); fflush(stdout); continue; } */ //best fit model from chains (wth+n only) //1.648589e-01 7.732068e-01 9.796977e-01 MSHIFT = pow(10.0,0.164); HOD.freds = 0.7732; HOD.fredc = 0.977; HOD.mass_shift = zbrent(func_findmshift,0.0,10.0,1.0E-4); // third column 7.10 //CHI 7 10 0.950000 1.000000 0.661607 9.897945e+00 1.109673e+01 1.569168 6.500000e-04 5.905374e-04 HOD.mass_shift = 0.6616; HOD.fredc = 1.00; HOD.freds = 0.95; j1 = 7; j = 10; // 9panel c2 5.9 //CHI 993 0.978682 0.660204 0.181224 2.119014e-01 8.793237e+00 1.237535 6.664499e-04 j1 = 5; j = 9; HOD.mass_shift = 0.181; HOD.fredc = 0.66; HOD.freds = 0.979; //for 9panel c1 1.1 j1 = 1; j = 1; HOD.mass_shift = 0; HOD.fredc = NGAL_DRG/GALAXY_DENSITY; HOD.freds = NGAL_DRG/GALAXY_DENSITY; //best-fit model without LF HOD.mass_shift = 0.48; HOD.fredc = 0.99; HOD.freds = 0.69; //best-fit model with LF (bottom row of 6panel) //8.234815e-02 9.011035e-01 6.467542e-01 j1 = 7; j = 10; HOD.mass_shift = 1.505979e-01 ; HOD.fredc = 6.467542e-01 ; HOD.freds = 9.011035e-01 ; GALAXY_DENSITY = qromo(func_galaxy_density,log(HOD.M_low),log(HOD.M_max),midpnt); fprintf(stdout,"fsat = %.1f fcen = %f ngal= %e\n",HOD.freds,HOD.fredc, GALAXY_DENSITY); RESET_FLAG_1H++; RESET_FLAG_2H++; /* for(i=0;i<20;++i) { theta = exp(tmin+i*dtheta); fprintf(stdout,"WTH %e %e\n",theta,wtheta(theta)); } exit(0); */ //populate_simulation(); //exit(0); // get qudari model points //fp = openfile("q8m.dat"); // calculate the chi^2 for the wtheta values. chi2w = 0; for(i=1;i<=nwdata;++i) { x0 = wtheta(rdata[i]); wmodel[i] = x0; //q8 model //fscanf(fp,"%f %f",&x1,&wmodel[i]); //x0 = wmodel[i]; printf("XX %e %e %e %e\n",rdata[i],wdata[i],x0,edata[i]); chi2w += (wdata[i]-x0)*(wdata[i]-x0)/(edata[i]*edata[i]); } //fclose(fp); fmuh(chi2w); if(USE_COVAR) chi2w = chi2wtheta_covar(wdata,wmodel); fmuh(chi2w); //exit(0); sprintf(fname,"wth_mshift_%d.%d",j1,j); fp = fopen(fname,"w"); for(i=0;i<20;++i) { theta = exp(tmin+i*dtheta); fprintf(fp,"%e %e\n",theta,wtheta(theta)); } fclose(fp); //continue; // do the real-space clustering and HOD sprintf(Task.root_filename,"mshift_%d.%d",j1,j); tasks(2,argv); // now make the luminosity function for this model //output_drg_lf(j); sprintf(fname,"sham ../../SHAM/halosub_0.284 hod_mshift_%d.%d %f %f %f %f > gal_mshift_%d.%d",j1,j,HOD.freds,HOD.fredc,HOD.mass_shift,GALAXY_DENSITY,j1,j); //sprintf(fname,"sham ../SHAM_120/halosub_0.3323.dat hod_mshift_%.1f.%d %f %f %f > gal_mshift_%.1f.%d",HOD.mass_shift,j,HOD.freds,HOD.fredc,HOD.mass_shift,HOD.mass_shift,j); fprintf(stderr,"[%s]\n",fname); system(fname); // calculate the clustering of this drg sample sprintf(fname,"covar3 0.1 15 12 160 0 160 1 gal_mshift_%d.%d a 0 1 auto > xi.mshift_%d.%d",j1,j,j1,j); //fprintf(stderr,"[%s]\n",fname); //system(fname); // calculate the luminosity function sprintf(fname,"gal_mshift_%d.%d",j1,j); fp = openfile(fname); n = filesize(fp); for(i=1;i<=nlf;++i) magcnt[i] = 0; for(i=1;i<=n;++i) { for(k=1;k<=10;++k) fscanf(fp,"%f",&x1);// printf("%e\n",x1); } k = (x1-maglo)/delta_mag + 1; if(k>=1 && k<=nlf)magcnt[k]+=1; //printf("%d %d %f %f %f\n",i,k,x1,maglo,delta_mag); fscanf(fp,"%f",&x1); } fclose(fp); // calculate the chi^2 for the luminosity function chi2lf = 0; for(i=1;i<=nlf;++i) { if(i==nlf) x0 = log10(magcnt[i]/pow(BOX_SIZE/0.7,3.0)/delta_mag); else x0 = log10(magcnt[i]/pow(BOX_SIZE/0.7,3.0)/delta_mag); printf("LF %d %d %f %f %f\n",j1,j,x0,lfdata[i],lferr[i]); chi2lf += (x0 - lfdata[i])*(x0 - lfdata[i])/(lferr[i]*lferr[i]); } printf("CHI %d %d %f %f %f %e %e %f %e %e\n",j1,j,HOD.freds,HOD.fredc,HOD.mass_shift,chi2lf,chi2w,MSHIFT,NGAL_DRG,GALAXY_DENSITY); fflush(stdout); exit(0); } } exit(0); }
void populate_simulation() { FILE *fp,*fpa[9],*fp2,*fp3,*fpb[9],*fpc[9],*fps[9],*fpt,*fpblue, *fpsub,*fp2r,*fp3r; int i,j,k,n,imass,n1,j_start=0,i1,galcnt[1000],halocnt[1000]; 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,*ibluecen,nhalo; float dx,dy,dz,dr,drh,rv1,rv2,rmin,rmax, fred,p; float **haloarr; int ngal,nsati[9],ALL_FILES=0,TRACK_GALAXIES=0,WARREN_MASS_CORRECTION=0,haloid; float *xt,*yt,*zt,*vxt,*vyt,*vzt; //static int nhalo, *used_halo, iuse_flag = 1; int ihalo=0, ii; int SO_FILE = 0, JEANS_DISPERSION = 0; // new for mcmc_lensing; double m1, m2, mfslope, rad, mstar, rproj, xs[20], vhalo, imag, minimum_halo_mass, minimum_mstar, minimum_lgmstar; long IDUM=-555; float xx[20], xd[3], xv[3], *subi, *submass, *temp; fprintf(stderr,"\n\nPOPULATING SIMULATION WITH SHMR.\n"); fprintf(stderr, "--------------------------------\n\n"); fp=openfile(Files.HaloFile); fprintf(stderr,"opening file: [%s]\n",Files.HaloFile); nhalo = filesize(fp); fprintf(stderr,"number of lines: [%d]\n",nhalo); ibluecen = ivector(1,nhalo); if(Files.UseStellarMassBinsClustering) input_stellar_mass_bins(); minimum_mstar = pow(10.0,wpl.mstar_wplo[0][1]); minimum_lgmstar = wpl.mstar_wplo[0][1]; fmuh(minimum_lgmstar); if(!COLOR) { sprintf(aa,"%s.shmr_mock",Task.root_filename); fp2 = fopen(aa,"w"); fprintf(stderr,"outfile: [%s]\n",aa); sprintf(aa,"%s.shmr_mock_haloid",Task.root_filename); fp3 = fopen(aa,"w"); } else { sprintf(aa,"%s.shmr_mock_blue",Task.root_filename); fp2 = fopen(aa,"w"); fprintf(stderr,"outfile: [%s]\n",aa); sprintf(aa,"%s.shmr_mock_haloid_blue",Task.root_filename); fp3 = fopen(aa,"w"); } BLUE_FLAG = 1; wpl.reset_inversion = 1; set_up_hod_for_shmr(minimum_mstar,5.0E12,wpl.a); minimum_halo_mass = HOD.M_low; generate_satellite_galaxy_tab(1.0E12,minimum_lgmstar,1); fprintf(stderr,"Expected number density of galaxies N(>%.2f Msol)= %e\n",log10(minimum_mstar),GALAXY_DENSITY); fprintf(stderr,"Minimum halo mass (M_low) required= %e\n",minimum_halo_mass); haloid = 0; for(ii=1;ii<=nhalo;++ii) { ibluecen[ii] = 0; 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]); // output the central with probability given by red_central_fraction fred = red_central_fraction(mass,wpl.a); p = drand48(); if(p>fred)ibluecen[ii] = 1; // mark as blue or red before cutting for min halo mass if(mass<minimum_halo_mass)continue; haloid++; // decide whether this halo's center is red or blue if(p>fred) { // get the mass of the central galaxy mstar = log10(ms_to_mhalo_inversion(mass)); m1 = gasdev(&IDUM)*wpl.a[6+(1-BLUE_FLAG)*11]+(mstar); if(m1>minimum_lgmstar) { fprintf(fp2,"%e %e %e %e %e %e %d %e %e\n",xh[0],xh[1],xh[2],vh[0],vh[1],vh[2],1,m1,mass); fprintf(fp3,"%d\n",haloid); } } // tabulate the CLF for this halo mass //nsat = generate_satellite_galaxy(-mass,9.0); nsat = generate_satellite_galaxy_tab(-mass,minimum_lgmstar,0); //printf("nsat check> %e\n",nsat); n1 = poisson_deviate(nsat); for(i=1;i<=n1;++i) { //m1 = generate_satellite_galaxy(mass,9.0); m1 = generate_satellite_galaxy_tab(mass,minimum_lgmstar,0); r = NFW_position(mass,xg); NFW_velocity(mass,vg,mag); boxwrap_galaxy(xh,xg); fprintf(fp2,"%e %e %e %e %e %e %d %e %e\n", xg[0],xg[1],xg[2],vh[0]+vg[0],vh[1]+vg[1],vh[2]+vg[2],0,m1,mass); fprintf(fp3,"%d\n",haloid); } fflush(fp2); fflush(fp3); } fclose(fp2); fclose(fp3); /* --------------------------------------------- * now got back and do the REDS, if required * --------------------------------------------- */ if(!COLOR)return; sprintf(aa,"%s.shmr_mock_red",Task.root_filename); fp2 = fopen(aa,"w"); fprintf(stderr,"outfile: [%s]\n",aa); sprintf(aa,"%s.shmr_mock_haloid_red",Task.root_filename); fp3 = fopen(aa,"w"); rewind(fp); BLUE_FLAG = 0; wpl.reset_inversion = 1; set_up_hod_for_shmr(2.0E9,5.0E12,wpl.a); set_up_hod_for_shmr(1.0E9,5.0E12,wpl.a); minimum_halo_mass = HOD.M_low; fprintf(stderr,"Expected number density of red galaxies N(>10^9 Msol)= %e\n",GALAXY_DENSITY); fprintf(stderr,"Minimum halo mass (M_low) required= %e\n",minimum_halo_mass); generate_satellite_galaxy_tab(1.0E12,minimum_lgmstar,1); haloid = 0; for(ii=1;ii<=nhalo;++ii) { 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]); if(mass<minimum_halo_mass)continue; haloid++; // we already know whether this halo is blue central if(ibluecen[ii])goto POP_SATS; // get the mass of the central galaxy mstar = log10(ms_to_mhalo_inversion(mass)); m1 = gasdev(&IDUM)*wpl.a[6+(1-BLUE_FLAG)*11]+(mstar); if(m1>minimum_lgmstar) { fprintf(fp2,"%e %e %e %e %e %e %d %e %e\n",xh[0],xh[1],xh[2],vh[0],vh[1],vh[2],1,m1,mass); fprintf(fp3,"%d\n",haloid); } POP_SATS: // tabulate the CLF for this halo mass nsat = generate_satellite_galaxy_tab(-mass,minimum_lgmstar,0); n1 = poisson_deviate(nsat); for(i=1;i<=n1;++i) { m1 = generate_satellite_galaxy_tab(mass,minimum_lgmstar,0); r = NFW_position(mass,xg); NFW_velocity(mass,vg,mag); boxwrap_galaxy(xh,xg); fprintf(fp2,"%e %e %e %e %e %e %d %e %e\n", xg[0],xg[1],xg[2],vh[0]+vg[0],vh[1]+vg[1],vh[2]+vg[2],0,m1,mass); fprintf(fp3,"%d\n",haloid); } fflush(fp2); fflush(fp3); } fclose(fp); return ; }