Exemple #1
0
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);
}
Exemple #4
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);
}
Exemple #5
0
/*
 *  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
}
Exemple #6
0
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);
}