1
+ import numpy as np
2
+ from cobaya .theory import Theory
3
+ from utils import *
4
+ from HODS import *
5
+ from power_spectrum import *
6
+ from lin_matterPS import *
7
+ from cosmology import *
8
+
9
+ class HaloModel (Theory ):
10
+ _logz = np .linspace (- 3 , np .log10 (1100 ), 150 )
11
+ _default_z_sampling = 10 ** _logz
12
+ _default_z_sampling [0 ] = 0
13
+
14
+ def initialize (self ):
15
+ self ._var_pairs = set ()
16
+ self ._required_results = {}
17
+
18
+ def _get_Pk_mm_lin (self ):
19
+ for pair in self ._var_pairs :
20
+ self .k , self .z , Pk_mm = \
21
+ self .provider .get_Pk_grid (var_pair = pair , nonlinear = False )
22
+
23
+ return Pk_mm
24
+
25
+ def get_Pk_mm_grid (self ):
26
+
27
+ return self .current_state ["Pk_mm_grid" ]
28
+
29
+ def get_Pk_gg_grid (self ):
30
+
31
+ return self .current_state ["Pk_gg_grid" ]
32
+
33
+ def get_Pk_gm_grid (self ):
34
+
35
+ return self .current_state ["Pk_gm_grid" ]
36
+
37
+ class HaloModel_fe (HaloModel ):
38
+ def initialize (self ):
39
+ super ().initialize ()
40
+ self .logmass = np .linspace (self .Mmin , self .mmax , self .nm )
41
+ self .clust_param = {'sigma_EP' : self .sigma_EP ,
42
+ 'sigma_LP' : self .sigma_LP ,
43
+ 'scale_EP' : self .scale_EP ,
44
+ 'scale_LP' : self .scale_LP ,
45
+ 'alpha_EP' : self .alpha_EP ,
46
+ 'alpha_LP' : self .alpha_LP ,
47
+ 'LogMmin_EP' : self .LogMmin_EP ,
48
+ 'LogMmin_LP' : self .LogMmin_LP ,
49
+ 'Dc' : self .Dc ,
50
+ }
51
+ self .isinstance_200 = u_p_nfw_hmf_bias (self .k , self ._get_Pk_mm_lin (), self .logmass , self .z , self .Dc )
52
+ self .instance_HOD = hod_ngal (self .logmass , self .z , self .clust_param , self .instance_200 )
53
+
54
+ def must_provide (self , ** requirements ):
55
+
56
+ options = requirements .get ("halo_model" ) or {}
57
+ self ._var_pairs .update (
58
+ set ((x , y ) for x , y in
59
+ options .get ("vars_pairs" , [("delta_tot" , "delta_tot" )])))
60
+
61
+ self .kmax = max (self .kmax , options .get ("kmax" , self .kmax ))
62
+ self .z = np .unique (np .concatenate (
63
+ (np .atleast_1d (options .get ("z" , self ._default_z_sampling )),
64
+ np .atleast_1d (self .z ))))
65
+
66
+ needs = {}
67
+
68
+ needs ["Pk_grid" ] = {
69
+ "vars_pairs" : self ._var_pairs ,
70
+ "nonlinear" : (False , False ),
71
+ "z" : self .z ,
72
+ "k_max" : self .kmax
73
+ }
74
+
75
+ needs ["sigma_R" ] = {"vars_pairs" : self ._var_pairs ,
76
+ "z" : self .z ,
77
+ "k_max" : self .kmax ,
78
+ "R" : np .linspace (0.14 , 66 , 256 ) # list of radii required
79
+ }
80
+ return needs
81
+
82
+ def calculate (self , state : dict ):
83
+ spectra = mm_gg_mg_spectra (
84
+ self .k ,
85
+ self ._get_Pk_mm_lin (),
86
+ self .logmass ,
87
+ self .z ,
88
+ self .instance_HOD ,
89
+ self .instance_200 ,
90
+ self .gal_mod
91
+ )
92
+
93
+ Pgal = spectra .halo_terms_galaxy ()[0 ]
94
+
95
+ state ['Pk_gg_grid' ] = Pgal
0 commit comments