I spent the last couple days making sure that I trusted the correlation function code I had developed for this project. I compared it to the results from a (slow) sphere-match code on a small data set.
The following are the testing codes (also here ../logs/cross_corr_check.idl). In IDL using spherematch:
; Read in data/random files
readcol,'cfht_data_tiny.dat',rad1,decd1, format = ('D,D')
readcol, 'qso_data_tiny.dat',rad2,decd2,cd, format = ('D,D,D') ;cd is comoving distance of qsos
readcol,'cfht_randoms_tiny.dat',rar1,decr1, format = ('D,D')
; Find number of objects in files
nr1 = n_elements(rar1)
nd1 = n_elements(rad1)
nd2 = n_elements(rad2)
; Correlate out to a large theta to get all pairs
print,'Starting cross-correlation:'
print,'Estimating DD...'
spherematch,rad1,decd1,rad2,decd2,thetamax,ind1a,ind1b,dist_dd,maxmatch=0
; Convert from angular separation to comoving distance separation
this_dd = 2*sin(dist_dd*!pi/360)*cd[ind1b]
;Bins go from 0.1 to 10 with 15 bins.
corrmin = 0.1D
corrmax = 10.0D
nbins = 15.0D
; Find bins lower, upper and centers
bins_lower = (corrmax-corrmin)/(nbins)*findgen(nbins)+corrmin
bins_upper = (corrmax-corrmin)/(nbins)*(findgen(nbins)+1)+corrmin
rmean = fltarr(nbins)
for i = 0,(nbins-1) do rmean[i] = (bins_lower[i]+bins_upper[i])/2.
; Bin the DD separation distances
dd = fltarr(nbins)
for i = 0,(nbins-1) do dd[i] = n_elements(where(this_dd gt bins_lower[i] AND this_dd le bins_upper[i]))
print,'Estimating DR...'
spherematch,rar1,decr1,rad2,decd2,thetamax,ind1,ind2,dist_dr1,maxmatch=0
this_dr = 2*sin(dist_dr1*!pi/360)*cd[ind2]
dr = fltarr(nbins)
for i = 0,(nbins-1) do dr[i] = n_elements(where(this_dr ge bins_lower[i] AND this_dr le bins_upper[i]))
corr1 = 1L*dd/dr*1L*(nd2*nr1)/(1L*nd1*nd2)-1L
for i = 0,(nbins-1) do print, rmean[i], corr1[i]
Separation omega
0.430000 -0.115686
1.09000 -0.104478
1.75000 -0.120804
2.41000 -0.0914845
3.07000 -0.0393971
3.73000 -0.0268416
4.39000 0.0134841
5.05000 0.0596094
5.71000 0.0227162
6.37000 0.102554
7.03000 0.0929233
7.69000 0.0900670
8.35000 0.0591398
9.01000 0.0284724
9.67000 0.0598689
(Note that these "tiny" files only have 6 qsos and 9000 galaxies, so the correlation function values are very noisy, this was just to test and I used small files to)
By comparison I also have the python/C code which runs much faster (../Jessica/qsobias/Correlate/runCorrelation.py):
import numpy as N
from pylab import *
from correlationFunctions import *
#------------------------------------------------------------------------
# Create file names (tiny catalogs)
#------------------------------------------------------------------------
workingDir = 'tinyrun'
makeworkingdir(workingDir)
galaxyDataFile, qsoDataFile, randomDataFile, corr2dCodefile, argumentFile, runConstantsFile = makeFileNamesTiny(workingDir)
oversample = 5. # Amount that randoms should be oversampled
corrBins = 25.0 # Number of correlation bins (+1)
mincorr = 0.1 # (Mpc/h comoving distance separation) Must be great than zero if log-binning
maxcorr = 10.0 # (Mphc/h comoving distance separation)
convo = 180./pi # conversion from degrees to radians
tlogbin = 1 # = 0 for uniform spacing, = 1 for log spacing in theta
#------------------------------------------------------------------------
# Write run constants to a file
#------------------------------------------------------------------------
writeRunConstantsToFile(runConstantsFile, galaxyDataFile, qsoDataFile, \
randomDataFile, corr2dCodefile, argumentFile, oversample, corrBins, \
mincorr, maxcorr, tlogbin)
#------------------------------------------------------------------------
# Compute the Angular Correlation Function
#------------------------------------------------------------------------
runcrossCorrelation(workingDir, argumentFile, corr2dCodefile, galaxyDataFile,\
qsoDataFile, randomDataFile, mincorr, maxcorr, corrBins, tlogbin)
# separation (Mpc/h) crossw (Mpc/h)
0.4300000000 -0.1156862745
1.0900000000 -0.1044776119
1.7500000000 -0.1208039566
2.4100000000 -0.0914845135
3.0700000000 -0.0393970538
3.7300000000 -0.0268417043
4.3900000000 0.0134841235
5.0500000000 0.0596093513
5.7100000000 0.0227161938
6.3700000000 0.1025539385
7.0300000000 0.0929232804
7.6900000000 0.0900670231
8.3500000000 0.0591397849
9.0100000000 0.0284723490
9.6700000000 0.0598689436
As you can see the correlation functions match!
No comments:
Post a Comment