print("main: building geometries") polygon_params = defaults.polygon_params.copy() polygon_params['n_double'] = 80 z_coarse = np.array([0., 3.]) #z_max = np.max(z_coarse) z_max = 3.01 #z_fine = np.arange(0.0001,z_max,0.0001) z_fine = np.linspace(0.001, z_max, 2) print("main: building basis") basis_params = defaults.basis_params.copy() basis_params['n_bessel_oversample'] = 400000 basis_params['x_grid_size'] = 100000 r_max = C.D_comov(z_max) k_cut = x_cut / r_max k_tests = np.linspace(20. / r_max, k_cut, 25) n_basis = np.zeros(k_tests.size) variances = np.zeros((k_tests.size, z_coarse.size - 1, z_coarse.size - 1)) time4 = time() basis = SphBasisK(r_max, C, k_cut, basis_params, l_ceil=l_max) time5 = time() time2 = time() pixelated = True if pixelated: res_healpix = 9 max_n_pixels = 12 * (2**res_healpix)**2 #n_pixels = np.unique(np.hstack([np.logspace(3,np.log10(max_n_pixels),40).astype(np.int),np.linspace(1000,max_n_pixels,40).astype(np.int)]))
def test_half_sky(): """do some tests with a half sky geo known results""" #get dictionaries of parameters that various functions will need cosmo = { 'Omegabh2':0.0222, 'Omegach2':0.1153, 'Omegab' :0.04283392714316876, 'Omegac' :0.22216607285683124, 'Omegamh2':0.13752999999999999, 'OmegaL' :0.735, 'OmegaLh2':0.38145113207547166, 'Omegam' :0.265, 'H0' :72.04034509047493, 'sigma8' : 0.8269877678406697, #from the code 'h' :0.7204034509047493, 'Omegak' : 0.0, 'Omegakh2': 0.0, 'Omegar' : 0.0, 'Omegarh2': 0.0, 'ns' : 0.9608, 'tau' : 0.081, 'Yp' :0.299, 'As' : 2.464*10**-9, 'LogAs' :-19.821479791275138, 'w' :-1.0, 'de_model':'constant_w',#dark energy model 'mnu' :0.} cosmo['de_model'] = 'constant_w' cosmo['wa'] = 0. cosmo['w0'] = -1. cosmo['w'] = -1. p_space = 'jdem' camb_params = defaults.camb_params.copy() camb_params['force_sigma8'] = False camb_params['maxkh'] = 100. camb_params['kmax'] = 30. camb_params['npoints'] = 10000 camb_params['pivot_scalar'] = 0.002 power_params = defaults.power_params.copy() power_params.camb = camb_params power_params.camb['accuracy'] = 1 #prior_params = defaults.prior_fisher_params.copy() zs = np.array([0.0001,3.]) z_fine = np.linspace(0.0001,zs[-1],10000) basis_params = defaults.basis_params.copy() basis_params['n_bessel_oversample'] = 400000*10 #test with half sky using results calculated in mathematica basis_params = defaults.basis_params.copy() basis_params['n_bessel_oversample'] = 400000*10 C = CosmoPie(cosmo,p_space=p_space) l_max = 4 x_cut = 10 z_max = z_fine[-1]+0.000001 r_max = C.D_comov(z_max) k_cut = x_cut/r_max geo1 = HalfSkyGeo(zs,C,z_fine) P = MatterPower(C,power_params) P.P_lin = 1./(P.k*r_max) C.set_power(P) basis = SphBasisK(r_max,C,k_cut,basis_params,l_ceil=l_max,needs_m=False) basis2 = SphBasisK(r_max,C,k_cut,basis_params,l_ceil=l_max,needs_m=True) ddbar = basis.get_ddelta_bar_ddelta_alpha(geo1,tomography=True) ddbar2 = basis2.get_ddelta_bar_ddelta_alpha(geo1,tomography=True) ddbar_got2 = basis.get_dO_I_ddelta_alpha(geo1,geo1.r_fine**2)*3./r_max**3 #ns = np.arange(1,ddbar.size+1) cov_got = basis.get_covar_array() cov_got2 = basis2.get_covar_array() var_got = basis.get_variance(geo1) var_got2 = basis2.get_variance(geo1) cov_pred0 = np.array([[3.220393570704632e-11,-9.51309537893619e-12,9.955267964241254e-12],[-9.51309537893619e-12,5.937410951604845e-11,-1.2342996089442917e-11],[9.955267964241254e-12,-1.2342996089442917e-11,8.524795995567036e-11]]) cov_pred1 = np.array([[4.306831299006748e-11,-7.977015797357624e-12],[-7.977015797357624e-12,6.907871421795387e-11]]) cov_pred2 = np.array([[5.467066924435653e-11,-7.056047462103054e-12],[-7.056047462103054e-12,7.984696153964485e-11]]) cov_pred3 = np.array([[6.70079506270691e-11]]) cov_pred4 = np.array([[7.985214180284307e-11]]) cov_pred = np.zeros((ddbar.size,ddbar.size)) cov_pred[0:3,0:3] = cov_pred0 cov_pred[3:5,3:5] = cov_pred1 cov_pred[5:7,5:7] = cov_pred2 cov_pred[7,7] = cov_pred3 cov_pred[8,8] = cov_pred4 var_pred = np.dot(ddbar,np.dot(cov_pred,ddbar.T)) var_pred2 = np.dot(ddbar2,np.dot(cov_got2,ddbar2.T)) assert np.all(cov_got==cov_got.T) assert np.all(cov_got2==cov_got2.T) assert np.isclose(var_got[0,0],var_pred,atol=1.e-15,rtol=1.e-3) assert np.isclose(var_got2[0,0],var_pred2,atol=1.e-15,rtol=1.e-3) assert np.isclose(var_got2[0,0],var_pred,atol=1.e-15,rtol=1.e-3) assert np.allclose(cov_pred,cov_got,atol=1.e-15,rtol=1.e-3) assert np.allclose(ddbar,ddbar_got2,rtol=1.e-3,atol=1.e-15) for itr in range(0,basis.C_id.shape[0]): if basis.C_id[itr,0]>0 and np.mod(basis.C_id[itr,0],2)==0.: assert ddbar[0,itr] == 0. for itr in range(0,basis2.C_id.shape[0]): if basis2.C_id[itr,0]>0 and np.mod(basis2.C_id[itr,0],2)==0.: assert ddbar2[0,itr] == 0. elif basis2.C_id[itr,2]!=0: assert ddbar2[0,itr] == 0.
def test_full_sky(): """do some tests with a full sky geo known results""" #get dictionaries of parameters that various functions will need #cosmo = defaults.cosmology_wmap.copy() cosmo = { 'Omegabh2':0.02223, 'Omegach2':0.1153, 'Omegab' :0.04283392714316876, 'Omegac' :0.22216607285683124, 'Omegamh2':0.13752999999999999, 'OmegaL' :0.735, 'OmegaLh2':0.38145113207547166, 'Omegam' :0.265, 'H0' :72.04034509047493, 'sigma8' : 0.8269877678406697, #from the code 'h' :0.7204034509047493, 'Omegak' : 0.0, 'Omegakh2': 0.0, 'Omegar' : 0.0, 'Omegarh2': 0.0, 'ns' : 0.9608, 'tau' : 0.081, 'Yp' :0.299, 'As' : 2.464*10**-9, 'LogAs' :-19.821479791275138, 'w' :-1.0, 'de_model':'constant_w',#dark energy model 'mnu' :0.} cosmo['de_model'] = 'constant_w' cosmo['wa'] = 0. cosmo['w0'] = -1. cosmo['w'] = -1. p_space = 'jdem' camb_params = defaults.camb_params.copy() camb_params['force_sigma8'] = False camb_params['maxkh'] = 100. camb_params['kmax'] = 30. camb_params['npoints'] = 10000 camb_params['pivot_scalar'] = 0.002 power_params = defaults.power_params.copy() power_params.camb = camb_params power_params.camb['accuracy'] = 1 #prior_params = defaults.prior_fisher_params.copy() zs = np.array([0.0001,3.]) z_fine = np.linspace(0.0001,zs[-1],10000) basis_params = defaults.basis_params.copy() basis_params['n_bessel_oversample'] = 400000*10 C = CosmoPie(cosmo,p_space=p_space) l_max = 0 x_cut = 10*np.pi z_max = z_fine[-1]+0.000001 r_max = C.D_comov(z_max) k_cut = x_cut/r_max P = MatterPower(C,power_params) C.set_power(P) geo1 = FullSkyGeo(zs,C,z_fine) basis = SphBasisK(r_max,C,k_cut,basis_params,l_ceil=l_max,needs_m=True) ddbar = basis.get_ddelta_bar_ddelta_alpha(geo1,tomography=True) ns = np.arange(1,ddbar.size+1) ddbar_pred = -3./(2.*np.pi**(5./2.))*(-1)**ns/ns**2 assert np.allclose(ddbar,ddbar_pred) cov_pred = np.zeros((ns.size,ns.size)) xs = P.k*r_max P_in = P.get_matter_power(np.array([0.]),pmodel='linear')[:,0] for i1 in range(0,ns.size): for i2 in range(i1,ns.size): integrand1 = 8.*np.pi**3*(-1)**(ns[i1]+ns[i2])*ns[i1]**2*ns[i2]**2/r_max**3*np.sin(xs)**2/((ns[i1]**2*np.pi**2-xs**2)*(ns[i2]**2*np.pi**2-xs**2)) cov_pred[i1,i2] = np.trapz(integrand1*P_in,xs) if i1!=i2: cov_pred[i2,i1] = cov_pred[i1,i2] cov_got = basis.get_covar_array() var_pred = np.dot(ddbar_pred.T,np.dot(cov_pred,ddbar_pred)) var_got = basis.get_variance(geo1) assert np.all(cov_got==cov_got.T) assert np.allclose(basis.C_id[:,1],ns*np.pi/r_max) assert np.allclose(cov_pred,cov_got,atol=1.e-15,rtol=1.e-3) assert np.isclose(var_got[0,0],var_pred,atol=1.e-15,rtol=1.e-3) ddbar_got2 = basis.get_dO_I_ddelta_alpha(geo1,geo1.r_fine**2)*3./r_max**3 assert np.allclose(ddbar,ddbar_got2,rtol=1.e-3)
def test_rotational_invariance(): """test invariance of results under global rotations""" camb_params = { 'npoints':2000, 'minkh':1.1e-4, 'maxkh':1.476511342960e+02, 'kmax':1.476511342960e+02, 'leave_h':False, 'force_sigma8':False, 'return_sigma8':False, 'accuracy':1, 'pivot_scalar':0.002 } print("main: building cosmology") power_params = defaults.power_params.copy() power_params.camb = camb_params power_params.camb['accuracy'] = 1 power_params.camb['maxkh'] = 100. power_params.camb['kmax'] = 30. power_params.camb['npoints'] = 1000 C = CosmoPie(defaults.cosmology.copy(),p_space='jdem') P_lin = mps.MatterPower(C,power_params) C.set_power(P_lin) l_max = 23 x_cut = 30. print("main: building geometries") polygon_params = defaults.polygon_params.copy() polygon_params['n_double'] = 80 z_coarse = np.array([0.2,1.,2.,3.]) zs_lsst = np.linspace(0.,1.2,3) #z_max = np.max(z_coarse) #z_fine = np.arange(0.0001,z_max,0.0001) z_fine = np.linspace(0.001,3.,500) z_max = z_fine[-1]+0.001 print("main: building basis") basis_params = defaults.basis_params.copy() basis_params['n_bessel_oversample'] = 400000 basis_params['x_grid_size'] = 100000 r_max = C.D_comov(z_max) k_cut = x_cut/r_max basis = SphBasisK(r_max,C,k_cut,basis_params,l_ceil=l_max) geo1 = WFIRSTGeo(z_coarse,C,z_fine,l_max,polygon_params)#HalfSkyGeo(z_coarse,C,z_fine) geo2 = LSSTGeo(zs_lsst,C,z_fine,l_max,polygon_params)#HalfSkyGeo(z_coarse,C,z_fine) geo1_rot1 = AlmRotGeo(geo1,C,z_coarse,z_fine,np.array([0.,np.pi/2.,np.pi]),polygon_params['n_double']) geo1_rot2 = AlmRotGeo(geo1_rot1,C,z_coarse,z_fine,np.array([0.,np.pi/2.,np.pi]),polygon_params['n_double']) geo1_rot3 = AlmRotGeo(geo1_rot2,C,z_coarse,z_fine,np.array([0.005,1.2496,1.72]),polygon_params['n_double']) geo2_rot1 = AlmRotGeo(geo2,C,zs_lsst,z_fine,np.array([0.,np.pi/2.,np.pi]),polygon_params['n_double']) geo2_rot2 = AlmRotGeo(geo2_rot1,C,zs_lsst,z_fine,np.array([0.,np.pi/2.,np.pi]),polygon_params['n_double']) geo2_rot3 = AlmRotGeo(geo2_rot2,C,zs_lsst,z_fine,np.array([0.005,1.2496,1.72]),polygon_params['n_double']) assert np.allclose(geo1.get_alm_array(l_max),geo1_rot2.get_alm_array(l_max)) var_geo1 = basis.get_variance(geo1,k_cut_in=k_cut) var_geo1_rot1 = basis.get_variance(geo1_rot1,k_cut_in=k_cut) var_geo1_rot2 = basis.get_variance(geo1_rot2,k_cut_in=k_cut) var_geo1_rot3 = basis.get_variance(geo1_rot3,k_cut_in=k_cut) assert np.allclose(var_geo1,var_geo1_rot1,atol=1.e-20,rtol=1.e-8) assert np.allclose(var_geo1,var_geo1_rot2,atol=1.e-20,rtol=1.e-8) assert np.allclose(var_geo1,var_geo1_rot3,atol=1.e-20,rtol=1.e-8) var_geo2 = basis.get_variance(geo2,k_cut_in=k_cut) var_geo2_rot1 = basis.get_variance(geo2_rot1,k_cut_in=k_cut) var_geo2_rot2 = basis.get_variance(geo2_rot2,k_cut_in=k_cut) var_geo2_rot3 = basis.get_variance(geo2_rot3,k_cut_in=k_cut) assert np.allclose(var_geo2,var_geo2_rot1,atol=1.e-20,rtol=1.e-8) assert np.allclose(var_geo2,var_geo2_rot2,atol=1.e-20,rtol=1.e-8) assert np.allclose(var_geo2,var_geo2_rot3,atol=1.e-20,rtol=1.e-8) cosmo_par_list = np.array(['ns','Omegamh2','Omegabh2','OmegaLh2','LogAs','w']) cosmo_par_eps = np.array([0.002,0.00025,0.0001,0.00025,0.1,0.01]) nz_params_wfirst_lens = defaults.nz_params_wfirst_lens.copy() nz_params_wfirst_lens['i_cut'] = 26.3 nz_params_wfirst_lens['data_source'] = './data/CANDELS-GOODSS2.dat' nz_wfirst_lens = NZWFirstEff(nz_params_wfirst_lens) sw_params = defaults.sw_survey_params.copy() lw_params = defaults.lw_survey_params.copy() sw_observable_list = defaults.sw_observable_list.copy() lw_observable_list = defaults.lw_observable_list.copy() len_params = defaults.lensing_params.copy() mf_params = defaults.hmf_params.copy() mf_params['n_grid'] = 2000 mf_params['log10_min_mass'] = 10. n_params_lsst = defaults.nz_params_lsst_use.copy() n_params_lsst['i_cut'] = 24.1 #gold standard subset of LSST 1 year (10 year 25.3) dn_params = defaults.dn_params.copy() dn_params['nz_select'] = 'LSST' dn_params['sigma0'] = 0.1 lw_param_list = np.array([{'dn_params':dn_params,'n_params':n_params_lsst,'mf_params':mf_params}]) prior_params = defaults.prior_fisher_params.copy() sw_survey_geo1 = SWSurvey(geo1,'geo1',C,sw_params,cosmo_par_list,cosmo_par_eps,sw_observable_list,len_params,nz_wfirst_lens) sw_survey_geo1_rot1 = SWSurvey(geo1_rot1,'geo1_rot1',C,sw_params,cosmo_par_list,cosmo_par_eps,sw_observable_list,len_params,nz_wfirst_lens) sw_survey_geo1_rot2 = SWSurvey(geo1_rot2,'geo1_rot2',C,sw_params,cosmo_par_list,cosmo_par_eps,sw_observable_list,len_params,nz_wfirst_lens) sw_survey_geo1_rot3 = SWSurvey(geo1_rot3,'geo1_rot3',C,sw_params,cosmo_par_list,cosmo_par_eps,sw_observable_list,len_params,nz_wfirst_lens) survey_lw1 = LWSurvey(np.array([geo1,geo2]),'lw1',basis,C,lw_params,observable_list=lw_observable_list,param_list=lw_param_list) survey_lw1_rot1 = LWSurvey(np.array([geo1_rot1,geo2_rot1]),'lw1',basis,C,lw_params,observable_list=lw_observable_list,param_list=lw_param_list) survey_lw1_rot2 = LWSurvey(np.array([geo1_rot2,geo2_rot2]),'lw1',basis,C,lw_params,observable_list=lw_observable_list,param_list=lw_param_list) survey_lw1_rot3 = LWSurvey(np.array([geo1_rot3,geo2_rot3]),'lw1',basis,C,lw_params,observable_list=lw_observable_list,param_list=lw_param_list) SS_geo1 = SuperSurvey(np.array([sw_survey_geo1]),np.array([survey_lw1]),basis,C,prior_params,get_a=True,do_unmitigated=True,do_mitigated=True,include_sw=True) SS_geo1_rot1 = SuperSurvey(np.array([sw_survey_geo1_rot1]),np.array([survey_lw1_rot1]),basis,C,prior_params,get_a=True,do_unmitigated=True,do_mitigated=True,include_sw=True) SS_geo1_rot2 = SuperSurvey(np.array([sw_survey_geo1_rot2]),np.array([survey_lw1_rot2]),basis,C,prior_params,get_a=True,do_unmitigated=True,do_mitigated=True,include_sw=True) SS_geo1_rot3 = SuperSurvey(np.array([sw_survey_geo1_rot3]),np.array([survey_lw1_rot3]),basis,C,prior_params,get_a=True,do_unmitigated=True,do_mitigated=True,include_sw=True) for i in xrange(0,3): for j in xrange(1,3): assert np.allclose(SS_geo1.f_set_nopriors[i][j].get_covar(),SS_geo1_rot1.f_set_nopriors[i][j].get_covar(),atol=1.e-30,rtol=1.e-8) assert np.allclose(SS_geo1.f_set_nopriors[i][j].get_covar(),SS_geo1_rot2.f_set_nopriors[i][j].get_covar(),atol=1.e-30,rtol=1.e-8) assert np.allclose(SS_geo1.f_set_nopriors[i][j].get_covar(),SS_geo1_rot3.f_set_nopriors[i][j].get_covar(),atol=1.e-30,rtol=1.e-8) a_geo1 = SS_geo1.multi_f.get_a_lw() a_geo1_rot1 = SS_geo1_rot1.multi_f.get_a_lw() a_geo1_rot2 = SS_geo1_rot2.multi_f.get_a_lw() a_geo1_rot3 = SS_geo1_rot3.multi_f.get_a_lw() assert np.allclose(a_geo1[0],a_geo1_rot1[0],atol=1.e-20,rtol=1.e-8) assert np.allclose(a_geo1[1],a_geo1_rot1[1],atol=1.e-20,rtol=1.e-8) assert np.allclose(a_geo1[0],a_geo1_rot2[0],atol=1.e-20,rtol=1.e-8) assert np.allclose(a_geo1[1],a_geo1_rot2[1],atol=1.e-20,rtol=1.e-8) assert np.allclose(a_geo1[0],a_geo1_rot3[0],atol=1.e-20,rtol=1.e-8) assert np.allclose(a_geo1[1],a_geo1_rot3[1],atol=1.e-20,rtol=1.e-8) assert np.allclose(a_geo1[0],var_geo1,atol=1.e-30,rtol=1.e-13) assert np.allclose(a_geo1_rot1[0],var_geo1_rot1,atol=1.e-30,rtol=1.e-11) assert np.allclose(a_geo1_rot2[0],var_geo1_rot2,atol=1.e-30,rtol=1.e-11) assert np.allclose(a_geo1_rot3[0],var_geo1_rot3,atol=1.e-30,rtol=1.e-11) for i in xrange(0,2): for j in xrange(0,2): eig_geo1 = SS_geo1.eig_set[i][j][0] eig_geo1_rot1 = SS_geo1_rot1.eig_set[i][j][0] eig_geo1_rot2 = SS_geo1_rot2.eig_set[i][j][0] eig_geo1_rot3 = SS_geo1_rot3.eig_set[i][j][0] assert np.allclose(eig_geo1,eig_geo1_rot1) assert np.allclose(eig_geo1,eig_geo1_rot2) assert np.allclose(eig_geo1,eig_geo1_rot3)