1414from astropy import constants
1515from astropy import units
1616
17+ import pyccl as ccl
1718
18- def sigma_crit (z_lens , z_source , cosmo , d_lens = None , d_source = None ):
19+
20+ # Set ell_max to large value, for spline interpolation (in integral over
21+ # C_ell to get real-space correlation functions). Avoid aliasing
22+ # (oscillations)
23+ ccl .spline_params .ELL_MAX_CORR = 10_000_000
24+
25+ ccl .spline_params .N_ELL_CORR = 5_000
26+
27+
28+ def get_cosmo_default ():
29+ """Get Cosmo Default.
30+
31+ Return default cosmology.
32+
33+ Returns
34+ -------
35+ Cosmology
36+ pyccl cosmology object
37+
38+ """
39+ cos = ccl .Cosmology (
40+ Omega_c = 0.27 ,
41+ Omega_b = 0.045 ,
42+ h = 0.67 ,
43+ sigma8 = 0.83 ,
44+ n_s = 0.96 ,
45+ )
46+
47+ return cos
48+
49+
50+ def sigma_crit (z_lens , z_source , cos , d_lens = None , d_source = None ):
1951 """Sigma Crit.
2052
2153 Critical surface mass density.
@@ -26,7 +58,7 @@ def sigma_crit(z_lens, z_source, cosmo, d_lens=None, d_source=None):
2658 lens redshift
2759 z_source : float
2860 source redshift
29- cosmo : pyccl.core.Cosmology
61+ cos : pyccl.core.Cosmology
3062 cosmological parameters
3163 d_lens : astropy.units.Quantity, optional
3264 precomputed anguar diameter distance to lens, computed from z_lens
@@ -50,13 +82,11 @@ def sigma_crit(z_lens, z_source, cosmo, d_lens=None, d_source=None):
5082 a_lens = 1 / (1 + z_lens )
5183 a_source = 1 / (1 + z_source )
5284 if not d_lens :
53- d_lens = cosmo .angular_diameter_distance (a_lens ) * units .Mpc
85+ d_lens = cos .angular_diameter_distance (a_lens ) * units .Mpc
5486 if not d_source :
55- d_source = cosmo .angular_diameter_distance (a_source ) * units .Mpc
87+ d_source = cos .angular_diameter_distance (a_source ) * units .Mpc
5688
57- d_lens_source = (
58- cosmo .angular_diameter_distance (a_lens , a_source ) * units .Mpc
59- )
89+ d_lens_source = cos .angular_diameter_distance (a_lens , a_source ) * units .Mpc
6090
6191 frac = d_source / (d_lens_source * d_lens )
6292 pref = constants .c ** 2 / (4 * np .pi * constants .G )
@@ -70,7 +100,7 @@ def sigma_crit_eff(
70100 z_lens ,
71101 z_source_arr ,
72102 nz_source_arr ,
73- cosmo ,
103+ cos ,
74104 d_lens = None ,
75105 d_source_arr = None ,
76106):
@@ -87,7 +117,7 @@ def sigma_crit_eff(
87117 source redshifts
88118 nz_source_arr : list
89119 number of galaxies at z_source
90- cosmo : pyccl.core.Cosmology
120+ cos : pyccl.core.Cosmology
91121 cosmological parameters
92122 d_lens : astropy.units.Quantity, optional
93123 precomputed anguar diameter distance to lens;
@@ -124,7 +154,7 @@ def sigma_crit_eff(
124154 sigma_cr = sigma_crit (
125155 z_lens ,
126156 z_source_arr [idx ],
127- cosmo ,
157+ cos ,
128158 d_lens = d_lens ,
129159 d_source = d_source_arr [idx ],
130160 )
@@ -146,7 +176,7 @@ def sigma_crit_m1_eff(
146176 z_lens ,
147177 z_source_arr ,
148178 nz_source_arr ,
149- cosmo ,
179+ cos ,
150180 d_lens = None ,
151181 d_source_arr = None ,
152182):
@@ -164,7 +194,7 @@ def sigma_crit_m1_eff(
164194 source redshifts
165195 nz_source_arr : list
166196 number of galaxies at z_source
167- cosmo : pyccl.core.Cosmology
197+ cos : pyccl.core.Cosmology
168198 cosmological parameters
169199 d_lens : astropy.units.Quantity, optional
170200 precomputed anguar diameter distance to lens;
@@ -204,7 +234,7 @@ def sigma_crit_m1_eff(
204234 sigma_cr = sigma_crit (
205235 z_lens ,
206236 z_source_arr [idx ],
207- cosmo ,
237+ cos ,
208238 d_lens = d_lens ,
209239 d_source = d_source_arr [idx ],
210240 )
@@ -225,3 +255,57 @@ def sigma_crit_m1_eff(
225255 sigma_cr_m1_eff = np .average (sigma_cr_m1_arr , weights = weights )
226256
227257 return sigma_cr_m1_eff * unit
258+
259+
260+ def xipm_theo (
261+ theta ,
262+ cos ,
263+ z ,
264+ dndz ,
265+ ):
266+ """Xipm Theo.
267+
268+ Return theoretical prediction of the shear two-point correlation function.
269+
270+ Parameters
271+ ----------
272+ theta : list
273+ angular scales, list of type astropy.units.Quantity
274+ cos : pyccl.core.Cosmology
275+ cosmological parameters
276+ z : list
277+ redshift centers
278+ dndz : list
279+ number of galaxies for each z (arbitrary normalisation)
280+
281+ Returns
282+ -------
283+ numpy.ndarray
284+ xi_+
285+ numpy.ndarray
286+ xi_-
287+
288+ """
289+ # Create objects to represent tracers of the weak lensing signal with this
290+ # number density (with has_intrinsic_alignment=False)
291+ lens_tr = ccl .WeakLensingTracer (cos , dndz = (z , dndz ))
292+
293+ # Calculate the angular cross-spectrum of the two tracers as a function
294+ # of ell
295+ # MKDEBUG TODO: vary, use unions-shear-ustc-cea/unions_wl/defaults.py
296+ ell = np .logspace (0 , np .log10 (10000 ), 1000 )
297+ cl = ccl .angular_cl (cos , lens_tr , lens_tr , ell )
298+
299+ method = "Bessel"
300+
301+ xipm = {}
302+ for corr_type in ("GG+" , "GG-" ):
303+ xipm [corr_type ] = ccl .correlation (
304+ cos ,
305+ ell ,
306+ cl ,
307+ theta .to ("deg" ),
308+ type = corr_type ,
309+ )
310+
311+ return xipm ["GG+" ], xipm ["GG-" ]
0 commit comments