mirror of
https://bitbucket.org/cosmicvoids/vide_public.git
synced 2025-07-04 07:11:12 +00:00
Port to python3, large code cleanup * Fixed command line for cosmotool * Fix path * Dump command line is log file * Fix important typo * Modify paths for example * Fix path again * Use an explicit constructor * Change file to open (python 2->3) * python3 fix for xrange in periodic_kdtree.py * Fixed index for Np, numPart, numZones, numZonesTot, partID, zoneID in catalogUtil.py
553 lines
14 KiB
C
553 lines
14 KiB
C
/*+
|
|
VIDE -- Void IDentification and Examination -- ./c_tools/hod/header.h
|
|
Copyright (C) 2010-2014 Guilhem Lavaux
|
|
Copyright (C) 2011-2014 P. M. Sutter
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
+*/
|
|
#include "nrutil.h"
|
|
#include "stdlib.h"
|
|
#include "stdio.h"
|
|
|
|
/* Function prototypes--> utility files
|
|
*/
|
|
double second(void);
|
|
double timediff(double t0,double t1);
|
|
void endrun(char *instring);
|
|
FILE *openfile(char *ff);
|
|
int filesize(FILE *fp);
|
|
void least_squares(double *x, double *y, int n, double *a, double *b);
|
|
void check_for_smoothness(double *x, double *y, int n, double r);
|
|
void read_parameter_file(char *fname);
|
|
void output_parameter_file(char *fname);
|
|
double ***d3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh);
|
|
void free_d3tensor(double ***t, long nrl, long nrh, long ncl, long nch,
|
|
long ndl, long ndh);
|
|
|
|
/* Function prototypes--> general control of tasks
|
|
*/
|
|
void tasks(int argc, char **argv);
|
|
|
|
/* Function prototypes--> numerical recipes
|
|
*/
|
|
double qromo(double (*func)(double), double a, double b,
|
|
double (*choose)(double(*)(double), double, double, int));
|
|
void polint(double xa[], double ya[], int n, double x, double *y, double *dy);
|
|
double midpnt(double (*func)(double), double a, double b, int n);
|
|
double midinf(double (*funk)(double), double aa, double bb, int n);
|
|
void splint(double xa[], double ya[], double y2a[], int n, double x, double *y);
|
|
void spline(double x[], double y[], int n, double yp1, double ypn, double y2[]);
|
|
double zbrent(double (*func)(double), double x1,double x2, double tol);
|
|
double qtrap(double (*func)(double), double a, double b, double EPS);
|
|
void powell(double p[], double **xi, int n, double ftol, int *iter, double *fret,
|
|
double (*func)(double []));
|
|
void amoeba(double **p, double y[], int ndim, double ftol,
|
|
double (*funk)(double []), int *nfunk);
|
|
void gaussj(double **a, int n, double **b, int m);
|
|
float gasdev(long *idum);
|
|
void jacobi(double **a, int n, double d[], double **v, int *nrot);
|
|
float ran1(long *idum);
|
|
double ran2(long *idum);
|
|
double trapzd(double (*func)(double), double a, double b, int n);
|
|
void sort2(unsigned long n, float arr[], int id[]);
|
|
|
|
|
|
/* Function prototypes--> power spectrum routines.
|
|
*/
|
|
double transfnc(double xk);
|
|
double sigmac(double rad);
|
|
double nonlinear_sigmac(double rad);
|
|
double transfunc_file(double xk);
|
|
double nonlinear_power_spectrum(double xk);
|
|
double linear_power_spectrum(double xk);
|
|
double mstar(void);
|
|
double tf_eisenstein_hu(double k);
|
|
double cobenorm(double omega_m);
|
|
double cobe_prior(double omega_m);
|
|
double sigmac_interp(double m);
|
|
double sigmac_radius_interp(double m);
|
|
|
|
/* Function prototypes--> matter correlation function routines.
|
|
*/
|
|
double xi_interp(double r);
|
|
double xi_linear_interp(double r);
|
|
double projected_xi_matter(double r);
|
|
|
|
/* Function protoypes--> outputting matter stats
|
|
*/
|
|
void output_matter_power_spectrum(void);
|
|
void output_matter_correlation_function(void);
|
|
void output_matter_variance(void);
|
|
void output_halo_concentrations(void);
|
|
void output_halo_mass_function(void);
|
|
void output_halo_correlation_function(double mass);
|
|
|
|
/* Function prototypes--> HOD functions (+related);
|
|
*/
|
|
double N_avg(double m);
|
|
double N_cen(double m);
|
|
double N_sat(double m);
|
|
double moment_ss(double m);
|
|
double func_galaxy_density(double m);
|
|
double func_satfrac(double m);
|
|
void set_HOD_params(void);
|
|
double set_low_mass(void);
|
|
double set_high_central_mass(void);
|
|
double N_cen_i(double m, int ii);
|
|
double satellite_blue_fraction(double m);
|
|
double central_blue_fraction(double m);
|
|
|
|
double func_central_density(double m);
|
|
double func_satellite_density(double m);
|
|
|
|
double number_weighted_central_mass(void);
|
|
double number_weighted_halo_mass(void);
|
|
|
|
/* Density-dependent HOD functions
|
|
*/
|
|
void dd_hod_functions(float *hmass, float *hdensity, int nhalo);
|
|
int internal_populate_simulation(float *x, float *y, float *z, float reduction_factor, int ivel,
|
|
float *vx, float *vy, float *vz);
|
|
|
|
|
|
/* Function prototypes--> HOD functions for second HOD (+related);
|
|
*/
|
|
double N_avg2(double m);
|
|
double N_cen2(double m);
|
|
double N_sat2(double m);
|
|
double moment_ss2(double m);
|
|
double func_galaxy_density2(double m);
|
|
double func_satfrac2(double m);
|
|
void set_HOD2_params(void);
|
|
double set_low_mass2(void);
|
|
double set_high_central_mass2(void);
|
|
|
|
/* Function prototypes--> halo mass function.
|
|
*/
|
|
double halo_mass_function(double mass);
|
|
double dndM_interp(double m);
|
|
|
|
/* Function prototypes--> halo bias.
|
|
*/
|
|
double bias_interp(double m, double r);
|
|
double bias(double m);
|
|
double func_galaxy_bias(double m);
|
|
|
|
/* Function prototypes--> halo profile: pair density
|
|
*/
|
|
double dFdx_ss(double x, double c_NFW);
|
|
double dFdx_cs(double x, double c_NFW);
|
|
double dFdx_ss_interp(double r, double c);
|
|
double dFdx_cs_interp(double r, double c);
|
|
double nfw_transform(double xk, double m);
|
|
|
|
/* Function prototypes--> real-space galaxy correlation function.
|
|
*/
|
|
double one_halo_real_space(double r);
|
|
double two_halo_real_space(double r);
|
|
double ellipsoidal_exclusion_probability(double rv, double r);
|
|
double restricted_number_density(double r);
|
|
double projected_xi(double r);
|
|
double projected_xi_rspace(double r);
|
|
double nbody_xi(double r);
|
|
double integrated_wp_bin(double r);
|
|
|
|
|
|
/* Function prototypes--> redshift-space galaxy correlation function.
|
|
*/
|
|
double one_halo(double rs, double rp);
|
|
double two_halo(double rs, double rp);
|
|
void xi_multipoles(void);
|
|
double small_scale_measure(double rs);
|
|
void calc_rhalf(double r[], double rhalf[], int nr);
|
|
double integrated_bin(double xlo, double ylo, double dx1, double dy1, int n);
|
|
void linlin_bins(void);
|
|
double xi2d_interp(double rs1, double rp1, double rs2, double rp2);
|
|
double xi2d_interp_polar(double rs1, double rs2, double phi1, double phi2);
|
|
|
|
|
|
/* Function prototypes--> halo pairwise velocity model
|
|
*/
|
|
double spherical_collapse_model(double delta);
|
|
double galaxy_prob_vz(double vel, double rad, double theta);
|
|
void vdelta_v4(double m0, double m1, double rad, double theta, double binsize,
|
|
double v0, int nv, double *a, double *pv, double *pt, double *pz,
|
|
double wgal[3], double sgal[4]);
|
|
void pairwise_velocity_dispersion(void);
|
|
void output_velocity_moments(int imass);
|
|
double jeans_dispersion(double mass, double rx, double v[]);
|
|
|
|
|
|
/* Function prototypes--> halo concentrations.
|
|
*/
|
|
double growthfactor(double z);
|
|
double halo_concentration(double m);
|
|
double cvir_model(double mass);
|
|
double halo_mass_conversion(double mvir, double *cvir1, double delta_halo);
|
|
double halo_mass_conversion2(double mvir, double cvir1, double delta_vir, double delta_halo);
|
|
double halo_c200(double m);
|
|
double HK_func(double x);
|
|
|
|
/* Function prototypes--> HOD fitting of correlation functions.
|
|
*/
|
|
void wp_minimization(char *fname);
|
|
void mcmc_minimization(void);
|
|
void zspace_minimization(char *fname);
|
|
double chi2_wp(double *a);
|
|
double chi2_zspace(double *a);
|
|
void fit_color_samples(void);
|
|
|
|
/* Function prototypes--> Linear+exponential model.
|
|
*/
|
|
double kaiser_distortion(double rs, double rp);
|
|
void fit_dispersion_model(void);
|
|
double linear_kaiser_distortion(double rs, double rp);
|
|
|
|
/* Function prototypes--> Jean's solution to velocity dispersions.
|
|
*/
|
|
double satellite_dispersion(double r, double rs, double rvir);
|
|
double velocity_dispersion_profile(double sig, double cvir, double rvir, double r);
|
|
|
|
/* Function prototypes--> random position/velocities of sat gals (simulation population)
|
|
*/
|
|
void populate_simulation(void);
|
|
void populate_sampled_simulation(void);
|
|
double NFW_density(double r, double rs, double ps);
|
|
double NFW_velocity(double mass, double v[], double mag);
|
|
double NFW_position(double mass, double x[]);
|
|
int poisson_deviate(double nave);
|
|
double poisson_prob(int n, double nave);
|
|
|
|
/* Definitions
|
|
*/
|
|
#define PI 3.14159265358979323846
|
|
#define TWOPI (2*PI)
|
|
#define THIRD (1.0/3.0)
|
|
#define ROOT2 1.41421356237309504880
|
|
#define RT2PI 2.50662827463100050241
|
|
#define LN_2 0.6931471805599452
|
|
#define ROOT8 2.82842712475
|
|
#define WORKBUF 1000
|
|
#define LOGE_10 2.30258509
|
|
#define c_on_H0 3000
|
|
|
|
#define mabs(A) ((A) < 0.0 ? -(A) : (A))
|
|
#define cnint(x) ((x-floor(x)) < 0.5 ? floor(x) : ceil(x))
|
|
#define muh(x) fprintf(stdout,"%d\n",x);fflush(stdout)
|
|
#define fmuh(x) fprintf(stderr,"%e\n",x)
|
|
#define square(x) (x*x)
|
|
|
|
/* Global variables
|
|
*/
|
|
extern double
|
|
GAMMA,
|
|
HUBBLE,
|
|
SIGMA_8,
|
|
RHO_CRIT,
|
|
SPECTRAL_INDX,
|
|
OMEGA_M,
|
|
OMEGA_B,
|
|
OMEGA_TEMP,
|
|
DELTA_CRIT,
|
|
MSTAR,
|
|
GALAXY_DENSITY,
|
|
GALAXY_DENSITY2,
|
|
NG_ONE_HALO,
|
|
GRAVITY,
|
|
VZ_LIMIT,
|
|
BOX_SIZE,
|
|
RESOLUTION,
|
|
R_MIN_2HALO,
|
|
MASS_PER_PARTICLE,
|
|
GALAXY_BIAS,
|
|
DELTA_HALO,
|
|
VBIAS,
|
|
VBIAS_SLOPE,
|
|
VBIAS_C,
|
|
VBIAS_MASS_THRESHOLD,
|
|
CVIR_FAC,
|
|
MAXVEL,
|
|
BIAS_A,
|
|
BIAS_B,
|
|
BIAS_C,
|
|
JENKINS_A,
|
|
JENKINS_B,
|
|
JENKINS_C,
|
|
DNDM_PARAMS[10],
|
|
SIGV,
|
|
BETA,
|
|
XI_MAX_RADIUS,
|
|
MASS_THRESHOLD,
|
|
DENSITY_THRESHOLD,
|
|
REDSHIFT,
|
|
LOCAL_DENSITY;
|
|
|
|
extern int RESET_COSMOLOGY,
|
|
RESET_KAISER,
|
|
ITRANS,
|
|
COVAR,
|
|
PCA,
|
|
COVARZ,
|
|
EXCLUSION,
|
|
SOFT_CENTRAL_CUTOFF,
|
|
NUM_POW2MASS_BINS,
|
|
FIX_PARAM,
|
|
DEPROJECTED,
|
|
OUTPUT,
|
|
POWELL,
|
|
MCMC,
|
|
BEST_FIT,
|
|
LINEAR_PSP,
|
|
KAISER,
|
|
RESET_PVZ,
|
|
ERROR_FLAG,
|
|
RESET_FLAG_2H,
|
|
RESET_FLAG_1H,
|
|
GAO_EFFECT,
|
|
IVFLAG,
|
|
WP_ONLY,
|
|
N_HOD_PARAMS,
|
|
XCORR,
|
|
RESTART,
|
|
USE_ERRORS,
|
|
DENSITY_DEPENDENCE;
|
|
|
|
extern char RESTART_FILE[100];
|
|
|
|
extern long IDUM_MCMC;
|
|
|
|
/* These are variables for the parallel implementation.
|
|
*/
|
|
extern int ThisTask,NTask;
|
|
|
|
|
|
/* HOD parameters. For definitions, look at the comments in
|
|
* hod_functions.c
|
|
*/
|
|
extern struct hod_parameters {
|
|
double M_min;
|
|
double M_max;
|
|
double M1;
|
|
double M_cut;
|
|
double M_low,M_low0;
|
|
double M_hi;
|
|
double sigma_logM;
|
|
double alpha;
|
|
double MaxCen;
|
|
double M_cen_max;
|
|
|
|
double fblue0_cen;
|
|
double sigma_fblue_cen;
|
|
double fblue0_sat;
|
|
double sigma_fblue_sat;
|
|
double blue_fraction;
|
|
|
|
int color;
|
|
int pdfc;
|
|
int pdfs;
|
|
int free[100];
|
|
int i_wp;
|
|
|
|
double M_sat_break;
|
|
double alpha1;
|
|
|
|
double M_min_loden;
|
|
double M_min_hiden;
|
|
double M_min_fac;
|
|
} HOD, HOD2, HODt;
|
|
|
|
|
|
/* Structure to keep information/data about fitting
|
|
* color-defined samples.
|
|
*/
|
|
extern struct COLOR_DATA {
|
|
int ON;
|
|
double ngal_red;
|
|
double ngal_blue;
|
|
double ngal_full;
|
|
int n_red;
|
|
int n_blue;
|
|
int n_full;
|
|
double *r_red,*r_blue,*r_full;
|
|
double *e_red,*e_blue,*e_full;
|
|
double *x_red,*x_blue,*x_full;
|
|
double **covar_red, **covar_blue, **covar_full;
|
|
};
|
|
|
|
/* This is to put the work done in xi_multipoles into
|
|
* a global space.
|
|
*/
|
|
extern struct workspace {
|
|
int nrad;
|
|
int n_mono;
|
|
int n_quad;
|
|
int n_half;
|
|
int n_z;
|
|
int SDSS_bins;
|
|
double rad[WORKBUF];
|
|
double r_mono[WORKBUF];
|
|
double r_quad[WORKBUF];
|
|
double r_half[WORKBUF];
|
|
double rsigma[WORKBUF][WORKBUF];
|
|
double rpi[WORKBUF][WORKBUF];
|
|
double xi_mono[WORKBUF];
|
|
double xi_quad[WORKBUF];
|
|
double xi_half[WORKBUF];
|
|
double xi_z[WORKBUF][WORKBUF];
|
|
double data_m[WORKBUF];
|
|
double covar_m[WORKBUF][WORKBUF];
|
|
double data_q[WORKBUF];
|
|
double covar_q[WORKBUF][WORKBUF];
|
|
double data_h[WORKBUF];
|
|
double covar_h[WORKBUF][WORKBUF];
|
|
double data_z[WORKBUF][WORKBUF];
|
|
double err_m[WORKBUF];
|
|
double err_q[WORKBUF];
|
|
double err_h[WORKBUF];
|
|
double err_z[WORKBUF][WORKBUF];
|
|
|
|
double **covarz;
|
|
int n_ze;
|
|
char covarz_file[WORKBUF];
|
|
|
|
double rmlo,rmhi;
|
|
double rqlo,rqhi;
|
|
double rhlo,rhhi;
|
|
double zlo,zhi;
|
|
|
|
int ncf;
|
|
double cf[WORKBUF];
|
|
int chi2;
|
|
int imono;
|
|
int imono_covar;
|
|
int iquad;
|
|
int iquad_covar;
|
|
int ihalf;
|
|
int ihalf_covar;
|
|
int izspace;
|
|
int imodel;
|
|
int i_quad2mono;
|
|
int i_monopole;
|
|
char monofile[WORKBUF];
|
|
char monocovarfile[WORKBUF];
|
|
char quadfile[WORKBUF];
|
|
char quadcovarfile[WORKBUF];
|
|
char halffile[WORKBUF];
|
|
char halfcovarfile[WORKBUF];
|
|
char esysfile[WORKBUF];
|
|
char zfile[WORKBUF];
|
|
double absolute_error;
|
|
double percentage_error;
|
|
double eq_abs;
|
|
double em_abs;
|
|
double em_per;
|
|
double eh_per;
|
|
int use_asymptotic_values;
|
|
int iout;
|
|
int SysErrFlag;
|
|
|
|
double *psp[6];
|
|
double r_2h[6][100];
|
|
double xi_2h[6][100];
|
|
int n_2h[6];
|
|
|
|
} Work;
|
|
|
|
extern struct m2n_workspace {
|
|
int ndata;
|
|
float *mass, *m2n, *err, *radius;
|
|
int *Ngals_lo, *Ngals_hi, current_Ngals, current_bin;
|
|
char m2n_filename[100];
|
|
double *model_m2n, *model_mass;
|
|
|
|
int counts_nbins, *counts_N200;
|
|
double *ndens_N200;
|
|
|
|
// systematic errors in the modeling
|
|
// to modify things like bias, scale-bias, mass function
|
|
double bias_err, bias_amp;
|
|
double mf_err, mf_amp;
|
|
double scalebias_err, scalebias_amp;
|
|
long IDUM;
|
|
|
|
} M2N;
|
|
|
|
/* Various input files and flags on whether or not to use them.
|
|
*/
|
|
extern struct file_parameters {
|
|
char HaloFile[1000];
|
|
char HaloDensityFile[1000];
|
|
char TF_file[100];
|
|
char TwoHaloFile[100];
|
|
int i_TwoHalo;
|
|
char MassFuncFile[100];
|
|
int i_MassFunc;
|
|
char PDFTable[100];
|
|
int i_PDFTable;
|
|
char PSPFile[100];
|
|
int i_Cvir;
|
|
char CvirFile[100];
|
|
|
|
char HaloFileFormat[100];
|
|
} Files;
|
|
|
|
/* Various tasks the the program will perform
|
|
*/
|
|
|
|
extern struct perform_tasks {
|
|
int All;
|
|
int real_space_xi;
|
|
int z_space_xi;
|
|
int kaiser_xi;
|
|
int multipoles;
|
|
int r_half;
|
|
int wp_minimize;
|
|
int zspace_minimize;
|
|
int MCMC;
|
|
int HOD;
|
|
int PVD;
|
|
int populate_sim;
|
|
int matter_xi;
|
|
int matter_pk;
|
|
int sigma_r;
|
|
int cvir;
|
|
int dndM;
|
|
char root_filename[100];
|
|
} Task;
|
|
|
|
|
|
/* Workspace for w_p minimzation.
|
|
*/
|
|
extern struct WP {
|
|
double **covar;
|
|
int np;
|
|
int ncf;
|
|
int ncf_tot;
|
|
double pi_max;
|
|
double *r;
|
|
double *x;
|
|
double *e;
|
|
char fname_covar[100];
|
|
char fname_wp[100];
|
|
int format;
|
|
int iter;
|
|
double esys;
|
|
double *eigen;
|
|
int npca;
|
|
double ngal;
|
|
double ngal_err;
|
|
int n_wp;
|
|
|
|
double fsat_all, fsat_red, fsat_blue;
|
|
} wp;
|