├── folps_logo.png
├── setup.py
├── README.md
├── notebooks
├── pkl_cb_m00_z05.dat
└── pkl_cb_m04_z05.dat
└── FOLPSnu.py
/folps_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/henoriega/FOLPS-nu/HEAD/folps_logo.png
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup
2 |
3 |
4 | package_basename = 'FOLPSnu'
5 |
6 |
7 | setup(name=package_basename,
8 | version='1.0.0',
9 | author='Hernán E. Noriega & Alejandro Aviles',
10 | author_email='',
11 | description='Computation of the galaxy redshift space power spectrum for cosmologies containing massive neutrinos',
12 | license='',
13 | url='https://github.com/henoriega/FOLPS-nu',
14 | install_requires=['numpy', 'scipy'],
15 | py_modules=[package_basename])
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # FOLPSν (aka Flops)
6 | FOLPSν is a Python code that computes the galaxy redshift space power spectrum for cosmologies containing massive neutrinos. The code combines analytical modeling and numerical methods based on the FFTLog formalism.
7 |
8 | For version with JAX (x10 times faster!): [Folpsax](https://github.com/cosmodesi/folpsax)
9 |
10 | [](https://arxiv.org/abs/2208.02791)
11 |
12 |
13 | ## Developers (code and (e)BOSS and DESI pipelines):
14 | - [Hernán E. Noriega](mailto:henoriega@estudiantes.fisica.unam.mx)
15 | - [Alejandro Aviles](mailto:avilescervantes@gmail.com)
16 |
17 |
18 | *Special thanks to Arnaud de Mattia for helping with the [Jax](https://github.com/cosmodesi/folpsax) version of this code.*
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | ## Run
29 |
30 | **Dependences**
31 |
32 | The code employs the standard libraries:
33 | - NumPy
34 | - SciPy
35 |
36 | We recommend to use NumPy versions ≥ 1.20.0. For older versions, one needs to rescale by a factor 1/N the [FFT computation](https://github.com/henoriega/FOLPS-nu/blob/main/FOLPSnu.py#L626).
37 |
38 | To run the code, first use git clone:
39 |
40 | ```
41 | git clone https://github.com/henoriega/FOLPS-nu.git
42 | ```
43 | or install via pip by:
44 |
45 | ```
46 | pip install git+https://github.com/henoriega/FOLPS-nu
47 | ```
48 |
49 | Once everything is ready, please check the [Jupyter Notebook](https://github.com/henoriega/FOLPS-nu/blob/main/notebooks/Example.ipynb) which contains some helpful examples.
50 |
51 |
52 |
53 | Attribution
54 | -----------
55 |
56 | Please cite if you find this code useful in your research.
57 |
58 | @article{Noriega:2022nhf,
59 | author = "Noriega, Hern\'an E. and Aviles, Alejandro and Fromenteau, Sebastien and Vargas-Maga\~na, Mariana",
60 | title = "{Fast computation of non-linear power spectrum in cosmologies with massive neutrinos}",
61 | eprint = "2208.02791",
62 | archivePrefix = "arXiv",
63 | primaryClass = "astro-ph.CO",
64 | month = "8",
65 | year = "2022"
66 | }
67 |
--------------------------------------------------------------------------------
/notebooks/pkl_cb_m00_z05.dat:
--------------------------------------------------------------------------------
1 | 0.00001 27.675713720320847
2 | 0.000010104300000000008 27.95335910353806
3 | 0.000010308399999999996 28.49635729924831
4 | 0.000010516599999999992 29.049843042140473
5 | 0.000010729100000000004 29.614331314286396
6 | 0.000010945800000000003 30.18953965483612
7 | 0.000011166999999999997 30.776247153606356
8 | 0.000011392499999999993 31.37390599578948
9 | 0.000011622699999999991 31.98355859059344
10 | 0.000011857499999999998 32.604921659482535
11 | 0.000012097000000000006 33.2382416037221
12 | 0.000012341400000000009 33.884028366348
13 | 0.000012590699999999998 34.54226263530477
14 | 0.000012845100000000007 35.213452784089206
15 | 0.000013104499999999996 35.89731521031159
16 | 0.000013369299999999998 36.594884003434906
17 | 0.000013639300000000002 37.30561148959489
18 | 0.000013914900000000006 38.03052942961139
19 | 0.000014195999999999994 38.76935296384347
20 | 0.000014482800000000001 39.52258588031758
21 | 0.000014775299999999989 40.29020595364778
22 | 0.000015073799999999991 41.07297762204602
23 | 0.000015378300000000005 41.87087738571914
24 | 0.00001568900000000001 42.68440548785083
25 | 0.00001600590000000001 43.51353777435207
26 | 0.0000163293 44.35903439091177
27 | 0.0000166591 45.22060881356725
28 | 0.0000169957 46.099280321536945
29 | 0.00001733900000000001 46.99476158484257
30 | 0.000017689299999999997 47.90780855894486
31 | 0.000018046599999999987 48.83839407739148
32 | 0.00001841119999999999 49.787271744173346
33 | 0.000018783099999999986 50.75441324215414
34 | 0.0000191626 51.74056985280991
35 | 0.00001954970000000002 52.74571213585947
36 | 0.000019944600000000006 53.77032971555445
37 | 0.000020347500000000018 54.81491098235287
38 | 0.00002075859999999999 55.8799431011521
39 | 0.000021177900000000016 56.96539447096546
40 | 0.00002160570000000001 58.07200958693567
41 | 0.0000220422 59.20027257552175
42 | 0.00002248750000000002 60.35040818504469
43 | 0.000022941800000000015 61.522898753523094
44 | 0.000023405200000000014 62.717967649319796
45 | 0.000023878 63.93635305301921
46 | 0.000024360399999999995 65.17853380189037
47 | 0.000024852500000000023 66.44473037728248
48 | 0.000025354600000000016 67.73567692654244
49 | 0.0000258668 69.05159205189813
50 | 0.000026389300000000022 70.39295063724983
51 | 0.0000269224 71.76048288260363
52 | 0.000027466299999999998 73.15466087512264
53 | 0.000028021099999999988 74.57569957285132
54 | 0.000028587199999999993 76.02458116277714
55 | 0.00002916469999999998 77.50151825747452
56 | 0.000029753900000000017 79.00723409829118
57 | 0.000030354900000000027 80.54193957747981
58 | 0.0000309681 82.10661052917145
59 | 0.000031593699999999975 83.70171046132583
60 | 0.000032232 85.32795654786489
61 | 0.000032883100000000024 86.9855552092452
62 | 0.000033547400000000024 88.67547553106375
63 | 0.000034225100000000005 90.3981758695987
64 | 0.00003491649999999998 92.1543675219603
65 | 0.00003562179999999997 93.94450634160424
66 | 0.00003634139999999998 95.76955428594454
67 | 0.00003707560000000003 97.63021751013189
68 | 0.00003782459999999998 99.52694734351405
69 | 0.00003858869999999999 101.46044715823172
70 | 0.00003936820000000002 103.43141866690294
71 | 0.00004016350000000001 105.44081450017153
72 | 0.00004097490000000001 107.48933251960162
73 | 0.00004180259999999999 109.57741679143699
74 | 0.00004264709999999999 111.70626651307639
75 | 0.000043508600000000006 113.87632237345186
76 | 0.00004438750000000004 116.08852746931895
77 | 0.0000452842 118.34382257899331
78 | 0.000046198999999999996 120.6428949548635
79 | 0.00004713230000000003 122.98668136191043
80 | 0.00004808440000000005 125.37586545439125
81 | 0.00004905579999999997 127.81163070464561
82 | 0.00005004679999999996 130.29465666607527
83 | 0.000051057800000000004 132.82587171190178
84 | 0.00005208920000000003 135.40620201970242
85 | 0.00005314149999999997 138.03682148316616
86 | 0.000054215100000000016 140.71865137606034
87 | 0.00005531030000000002 143.4523613204414
88 | 0.000056427599999999975 146.23911822643964
89 | 0.000057567500000000035 149.08008614782875
90 | 0.00005873049999999996 151.97642630347124
91 | 0.000059916900000000036 154.92879958446488
92 | 0.00006112729999999997 157.9386113065014
93 | 0.00006236220000000001 161.00701488020894
94 | 0.00006362199999999995 164.1349127776512
95 | 0.00006490720000000003 167.32345350297126
96 | 0.00006621839999999994 170.57403067304986
97 | 0.00006755610000000004 173.88778684719642
98 | 0.00006892079999999996 177.2658619307732
99 | 0.00007031310000000001 180.70964045030362
100 | 0.00007173360000000007 184.22050357630678
101 | 0.0000731827 187.79933539776752
102 | 0.0000746611 191.4477582647201
103 | 0.00007616929999999998 195.16689749760752
104 | 0.00007770800000000002 198.9583685434727
105 | 0.0000792778 202.82353675095638
106 | 0.00008087930000000004 206.76376427407192
107 | 0.00008251320000000004 210.78065585434126
108 | 0.00008418010000000007 214.87556678226184
109 | 0.00008588069999999998 219.05009462154385
110 | 0.00008761559999999998 223.30558791796147
111 | 0.00008938549999999993 227.643637178338
112 | 0.00009119120000000006 232.066073971103
113 | 0.0000930334000000001 236.5744807555474
114 | 0.00009491280000000002 241.17043629529715
115 | 0.00009683019999999998 245.85575995699725
116 | 0.00009878629999999994 250.63202265608757
117 | 0.00010078199999999996 255.50127950359203
118 | 0.00010281800000000003 260.4650931493547
119 | 0.00010489500000000006 265.52749446151887
120 | 0.00010701400000000006 270.6815149645889
121 | 0.00010917600000000003 275.92561261992626
122 | 0.00011138100000000005 281.2869755752296
123 | 0.00011363099999999998 286.75347873198746
124 | 0.00011592700000000004 292.3211168550207
125 | 0.00011826900000000003 298.00629171323766
126 | 0.00012065800000000001 303.7918870072961
127 | 0.000123095 309.6882572523487
128 | 0.00012558200000000003 315.70442000222874
129 | 0.00012811899999999997 321.8454986199564
130 | 0.00013070699999999998 328.09469785844266
131 | 0.00013334700000000002 334.4554710824028
132 | 0.00013604100000000008 340.94786828550133
133 | 0.00013878999999999996 347.5851429642417
134 | 0.00014159300000000005 354.33057519749775
135 | 0.00014445399999999994 361.19681108862454
136 | 0.00014737200000000002 368.20924776839007
137 | 0.00015034899999999998 375.3600756731837
138 | 0.00015338600000000004 382.6367945078136
139 | 0.00015648499999999996 390.0711817104391
140 | 0.00015964600000000008 397.6385805740683
141 | 0.0001628710000000001 405.3614957219573
142 | 0.00016616100000000006 413.23805798465827
143 | 0.000169518 421.2547897964621
144 | 0.00017294200000000004 429.42167896168763
145 | 0.00017643599999999995 437.7633256272098
146 | 0.00017999999999999998 446.2631502361306
147 | 0.000183637 454.917726975005
148 | 0.00018734600000000007 463.73861063089254
149 | 0.00019113100000000006 472.73338302383445
150 | 0.00019499199999999992 481.90667479754916
151 | 0.00019893100000000012 491.24283869877695
152 | 0.00020295000000000005 500.77810855912986
153 | 0.00020705 510.5063285935331
154 | 0.00021123200000000005 520.4018502243905
155 | 0.00021549899999999996 530.4839219933012
156 | 0.000219853 540.7808654500452
157 | 0.0002242939999999999 551.2707139827902
158 | 0.00022882499999999994 561.9443213714856
159 | 0.000233448 572.8381920835342
160 | 0.0002381639999999999 583.9422581684715
161 | 0.0002429749999999999 595.2636778265827
162 | 0.00024788300000000007 606.7966121904393
163 | 0.0002528910000000001 618.5538272806218
164 | 0.00025799999999999993 630.5404829059102
165 | 0.0002632119999999999 642.7509919626765
166 | 0.00026852899999999994 655.1995719168308
167 | 0.0002739540000000001 667.899661463299
168 | 0.00027948799999999994 680.8360168610843
169 | 0.000285134 694.0150868347656
170 | 0.00029089400000000015 707.445638036122
171 | 0.00029676999999999997 721.1355568581164
172 | 0.00030276600000000005 735.0883396718822
173 | 0.0003088820000000001 749.3112652712718
174 | 0.000315122 763.8201929219955
175 | 0.000321488 778.5985284211839
176 | 0.0003279819999999999 793.6474186321249
177 | 0.00033460800000000013 809.0020411977387
178 | 0.0003413670000000001 824.6329233832527
179 | 0.0003482629999999999 840.5784657315442
180 | 0.0003552989999999999 856.8295295016922
181 | 0.000362476 873.3803984008024
182 | 0.00036979900000000014 890.2469057110103
183 | 0.000377269 907.4404691915724
184 | 0.0003848899999999999 924.9557653413477
185 | 0.000392666 942.8011121587374
186 | 0.000400598 960.9980913125562
187 | 0.00040869100000000014 979.5449916782493
188 | 0.00041694700000000014 998.4162231874607
189 | 0.00042537000000000006 1017.6446682573768
190 | 0.0004339629999999999 1037.2633073092288
191 | 0.00044272899999999983 1057.261954529399
192 | 0.00045167299999999993 1077.681157829338
193 | 0.0004607969999999999 1098.4373936248505
194 | 0.0004701059999999998 1119.5487503287422
195 | 0.000479603 1141.0340348044974
196 | 0.0004892919999999998 1162.994519794311
197 | 0.0004991759999999998 1185.3534093453936
198 | 0.0005092600000000001 1208.1364244788433
199 | 0.0005195480000000001 1231.4014708072305
200 | 0.0005300429999999999 1255.0563933419262
201 | 0.0005407510000000002 1279.1024689555206
202 | 0.000551675 1303.6518356572442
203 | 0.000562819 1328.668745418741
204 | 0.0005741889999999998 1354.096588566825
205 | 0.000585788 1380.044315529238
206 | 0.000597622 1406.473126118665
207 | 0.0006096950000000004 1433.443318851856
208 | 0.0006220109999999998 1460.8172310615669
209 | 0.0006345770000000002 1488.7697243699592
210 | 0.0006473959999999997 1517.2232804190778
211 | 0.0006604740000000002 1546.1375971779444
212 | 0.0006738170000000003 1575.678468759244
213 | 0.0006874289999999997 1605.7249097309234
214 | 0.000701316 1636.294421469465
215 | 0.0007154839999999998 1667.5124269005587
216 | 0.000729937 1699.2301748404448
217 | 0.0007446829999999998 1731.5629323538662
218 | 0.0007597269999999998 1764.4653545236997
219 | 0.0007750739999999997 1797.9217647214894
220 | 0.000790732 1832.057289486256
221 | 0.0008067060000000001 1866.785825944027
222 | 0.000823002 1902.1622940730654
223 | 0.0008396280000000004 1938.2080271847817
224 | 0.0008565889999999996 1974.877299013173
225 | 0.000873894 2012.2109715444967
226 | 0.0008915469999999997 2050.170940505253
227 | 0.0009095580000000004 2088.847820858422
228 | 0.0009279319999999996 2128.2227674668184
229 | 0.0009466780000000002 2168.292541666778
230 | 0.0009658020000000004 2209.0577639915514
231 | 0.000985312 2250.5269964839094
232 | 0.00100522 2292.7052916735697
233 | 0.0010255200000000003 2335.7166610251834
234 | 0.0010462399999999997 2379.5585795034003
235 | 0.0010673799999999995 2424.021368109692
236 | 0.0010889399999999996 2469.3099659799054
237 | 0.0011109399999999995 2515.366455305787
238 | 0.0011333799999999994 2562.2486692385905
239 | 0.0011562700000000005 2609.953505898886
240 | 0.0011796299999999997 2658.470854591375
241 | 0.0012034600000000004 2707.869477076895
242 | 0.0012277700000000004 2758.004587210458
243 | 0.0012525799999999997 2808.9706819573535
244 | 0.0012778799999999993 2860.875222238084
245 | 0.0013036999999999997 2913.752131272936
246 | 0.0013300300000000003 2967.4343099956864
247 | 0.0013568999999999999 3021.9850096297364
248 | 0.0013843099999999997 3077.5079761474153
249 | 0.00141228 3134.051951462472
250 | 0.00144081 3191.3895306204504
251 | 0.0014699100000000003 3249.594403302892
252 | 0.0014996099999999997 3308.9019553865846
253 | 0.0015299 3369.2474255600673
254 | 0.0015608100000000006 3430.439093815204
255 | 0.0015923399999999998 3492.619743334588
256 | 0.0016245100000000009 3555.849807649178
257 | 0.0016573200000000008 3620.0540775990216
258 | 0.0016907999999999992 3685.302038628611
259 | 0.0017249599999999996 3751.558580460427
260 | 0.0017598099999999995 3818.919228208391
261 | 0.0017953599999999998 3887.442606852265
262 | 0.0018316200000000004 3956.9114163089203
263 | 0.001868630000000001 4027.3900421272956
264 | 0.001906380000000001 4098.903652756372
265 | 0.0019448899999999997 4171.653672842678
266 | 0.0019841799999999995 4245.3892179801815
267 | 0.00202426 4320.269389775798
268 | 0.0020651500000000004 4396.402741977055
269 | 0.0021068699999999994 4473.450039946499
270 | 0.002149430000000001 4551.696973307617
271 | 0.0021928500000000005 4631.205677071594
272 | 0.00223715 4711.696902945717
273 | 0.0022823399999999995 4793.421321883946
274 | 0.00232845 4876.23551297411
275 | 0.0023754900000000005 4960.18037029506
276 | 0.0024234800000000013 5045.351770609846
277 | 0.002472430000000001 5131.730180200838
278 | 0.0025223800000000007 5219.312617143693
279 | 0.002573340000000001 5307.910549069078
280 | 0.002625320000000001 5397.770910437187
281 | 0.002678359999999999 5488.8664911928445
282 | 0.00273246 5581.120728214495
283 | 0.002787660000000001 5674.5505904450665
284 | 0.002843980000000001 5769.10096686588
285 | 0.0029014300000000004 5864.84183843044
286 | 0.0029600400000000006 5961.781557137309
287 | 0.0030198399999999993 6059.984433627364
288 | 0.0030808399999999996 6159.237074757872
289 | 0.0031430800000000004 6259.662946257674
290 | 0.0032065800000000005 6361.285305396407
291 | 0.00327135 6464.0613230144445
292 | 0.0033374400000000014 6568.087623002513
293 | 0.0034048599999999983 6673.062806274962
294 | 0.003473640000000002 6779.198846065316
295 | 0.0035438100000000014 6886.474372576617
296 | 0.003615399999999999 6994.8174910619
297 | 0.0036884399999999994 7104.355441938233
298 | 0.0037629499999999993 7214.812828440077
299 | 0.00383897 7326.516838551593
300 | 0.00391652 7439.261467511375
301 | 0.003995640000000001 7552.945818788245
302 | 0.00407636 7667.637577420801
303 | 0.0041587 7783.303080452705
304 | 0.004242709999999999 7899.946727813925
305 | 0.00432842 8017.515528925326
306 | 0.004415859999999999 8135.976527379201
307 | 0.004505070000000002 8255.422314796508
308 | 0.004596079999999999 8375.646871721927
309 | 0.004688919999999999 8496.709522709574
310 | 0.004783650000000001 8618.576782413364
311 | 0.004880280000000002 8741.185639848922
312 | 0.004978870000000002 8864.555486353272
313 | 0.005079450000000002 8988.470049710662
314 | 0.005182059999999998 9113.119117734674
315 | 0.0052867500000000015 9238.485151797415
316 | 0.005393550000000003 9364.256569338553
317 | 0.005502509999999999 9490.562694990982
318 | 0.005613659999999998 9617.365725634714
319 | 0.005727069999999999 9744.619020252496
320 | 0.005842759999999998 9872.139725838397
321 | 0.005960789999999997 9999.931116645026
322 | 0.006081210000000001 10127.818671489513
323 | 0.006204059999999997 10256.235319472271
324 | 0.00632939 10384.82959210546
325 | 0.006457250000000002 10513.182868267744
326 | 0.006587690000000001 10641.913330948646
327 | 0.006720770000000001 10769.88533612909
328 | 0.006856540000000004 10897.86715560778
329 | 0.006995049999999999 11025.827214294552
330 | 0.007136359999999998 11153.912805125528
331 | 0.007280529999999998 11281.5987014
332 | 0.007427600000000003 11408.104215406773
333 | 0.007577650000000001 11534.081275774482
334 | 0.00773073 11659.77700813656
335 | 0.007886899999999999 11784.36533132431
336 | 0.00804623 11908.391056402792
337 | 0.008208769999999999 12031.643279872136
338 | 0.008374600000000003 12153.629470010408
339 | 0.008543779999999999 12274.899787791706
340 | 0.008716379999999998 12394.48374035738
341 | 0.008892460000000001 12512.742353044263
342 | 0.009072099999999998 12629.34414413107
343 | 0.009255369999999999 12744.558431700576
344 | 0.009442339999999999 12858.235574155218
345 | 0.009633080000000004 12970.115352130219
346 | 0.009827680000000004 13079.678504249352
347 | 0.010026200000000002 13187.662560491284
348 | 0.010228799999999998 13293.003769189016
349 | 0.010435400000000001 13396.069712581662
350 | 0.010646200000000001 13496.772774174815
351 | 0.0108613 13594.720951530755
352 | 0.011080699999999999 13689.404471505937
353 | 0.011304499999999999 13781.805066603305
354 | 0.011532899999999999 13871.35112437392
355 | 0.011765899999999998 13957.079704061769
356 | 0.012003599999999998 14039.717438093954
357 | 0.012246 14118.316353315273
358 | 0.012493399999999997 14193.776253637965
359 | 0.012745800000000002 14265.33174967073
360 | 0.0130033 14333.300401083565
361 | 0.013266000000000002 14396.923473069337
362 | 0.013533999999999997 14455.681650868482
363 | 0.013807399999999997 14510.883421781558
364 | 0.0140863 14560.91811146726
365 | 0.0143709 14606.019087346987
366 | 0.014661199999999997 14646.058021181103
367 | 0.0149574 14681.14041643377
368 | 0.0152595 14710.79097094903
369 | 0.015567799999999998 14734.773902500412
370 | 0.015882300000000002 14753.941134854056
371 | 0.01620310000000001 14767.244513101996
372 | 0.0165304 14774.257842580197
373 | 0.0168644 14775.615411048828
374 | 0.017205100000000004 14770.207372740411
375 | 0.017552599999999998 14758.90955078605
376 | 0.017907200000000005 14741.19954983858
377 | 0.018269000000000004 14716.834673270452
378 | 0.018638 14686.128778066482
379 | 0.019014500000000004 14648.849728875999
380 | 0.019398599999999995 14604.757396595267
381 | 0.0197905 14553.429816071757
382 | 0.020190300000000005 14495.324605566677
383 | 0.020598200000000007 14429.833322190814
384 | 0.021014300000000007 14358.22424506562
385 | 0.021438800000000004 14279.054591227221
386 | 0.0218719 14192.779881091974
387 | 0.02231380000000001 14099.740687720558
388 | 0.022764500000000003 13999.255113743102
389 | 0.023224400000000006 13892.592303436499
390 | 0.023693600000000006 13778.903976530493
391 | 0.0241722 13658.503404015586
392 | 0.024660500000000002 13531.783534056614
393 | 0.0251587 13398.483249654115
394 | 0.025666900000000003 13259.031885946353
395 | 0.0261854 13113.61588717818
396 | 0.026714399999999996 12962.322808498697
397 | 0.027254099999999996 12805.369668884861
398 | 0.027804699999999998 12643.294784154492
399 | 0.028366299999999997 12476.31282501244
400 | 0.028939399999999997 12304.747467237696
401 | 0.029523999999999998 12129.207765777723
402 | 0.030120400000000006 11949.550986112265
403 | 0.030728899999999993 11766.092301081575
404 | 0.0313497 11580.394560904784
405 | 0.031983000000000004 11392.303207553745
406 | 0.0326291 11201.802063604846
407 | 0.03328819999999999 11009.95906091753
408 | 0.03396070000000001 10816.807719529757
409 | 0.03464669999999999 10623.816528789093
410 | 0.0353466 10430.725061896632
411 | 0.0360607 10238.177241077798
412 | 0.03678920000000001 10046.411525069625
413 | 0.0375323 9855.492054107099
414 | 0.03829060000000001 9665.829936917027
415 | 0.039064100000000004 9477.911702575208
416 | 0.0398532 9293.084441269755
417 | 0.04065830000000001 9112.1190616835
418 | 0.0414797 8935.291858555767
419 | 0.04231759999999999 8763.29986093639
420 | 0.04317250000000001 8596.56992573784
421 | 0.04404460000000001 8435.328880770381
422 | 0.0449344 8279.866578523244
423 | 0.04584209999999998 8130.358083961874
424 | 0.046768199999999996 7987.100741724236
425 | 0.047712999999999985 7849.844556302064
426 | 0.04867680000000001 7718.405491965493
427 | 0.049660199999999995 7592.718247438263
428 | 0.05066339999999999 7472.477562800978
429 | 0.05168690000000001 7357.324797690886
430 | 0.052731 7246.82325969977
431 | 0.05379620000000001 7140.633008941601
432 | 0.054883 7038.228131637749
433 | 0.0559917 6939.1034184227365
434 | 0.0571228 6842.865638075842
435 | 0.05827679999999999 6750.567197264996
436 | 0.05945400000000001 6663.6836647881555
437 | 0.06065509999999999 6579.994389935454
438 | 0.06188040000000001 6494.730714523873
439 | 0.0631305 6405.84923082372
440 | 0.06440580000000001 6314.601777875557
441 | 0.06570689999999998 6221.419083048036
442 | 0.06703419999999999 6125.07493944305
443 | 0.06838839999999999 6024.275189380017
444 | 0.0697699 5918.292710275557
445 | 0.0711794 5806.5840109904775
446 | 0.07261729999999998 5688.75529765139
447 | 0.07408429999999999 5564.446786281905
448 | 0.07558090000000002 5433.664820972526
449 | 0.07710769999999997 5296.725821969577
450 | 0.0786654 5154.108802312566
451 | 0.0802545 5006.4783116580675
452 | 0.08187580000000001 4854.685647529152
453 | 0.08352980000000002 4699.897134000777
454 | 0.08521720000000002 4543.39256989995
455 | 0.08693869999999998 4386.423705239991
456 | 0.08869499999999997 4230.450967755254
457 | 0.09048669999999999 4076.742535486199
458 | 0.09231470000000001 3926.8446223949863
459 | 0.0941796 3782.1615272740464
460 | 0.09608219999999999 3643.9626976700797
461 | 0.09802310000000003 3513.5398245033616
462 | 0.10000300000000001 3391.909407048611
463 | 0.10202300000000002 3279.9843066384387
464 | 0.104085 3178.0941176411957
465 | 0.106187 3086.2381089303353
466 | 0.108332 3004.409810337871
467 | 0.110521 2931.725917637966
468 | 0.112753 2867.179580523964
469 | 0.11503100000000001 2809.279600638597
470 | 0.117355 2756.6923413125646
471 | 0.119726 2707.79965857389
472 | 0.122144 2660.5493951940025
473 | 0.124612 2612.9911161538853
474 | 0.127129 2563.13277105324
475 | 0.12969700000000003 2509.1191935323923
476 | 0.132317 2449.315593394268
477 | 0.13499 2382.7720528668638
478 | 0.13771700000000003 2309.3102310275494
479 | 0.140499 2229.684940579729
480 | 0.143338 2145.2346701022575
481 | 0.146233 2057.8306257141976
482 | 0.149187 1969.7784170222644
483 | 0.152201 1882.9363837102896
484 | 0.155276 1799.1023362331882
485 | 0.158413 1720.2127977937084
486 | 0.161613 1647.941817288561
487 | 0.16487799999999997 1583.3549448584693
488 | 0.16820800000000002 1527.2956855238112
489 | 0.171606 1479.6330483797685
490 | 0.175073 1439.2120212913107
491 | 0.17861000000000002 1404.411414224399
492 | 0.18221799999999996 1373.0165871445993
493 | 0.18589899999999998 1342.8410161301138
494 | 0.189654 1311.750702526029
495 | 0.193486 1278.1907513821836
496 | 0.19739400000000001 1240.985440409946
497 | 0.201382 1199.5213767756775
498 | 0.20545 1153.891828917784
499 | 0.209601 1105.3875537610445
500 | 0.21383499999999997 1055.9500756174489
501 | 0.21815399999999996 1007.2905099524382
502 | 0.222562 961.5194350341593
503 | 0.22705799999999998 920.1051859387577
504 | 0.23164399999999996 883.8037145701833
505 | 0.236324 852.7395166956544
506 | 0.24109799999999998 826.2093770052442
507 | 0.245968 802.7132354373484
508 | 0.25093699999999997 780.5109131067946
509 | 0.256007 757.9545434695805
510 | 0.26117799999999997 733.8389419006733
511 | 0.266454 707.6204122676359
512 | 0.27183700000000005 679.4392265899262
513 | 0.277329 650.2000748068446
514 | 0.28293100000000004 621.1452112163378
515 | 0.288647 593.6776372487146
516 | 0.294478 568.8192442359066
517 | 0.300426 546.8475901243755
518 | 0.30649599999999994 527.4192453190494
519 | 0.312687 509.7722263021664
520 | 0.319004 492.9279900652716
521 | 0.325448 475.85646852357485
522 | 0.332023 457.9945744619679
523 | 0.33873 439.4214551030398
524 | 0.345573 420.66299380375204
525 | 0.352554 402.5145725379595
526 | 0.359676 385.57456670992303
527 | 0.366942 370.1467975498309
528 | 0.374355 356.1298002287478
529 | 0.381917 342.98348163105425
530 | 0.389632 330.1918687447854
531 | 0.397503 317.32735400406955
532 | 0.405533 304.339395222529
533 | 0.413726 291.50531785656466
534 | 0.42208299999999993 279.1642946371979
535 | 0.43061 267.6124631818363
536 | 0.439309 256.87109391810606
537 | 0.44818399999999997 246.72952812305255
538 | 0.457238 236.937297695949
539 | 0.4664749999999999 227.30067391773943
540 | 0.475898 217.81501074713773
541 | 0.48551200000000005 208.6257574300273
542 | 0.495319 199.87026248232635
543 | 0.505326 191.58730606250882
544 | 0.515534 183.72339205833865
545 | 0.525949 176.14623813995115
546 | 0.536573 168.7883838031959
547 | 0.547413 161.65116795949217
548 | 0.558471 154.78459955561593
549 | 0.569753 148.24420864845672
550 | 0.581263 142.0075668027241
551 | 0.593005 136.01000582689693
552 | 0.604985 130.234305982773
553 | 0.617206 124.669664855304
554 | 0.629675 119.32785707341942
555 | 0.642395 114.21512894412042
556 | 0.655373 109.31812625072814
557 | 0.668612 104.62311671609422
558 | 0.682119 100.11915406701117
559 | 0.695898 95.79664602994968
560 | 0.709956 91.64646660334851
561 | 0.724298 87.66477261920667
562 | 0.73893 83.84650567457577
563 | 0.753857 80.18476325537547
564 | 0.769087 76.67515138239084
565 | 0.784623 73.31144257717803
566 | 0.800474 70.08798466266781
567 | 0.816644 67.00193014419075
568 | 0.833142 64.04534725210563
569 | 0.849972 61.213595031271645
570 | 0.867143 58.50175859564653
571 | 0.88466 55.906859141526326
572 | 0.902531 53.421050914526155
573 | 0.920763 51.04187405187435
574 | 0.939364 48.76420423994039
575 | 0.95834 46.58369795360021
576 | 0.9777 44.496620913265
577 | 0.997452 42.499228988166635
578 | 1.0176 40.58850934020217
579 | 1.03816 38.75975608262114
580 | 1.05913 37.00903564592791
581 | 1.08053 35.335446903382696
582 | 1.10235 33.737602485491664
583 | 1.12462 32.205086450995346
584 | 1.14734 30.739145189935368
585 | 1.17052 29.34102122583739
586 | 1.19417 28.00247545566984
587 | 1.21829 26.723222040696957
588 | 1.2429 25.50334661036773
589 | 1.26801 24.333060274876388
590 | 1.29362 23.21492986410589
591 | 1.31976 22.14644959545491
592 | 1.34642 21.127549459396004
593 | 1.37362 20.152509216799128
594 | 1.40137 19.220808305720258
595 | 1.42968 18.331095007687644
596 | 1.45856 17.4811199132954
597 | 1.48802 16.670996980456305
598 | 1.51808 15.894768911640176
599 | 1.54875 15.154696346724752
600 | 1.58004 14.448540437318153
601 | 1.61196 13.773412647084085
602 | 1.64452 13.129916547903324
603 | 1.67774 12.514763577845356
604 | 1.71163 11.928533774561163
605 | 1.74621 11.368611402580406
606 | 1.7814899999999998 10.833917013752188
607 | 1.81747 10.323248231207176
608 | 1.85419 9.836383641520902
609 | 1.89165 9.372381134483199
610 | 1.92986 8.92927786410786
611 | 1.96885 8.50642806156937
612 | 2.00862 8.102902039390994
613 | 2.0492 7.71845741696807
614 | 2.09059 7.352336938816544
615 | 2.13283 7.003471453028634
616 | 2.17591 6.671259723075481
617 | 2.21987 6.354738043225688
618 | 2.26471 6.0532866941127255
619 | 2.31046 5.766109535256789
620 | 2.35714 5.492523698730713
621 | 2.40475 5.231988074919724
622 | 2.45333 4.9837695637798305
623 | 2.50289 4.747333598581884
624 | 2.55346 4.5220764226648
625 | 2.60504 4.307554730908794
626 | 2.65767 4.103179358874437
627 | 2.71135 3.9085473025906943
628 | 2.76613 3.72309594827732
629 | 2.82201 3.546464507963693
630 | 2.87901 3.378238097704981
631 | 2.93718 3.2179417303748723
632 | 2.9965100000000002 3.0652894537647444
633 | 3.05704 2.9198750655925996
634 | 3.1188 2.781343210182467
635 | 3.1818000000000004 2.649399522345074
636 | 3.2460799999999996 2.5237011172955857
637 | 3.3116600000000003 2.4039639098351118
638 | 3.3785499999999997 2.289932188988426
639 | 3.44681 2.1812804292550263
640 | 3.51644 2.0777970300943265
641 | 3.58747 1.9792319172859172
642 | 3.6599400000000006 1.8853359138223114
643 | 3.73388 1.7958873319443154
644 | 3.80931 1.7106867009036544
645 | 3.88626 1.6295320368308774
646 | 3.96477 1.5522220348750797
647 | 4.04486 1.4785852352220188
648 | 4.12657 1.4084399539466268
649 | 4.2099400000000005 1.3416151567404193
650 | 4.29498 1.277971297758818
651 | 4.38175 1.2173383489875065
652 | 4.47027 1.1595839928508191
653 | 4.56057 1.1045745576588453
654 | 4.652700000000001 1.052171453356551
655 | 4.74669 1.0022550450542722
656 | 4.84258 0.9547061184547957
657 | 4.940410000000001 0.9094117154589788
658 | 5.04021 0.8662688869613091
659 | 5.14203 0.8251712239586431
660 | 5.24591 0.7860222014074093
661 | 5.3518799999999995 0.7487334692944126
662 | 5.460000000000001 0.7132107378912711
663 | 5.57029 0.6793775671138254
664 | 5.68282 0.6471459971563073
665 | 5.79762 0.6164444384516222
666 | 5.91474 0.5871991902627686
667 | 6.03423 0.559340486012434
668 | 6.15613 0.5328043222367932
669 | 6.280490000000001 0.5075275852690824
670 | 6.40737 0.48344856958248794
671 | 6.536800000000001 0.4605142232168925
672 | 6.668849999999999 0.4386669829114258
673 | 6.803569999999999 0.41785583027118234
674 | 6.941019999999999 0.39803081592766704
675 | 7.081230000000001 0.37914858469095736
676 | 7.2242799999999985 0.3611611707567656
677 | 7.370230000000002 0.34402595081681553
678 | 7.519110000000001 0.3277056763933994
679 | 7.671010000000001 0.31215837504545724
680 | 7.825970000000002 0.29734948230997227
681 | 7.98407 0.2832422923276709
682 | 8.14536 0.26980470803895584
683 | 8.30991 0.25700450172263645
684 | 8.477769999999998 0.24481256464537438
685 | 8.649040000000001 0.23319773601722946
686 | 8.82376 0.22213457269753642
687 | 9.00201 0.2115962316748334
688 | 9.18386 0.2015578881805955
689 | 9.36939 0.19199545334238027
690 | 9.55866 0.18288705885530873
691 | 9.75176 0.1742104872036581
692 | 9.94876 0.16594558901369244
693 | 10.1497 0.15807429659717476
694 | 10.354799999999997 0.15057277550162987
695 | 10.563999999999998 0.14342871424063308
696 | 10.777399999999998 0.13662442604145508
697 | 10.9951 0.13014324609071204
698 | 11.217200000000002 0.1239694519419859
699 | 11.443800000000001 0.11808819196648791
700 | 11.674999999999999 0.1124854209441503
701 | 11.910799999999997 0.10715002818194276
702 | 12.1515 0.10206489534428417
703 | 12.396899999999999 0.09722422246463948
704 | 12.647400000000001 0.09261056512684562
705 | 12.902800000000001 0.08821853114070045
706 | 13.163500000000003 0.08403257780163804
707 | 13.429400000000001 0.08004622380424539
708 | 13.700699999999996 0.07624858473019344
709 | 13.977500000000001 0.07263087472186885
710 | 14.259899999999998 0.06918472056877754
711 | 14.547900000000004 0.06590324017815107
712 | 14.841800000000005 0.06277654535392332
713 | 15.141600000000006 0.05979855184365298
714 | 15.447499999999996 0.05696143293690915
715 | 15.759600000000004 0.05425875253451161
716 | 16.077900000000003 0.0516851329926964
717 | 16.402700000000003 0.04923306669031109
718 | 16.734100000000005 0.04689707002518009
719 | 17.072099999999995 0.044672519010873254
720 | 17.417 0.04255305569836615
721 | 17.7689 0.040533970994392
722 | 18.1278 0.038611258118647615
723 | 18.494 0.03677950255070019
724 | 18.8676 0.03503463647141489
725 | 19.2488 0.03337232636153153
726 | 19.6376 0.03178928916993484
727 | 20.0344 0.03028080526629344
728 | 20.439099999999996 0.028844306801933395
729 | 20.851999999999997 0.027475874821010993
730 | 21.273199999999996 0.026172487159881838
731 | 21.702999999999996 0.024930672244048137
732 | 22.1414 0.023747996058454787
733 | 22.5887 0.02262131648345277
734 | 23.045000000000005 0.02154817271310459
735 | 23.510499999999997 0.020525975312930763
736 | 23.985500000000002 0.019552076363533743
737 | 24.46999999999999 0.018624565142013147
738 | 24.964300000000005 0.017741030317552007
739 | 25.468700000000002 0.016899224225008672
740 | 25.983099999999997 0.016097649618176533
741 | 26.508 0.015333940477446815
742 | 27.043500000000005 0.014606468445481306
743 | 27.589900000000007 0.01391340845847948
744 | 28.147199999999998 0.013253393254333891
745 | 28.7158 0.012624641626008926
746 | 29.2959 0.012025704770144837
747 | 29.887700000000002 0.011455200163422965
748 | 30.49149999999999 0.01091172124953279
749 | 31.107500000000005 0.010394025565336914
750 | 31.73590000000001 0.009900925285378786
751 | 32.377 0.009431213981953762
752 | 33.0311 0.008983753886112765
753 | 33.6983 0.008557594032169704
754 | 34.379099999999994 0.008151578855093126
755 | 35.0736 0.00776485616241098
756 | 35.78210000000001 0.007396495099474322
757 | 36.50500000000001 0.00704556761905118
758 | 37.242399999999996 0.006711335751731913
759 | 37.994699999999995 0.006392957519925751
760 | 38.7623 0.006089643290398608
761 | 39.54529999999999 0.005800758207884869
762 | 40.3442 0.005525549724739767
763 | 41.15919999999999 0.00526341037950694
764 | 41.99069999999999 0.0050136968098101024
765 | 42.839000000000006 0.004775829934688125
766 | 43.70440000000001 0.004549257744978961
767 | 44.58720000000001 0.0043334538628621785
768 | 45.488 0.004127850050199015
769 | 46.406899999999986 0.003932021633764735
770 | 47.34439999999999 0.0037454762863258434
771 | 48.300799999999995 0.0035677881599772156
772 | 49.27649999999999 0.003398533065385178
773 | 50.272 0.003237293251958739
774 | 51.28759999999999 0.003083704959510995
775 | 52.3236 0.002937419419126098
776 | 53.3806 0.002798064109428232
777 | 54.45900000000002 0.002665314383320352
778 | 55.5591 0.002538872301833108
779 | 56.68150000000001 0.002418420585544997
780 | 57.826499999999996 0.0023036906846688574
781 | 58.9948 0.002194388175653033
782 | 60.1865 0.002090288909944992
783 | 61.402399999999986 0.00199111794211153
784 | 62.642699999999984 0.0018966640653819214
785 | 63.9082 0.0018066807889673088
786 | 65.1992 0.0017209707815457737
787 | 66.51640000000002 0.001639319678445138
788 | 67.86010000000002 0.001561548702323146
789 | 69.231 0.001487464342314995
790 | 70.62950000000001 0.001416899375391032
791 | 72.05630000000001 0.0013496797357287742
792 | 73.5119 0.0012856500675342624
793 | 74.99700000000001 0.0012246542134077439
794 | 76.51199999999999 0.001166556009963842
795 | 78.05769999999998 0.0011112107006731565
796 | 79.63449999999999 0.001058495238014725
797 | 81.24329999999999 0.0010082761171849597
798 | 82.88449999999999 0.0009604424434143896
799 | 84.55889999999998 0.0009148768387264602
800 | 86.267 0.000871476054132183
801 | 88.00979999999998 0.0008301296598680496
802 | 89.78780000000002 0.0007907450948592805
803 | 91.60159999999998 0.0007532314777255724
804 | 93.45199999999997 0.0007174982941452825
805 | 95.33989999999999 0.0006834581799868718
806 | 97.26590000000002 0.0006510336579769113
807 | 99.23080000000003 0.0006201475354447888
808 | 101.23499999999999 0.000590732283366089
809 | 103.28000000000004 0.0005627080321218294
810 | 105.36699999999999 0.0005360047178320165
811 | 107.49499999999999 0.0005105821427084335
812 | 109.66699999999997 0.0004863543313534391
813 | 111.88200000000002 0.00046328508354151037
814 | 114.14300000000001 0.00044129821711450884
815 | 116.44800000000004 0.00042036966080575763
816 | 118.801 0.0004004217396638659
817 | 121.20100000000005 0.0003814245868281072
818 | 123.64900000000006 0.0003633321726022111
819 | 126.14699999999995 0.00034609424534747896
820 | 128.69500000000002 0.00032967705179126383
821 | 131.29499999999996 0.00031403551498964094
822 | 133.94799999999995 0.00029913352587338573
823 | 136.65400000000002 0.00028494176260801334
824 | 139.41400000000004 0.00027142645010457754
825 | 142.23 0.0002585510615127064
826 | 145.10399999999993 0.0002462818099058453
827 | 148.03500000000005 0.00023459891842289693
828 | 151.02599999999998 0.00022346736752201768
829 | 154.07600000000005 0.00021286880932203835
830 | 157.18899999999996 0.00020276851361448474
831 | 160.36399999999998 0.00019315008401630656
832 | 163.604 0.00018398553356881848
833 | 166.90899999999996 0.0001752569976058494
834 | 170.281 0.00016694199598841887
835 | 173.72099999999998 0.00015902177064538957
836 | 177.23 0.00015147833157566382
837 | 180.81 0.0001442924913210324
838 | 184.46300000000008 0.0001374462932224046
839 | 188.18900000000005 0.00013092628289473472
840 | 191.99099999999993 0.00012471439605513747
841 | 195.86899999999991 0.00011879843351489864
842 | 199.826 0.00011316218063111494
843 | 203.86299999999997 0.00010779325661431751
844 | 207.9809999999999 0.00010267972779383332
845 | 212.1829999999999 0.00009780786079171187
846 | 216.46899999999997 0.0000931680877211022
847 | 220.842 0.0000887479996714091
848 | 225.3039999999999 0.00008453700906703081
849 | 229.8550000000001 0.00008052680629041941
850 | 234.49800000000002 0.0000767067787357857
851 | 239.23500000000004 0.00007306780752820594
852 | 244.06799999999998 0.00006960125451776559
853 | 248.99899999999994 0.00006629892934571237
854 | 254.0289999999999 0.00006315366376650028
855 | 259.161 0.0000601573919421834
856 | 264.3959999999999 0.00005730363321573624
857 | 269.7370000000001 0.00005458512674200887
858 | 275.186 0.000051995537790847424
859 | 280.7450000000001 0.0000495288349190438
860 | 286.41699999999986 0.0000471788725374954
861 | 292.2030000000001 0.00004494062916086433
862 | 298.105 0.00004280888051735315
863 | 304.12800000000004 0.00004077766772169871
864 | 310.27199999999993 0.000038843042776144945
865 | 316.5399999999999 0.000037000237151057464
866 | 322.9340000000001 0.00003524502402898305
867 | 329.45799999999986 0.00003357286565075054
868 | 336.11300000000006 0.000031980225735178734
869 | 342.90299999999985 0.000030463014891427294
870 | 349.83 0.000029017817757242544
871 | 356.8970000000001 0.000027641169604949627
872 | 364.10700000000014 0.000026329789879461478
873 | 371.4630000000001 0.000025080569443055325
874 | 378.96599999999995 0.00002389086543184673
875 | 386.6220000000002 0.000022757387872662292
876 | 394.43199999999996 0.000021677776359880107
877 | 402.40099999999995 0.000020649227873195728
878 | 410.53014375108813 0.000019669581185225265
879 | 418.8235092067095 0.000018736411180990628
880 | 427.28441390793176 0.00001784751290011416
881 | 435.916242415458 0.00001700078599059117
882 | 444.7224476635301 0.000016194229745929046
883 | 453.706552341184 0.000015425938377735777
884 | 462.87215030140806 0.000014694096512587795
885 | 472.2229079987683 0.00001399697490253666
886 | 481.7625659560772 0.00001333292633911008
887 | 491.49494026068896 0.000012700381761207518
888 | 501.42392409102644 0.000012097846547555367
889 | 511.5534892739427 0.000011523896985147164
890 | 521.8876878735451 0.000010977176905183927
891 |
--------------------------------------------------------------------------------
/notebooks/pkl_cb_m04_z05.dat:
--------------------------------------------------------------------------------
1 | #k, pkl
2 | 0.00001 35.500613815779495
3 | 0.000010104300000000008 35.857283700871854
4 | 0.000010308399999999996 36.55484709506928
5 | 0.000010516599999999992 37.265903371090744
6 | 0.000010729100000000004 37.991114902130256
7 | 0.000010945800000000003 38.730119591327956
8 | 0.000011166999999999997 39.48391918877948
9 | 0.000011392499999999993 40.25181067559011
10 | 0.000011622699999999991 41.03513420334732
11 | 0.000011857499999999998 41.83352665997935
12 | 0.000012097000000000006 42.64730550107865
13 | 0.000012341400000000009 43.47712685952146
14 | 0.000012590699999999998 44.322966824001135
15 | 0.000012845100000000007 45.18547958344109
16 | 0.000013104499999999996 46.0643016201183
17 | 0.000013369299999999998 46.96076278505737
18 | 0.000013639300000000002 47.87416022482094
19 | 0.000013914900000000006 48.805820906785854
20 | 0.000014195999999999994 49.75537975316704
21 | 0.000014482800000000001 50.72348527229951
22 | 0.000014775299999999989 51.71010993925288
23 | 0.000015073799999999991 52.7162373597987
24 | 0.000015378300000000005 53.74183842944412
25 | 0.00001568900000000001 54.78755726473339
26 | 0.00001600590000000001 55.853363948901816
27 | 0.0000163293 56.94023677010894
28 | 0.0000166591 58.04780858103284
29 | 0.0000169957 59.177390889425745
30 | 0.00001733900000000001 60.3286155476131
31 | 0.000017689299999999997 61.50245565177913
32 | 0.000018046599999999987 62.69887754846904
33 | 0.00001841119999999999 63.91885142016476
34 | 0.000018783099999999986 65.16234218605605
35 | 0.0000191626 66.43031715048072
36 | 0.00001954970000000002 67.72273983916601
37 | 0.000019944600000000006 69.04024120718199
38 | 0.000020347500000000018 70.38345068048798
39 | 0.00002075859999999999 71.75299616603454
40 | 0.000021177900000000016 73.14883850801294
41 | 0.00002160570000000001 74.57193659903656
42 | 0.0000220422 76.02291457885578
43 | 0.00002248750000000002 77.5020630608107
44 | 0.000022941800000000015 79.01000396654567
45 | 0.000023405200000000014 80.5470261970158
46 | 0.000023878 82.1140808167195
47 | 0.000024360399999999995 83.71178540657228
48 | 0.000024852500000000023 85.34042528663616
49 | 0.000025354600000000016 87.00094652076612
50 | 0.0000258668 88.69363209781798
51 | 0.000026389300000000022 90.41909469463637
52 | 0.0000269224 92.17827548006552
53 | 0.000027466299999999998 93.97178366276601
54 | 0.000028021099999999988 95.79989770961112
55 | 0.000028587199999999993 97.66388315335814
56 | 0.00002916469999999998 99.56401555113744
57 | 0.000029753900000000017 101.50122744129382
58 | 0.000030354900000000027 103.47579224529447
59 | 0.0000309681 105.48896761701383
60 | 0.000031593699999999975 107.54135212164701
61 | 0.000032232 109.63387077142887
62 | 0.000032883100000000024 111.76679143813327
63 | 0.000033547400000000024 113.94136340492078
64 | 0.000034225100000000005 116.15817884421956
65 | 0.00003491649999999998 118.41815547671347
66 | 0.00003562179999999997 120.7218823683701
67 | 0.00003634139999999998 123.07059995950513
68 | 0.00003707560000000003 125.46521959112313
69 | 0.00003782459999999998 127.90632471478393
70 | 0.00003858869999999999 130.39482321703167
71 | 0.00003936820000000002 132.93162092490266
72 | 0.00004016350000000001 135.51794670633245
73 | 0.00004097490000000001 138.154701609648
74 | 0.00004180259999999999 140.8424600702675
75 | 0.00004264709999999999 143.5827685977318
76 | 0.000043508600000000006 146.37619743514898
77 | 0.00004438750000000004 149.223963618283
78 | 0.0000452842 152.1272813058266
79 | 0.000046198999999999996 155.08703837686008
80 | 0.00004713230000000003 158.10444400838344
81 | 0.00004808440000000005 161.1803816121917
82 | 0.00004905579999999997 164.31637818198152
83 | 0.00005004679999999996 167.51331203853132
84 | 0.000051057800000000004 170.77238194121944
85 | 0.00005208920000000003 174.09478392353446
86 | 0.00005314149999999997 177.48203308896183
87 | 0.000054215100000000016 180.9353193833053
88 | 0.00005531030000000002 184.4555087949457
89 | 0.000056427599999999975 188.0441077565415
90 | 0.000057567500000000035 191.70261915486546
91 | 0.00005873049999999996 195.43254235719203
92 | 0.000059916900000000036 199.234732508889
93 | 0.00006112729999999997 203.1110035538706
94 | 0.00006236220000000001 207.06284516346992
95 | 0.00006362199999999995 211.09142393476583
96 | 0.00006490720000000003 215.19822344504388
97 | 0.00006621839999999994 219.38504311150604
98 | 0.00006755610000000004 223.65335912895418
99 | 0.00006892079999999996 228.00464439561298
100 | 0.00007031310000000001 232.4406870393466
101 | 0.00007173360000000007 236.963271020294
102 | 0.0000731827 241.57354010074135
103 | 0.0000746611 246.27358919569159
104 | 0.00007616929999999998 251.06487308632404
105 | 0.00007770800000000002 255.94947811377256
106 | 0.0000792778 260.92916858469147
107 | 0.00008087930000000004 266.00570483685016
108 | 0.00008251320000000004 271.18115991334156
109 | 0.00008418010000000007 276.45728562513534
110 | 0.00008588069999999998 281.83614609813304
111 | 0.00008761559999999998 287.31948476292604
112 | 0.00008938549999999993 292.9093569772846
113 | 0.00009119120000000006 298.60812890996505
114 | 0.0000930334000000001 304.4178459204741
115 | 0.00009491280000000002 310.3405487758698
116 | 0.00009683019999999998 316.3785884843605
117 | 0.00009878629999999994 322.53399606043996
118 | 0.00010078199999999996 328.80942671684096
119 | 0.00010281800000000003 335.20690119640625
120 | 0.00010489500000000006 341.7242620146196
121 | 0.00010701400000000006 348.3573710537336
122 | 0.00010917600000000003 355.11678726794634
123 | 0.00011138100000000005 362.0155788793555
124 | 0.00011363099999999998 369.0480000942441
125 | 0.00011592700000000004 376.21760487121526
126 | 0.00011826900000000003 383.5362477397427
127 | 0.00012065800000000001 390.9832172609017
128 | 0.000123095 398.5690682965507
129 | 0.00012558200000000003 406.3119260353673
130 | 0.00012811899999999997 414.2179047886987
131 | 0.00013070699999999998 422.26142412586194
132 | 0.00013334700000000002 430.4519464645404
133 | 0.00013604100000000008 438.8036933260648
134 | 0.00013878999999999996 447.34445632527274
135 | 0.00014159300000000005 456.03640197502995
136 | 0.00014445399999999994 464.882977859796
137 | 0.00014737200000000002 473.9052950164337
138 | 0.00015034899999999998 483.1048018023378
139 | 0.00015338600000000004 492.47586479928174
140 | 0.00015648499999999996 502.0475895060206
141 | 0.00015964600000000008 511.7884791965993
142 | 0.0001628710000000001 521.7279316065817
143 | 0.00016616100000000006 531.8656410088367
144 | 0.000169518 542.1927158023717
145 | 0.00017294200000000004 552.7089703797056
146 | 0.00017643599999999995 563.4389334750198
147 | 0.00017999999999999998 574.385011240646
148 | 0.000183637 585.5356898004067
149 | 0.00018734600000000007 596.8945268823215
150 | 0.00019113100000000006 608.4723283417331
151 | 0.00019499199999999992 620.2833235730486
152 | 0.00019893100000000012 632.3099191370856
153 | 0.00020295000000000005 644.5828020943386
154 | 0.00020705 657.1118267477272
155 | 0.00021123200000000005 669.8469489072307
156 | 0.00021549899999999996 682.8296344286143
157 | 0.000219853 696.0883141306598
158 | 0.0002242939999999999 709.5970879405487
159 | 0.00022882499999999994 723.3477717277326
160 | 0.000233448 737.3724310610535
161 | 0.0002381639999999999 751.6746124085569
162 | 0.0002429749999999999 766.2619118190393
163 | 0.00024788300000000007 781.1170492274384
164 | 0.0002528910000000001 796.2607453711893
165 | 0.00025799999999999993 811.7013013430791
166 | 0.0002632119999999999 827.427937313919
167 | 0.00026852899999999994 843.4623705930486
168 | 0.0002739540000000001 859.8216289233933
169 | 0.00027948799999999994 876.4858562690619
170 | 0.000285134 893.465542529289
171 | 0.00029089400000000015 910.7714911601533
172 | 0.00029676999999999997 928.4123793834027
173 | 0.00030276600000000005 946.3920777157427
174 | 0.0003088820000000001 964.7150024307068
175 | 0.000315122 983.4048399242354
176 | 0.000321488 1002.4727599518599
177 | 0.0003279819999999999 1021.8888762148509
178 | 0.00033460800000000013 1041.6441608680423
179 | 0.0003413670000000001 1061.7946655341098
180 | 0.0003482629999999999 1082.3568316917037
181 | 0.0003552989999999999 1103.323806956799
182 | 0.000362476 1124.632972198168
183 | 0.00036979900000000014 1146.3094779997787
184 | 0.000377269 1168.5229277845633
185 | 0.0003848899999999999 1191.1390732136283
186 | 0.000392666 1214.1181691202814
187 | 0.000400598 1237.5763998375865
188 | 0.00040869100000000014 1261.46805423156
189 | 0.00041694700000000014 1285.8693785610853
190 | 0.00042537000000000006 1310.71556618437
191 | 0.0004339629999999999 1336.0083341750787
192 | 0.00044272899999999983 1361.8170070762358
193 | 0.00045167299999999993 1388.0616113153276
194 | 0.0004607969999999999 1414.7896035161452
195 | 0.0004701059999999998 1442.0888713345792
196 | 0.000479603 1469.8765830782747
197 | 0.0004892919999999998 1498.206328273125
198 | 0.0004991759999999998 1527.118496625261
199 | 0.0005092600000000001 1556.489436684449
200 | 0.0005195480000000001 1586.4678333799031
201 | 0.0005300429999999999 1617.0267360623013
202 | 0.0005407510000000002 1648.0856500257867
203 | 0.000551675 1679.8483468854897
204 | 0.000562819 1712.1339007473334
205 | 0.0005741889999999998 1745.0031391959556
206 | 0.000585788 1778.529443368123
207 | 0.000597622 1812.6552223781919
208 | 0.0006096950000000004 1847.4346081118051
209 | 0.0006220109999999998 1882.8529311568902
210 | 0.0006345770000000002 1918.98630063344
211 | 0.0006473959999999997 1955.7787310616893
212 | 0.0006604740000000002 1993.1677578960664
213 | 0.0006738170000000003 2031.3427858991877
214 | 0.0006874289999999997 2070.2064229576063
215 | 0.000701316 2109.7820643817363
216 | 0.0007154839999999998 2150.1118940830916
217 | 0.000729937 2191.17392832461
218 | 0.0007446829999999998 2232.9708765081336
219 | 0.0007597269999999998 2275.597361555105
220 | 0.0007750739999999997 2319.003617625842
221 | 0.000790732 2363.166193488311
222 | 0.0008067060000000001 2408.108762643137
223 | 0.000823002 2453.928551087227
224 | 0.0008396280000000004 2500.591453719409
225 | 0.0008565889999999996 2548.1018980220642
226 | 0.000873894 2596.4491951722894
227 | 0.0008915469999999997 2645.64914080255
228 | 0.0009095580000000004 2695.7360636823723
229 | 0.0009279319999999996 2746.796243698373
230 | 0.0009466780000000002 2798.743065351862
231 | 0.0009658020000000004 2851.5787417985784
232 | 0.000985312 2905.36394055942
233 | 0.00100522 2960.118890124154
234 | 0.0010255200000000003 3015.906526703266
235 | 0.0010462399999999997 3072.7412372915587
236 | 0.0010673799999999995 3130.4001480606157
237 | 0.0010889399999999996 3189.2219637063854
238 | 0.0011109399999999995 3249.0244130136202
239 | 0.0011333799999999994 3309.7994619675724
240 | 0.0011562700000000005 3371.7243242573463
241 | 0.0011796299999999997 3434.7174643936933
242 | 0.0012034600000000004 3498.9035234558264
243 | 0.0012277700000000004 3564.0700273903485
244 | 0.0012525799999999997 3630.206557286682
245 | 0.0012778799999999993 3697.635230447773
246 | 0.0013036999999999997 3766.3581145830685
247 | 0.0013300300000000003 3836.070331100139
248 | 0.0013568999999999999 3906.8909633581457
249 | 0.0013843099999999997 3979.0762676608315
250 | 0.00141228 4052.487287956081
251 | 0.00144081 4127.051345843869
252 | 0.0014699100000000003 4202.712145414907
253 | 0.0014996099999999997 4279.735289477717
254 | 0.0015299 4358.107515503834
255 | 0.0015608100000000006 4437.640792283274
256 | 0.0015923399999999998 4518.508309292173
257 | 0.0016245100000000009 4600.647929159261
258 | 0.0016573200000000008 4684.054343458446
259 | 0.0016907999999999992 4768.822193046537
260 | 0.0017249599999999996 4854.933261424947
261 | 0.0017598099999999995 4942.448779709764
262 | 0.0017953599999999998 5031.339973651302
263 | 0.0018316200000000004 5121.518921956498
264 | 0.001868630000000001 5213.0571053415515
265 | 0.001906380000000001 5305.94298532791
266 | 0.0019448899999999997 5400.300873273339
267 | 0.0019841799999999995 5495.9811122545025
268 | 0.00202426 5593.153462293548
269 | 0.0020651500000000004 5691.820922263913
270 | 0.0021068699999999994 5791.710676911516
271 | 0.002149430000000001 5893.089869595193
272 | 0.0021928500000000005 5996.004162036024
273 | 0.00223715 6100.285307590854
274 | 0.0022823399999999995 6205.976521716717
275 | 0.00232845 6313.06157051771
276 | 0.0023754900000000005 6421.65367992878
277 | 0.0024234800000000013 6531.677828494651
278 | 0.002472430000000001 6643.201215328492
279 | 0.0025223800000000007 6756.145198504973
280 | 0.002573340000000001 6870.416229549036
281 | 0.002625320000000001 6986.147322758458
282 | 0.002678359999999999 7103.359730755463
283 | 0.00273246 7222.048254955264
284 | 0.002787660000000001 7342.139655846771
285 | 0.002843980000000001 7463.493921864049
286 | 0.0029014300000000004 7586.3171240073525
287 | 0.0029600400000000006 7710.482684655665
288 | 0.0030198399999999993 7836.12001335716
289 | 0.0030808399999999996 7963.022648253062
290 | 0.0031430800000000004 8091.163989549996
291 | 0.0032065800000000005 8220.703631644217
292 | 0.00327135 8351.5918140913
293 | 0.0033374400000000014 8483.812711934555
294 | 0.0034048599999999983 8617.120484398825
295 | 0.003473640000000002 8751.685945644864
296 | 0.0035438100000000014 8887.501335306863
297 | 0.003615399999999999 9024.440145814335
298 | 0.0036884399999999994 9162.626379388828
299 | 0.0037629499999999993 9301.773706908914
300 | 0.00383897 9442.195885993353
301 | 0.00391652 9583.658080017523
302 | 0.003995640000000001 9725.998192956185
303 | 0.00407636 9869.337055029675
304 | 0.0041587 10013.568258552843
305 | 0.004242709999999999 10158.78595876235
306 | 0.00432842 10304.796669788107
307 | 0.004415859999999999 10451.507493690866
308 | 0.004505070000000002 10599.6663648265
309 | 0.004596079999999999 10747.583572129688
310 | 0.004688919999999999 10896.344849732548
311 | 0.004783650000000001 11046.461206817125
312 | 0.004880280000000002 11196.40039640099
313 | 0.004978870000000002 11346.810136660335
314 | 0.005079450000000002 11497.761526849348
315 | 0.005182059999999998 11649.095489030093
316 | 0.0052867500000000015 11801.232463220033
317 | 0.005393550000000003 11953.204110213663
318 | 0.005502509999999999 12105.217823364763
319 | 0.005613659999999998 12257.215079086758
320 | 0.005727069999999999 12409.242700441913
321 | 0.005842759999999998 12561.24092756392
322 | 0.005960789999999997 12713.242777577729
323 | 0.006081210000000001 12865.229854557001
324 | 0.006204059999999997 13017.261084809137
325 | 0.00632939 13168.88579852702
326 | 0.006457250000000002 13319.434926879585
327 | 0.006587690000000001 13469.46666169862
328 | 0.006720770000000001 13619.13622564363
329 | 0.006856540000000004 13768.15350441147
330 | 0.006995049999999999 13916.356353717534
331 | 0.007136359999999998 14063.366352516257
332 | 0.007280529999999998 14209.625693935712
333 | 0.007427600000000003 14354.537204535975
334 | 0.007577650000000001 14498.829290341291
335 | 0.00773073 14641.446918734553
336 | 0.007886899999999999 14782.768904284558
337 | 0.00804623 14921.923278864304
338 | 0.008208769999999999 15059.5230478808
339 | 0.008374600000000003 15195.826740442762
340 | 0.008543779999999999 15330.012974786387
341 | 0.008716379999999998 15462.220372646956
342 | 0.008892460000000001 15592.519653670453
343 | 0.009072099999999998 15720.423990020512
344 | 0.009255369999999999 15845.180510627224
345 | 0.009442339999999999 15967.313111600572
346 | 0.009633080000000004 16087.878834075937
347 | 0.009827680000000004 16207.678674517496
348 | 0.010026200000000002 16325.126265616504
349 | 0.010228799999999998 16436.89134576893
350 | 0.010435400000000001 16543.30655138858
351 | 0.010646200000000001 16647.041304375434
352 | 0.0108613 16747.243899326004
353 | 0.011080699999999999 16842.897867259908
354 | 0.011304499999999999 16935.600036917593
355 | 0.011532899999999999 17023.691499397042
356 | 0.011765899999999998 17107.030607588553
357 | 0.012003599999999998 17186.429725345806
358 | 0.012246 17259.527995789125
359 | 0.012493399999999997 17326.352934903018
360 | 0.012745800000000002 17388.874071324684
361 | 0.0130033 17447.46064584574
362 | 0.013266000000000002 17501.18679337506
363 | 0.013533999999999997 17548.86531784757
364 | 0.013807399999999997 17590.541127916968
365 | 0.0140863 17626.188659214076
366 | 0.0143709 17655.881891584933
367 | 0.014661199999999997 17679.58499765615
368 | 0.0149574 17696.803739907038
369 | 0.0152595 17707.922002441508
370 | 0.015567799999999998 17712.523948476457
371 | 0.015882300000000002 17709.034320626222
372 | 0.01620310000000001 17699.41860450944
373 | 0.0165304 17682.341097812452
374 | 0.0168644 17657.635038735465
375 | 0.017205100000000004 17625.492071715827
376 | 0.017552599999999998 17585.700612074364
377 | 0.017907200000000005 17538.66925089564
378 | 0.018269000000000004 17483.52741676582
379 | 0.018638 17420.4270208322
380 | 0.019014500000000004 17349.351400414733
381 | 0.019398599999999995 17270.226404105768
382 | 0.0197905 17183.172857025475
383 | 0.020190300000000005 17088.081302485865
384 | 0.020598200000000007 16984.41898455271
385 | 0.021014300000000007 16872.61344510678
386 | 0.021438800000000004 16753.543441506063
387 | 0.0218719 16626.613388574428
388 | 0.02231380000000001 16491.08772513862
389 | 0.022764500000000003 16347.610264404555
390 | 0.023224400000000006 16197.195077131548
391 | 0.023693600000000006 16038.513974965503
392 | 0.0241722 15872.29169147973
393 | 0.024660500000000002 15698.861117450746
394 | 0.0251587 15519.340891212907
395 | 0.025666900000000003 15332.408200322277
396 | 0.0261854 15138.899548045085
397 | 0.026714399999999996 14939.689573166152
398 | 0.027254099999999996 14734.327366735335
399 | 0.027804699999999998 14523.575207138634
400 | 0.028366299999999997 14308.236973603762
401 | 0.028939399999999997 14088.049885818615
402 | 0.029523999999999998 13864.15337402578
403 | 0.030120400000000006 13635.740867700471
404 | 0.030728899999999993 13404.732057650426
405 | 0.0313497 13171.644650591754
406 | 0.031983000000000004 12936.267114353102
407 | 0.0326291 12699.838623026812
408 | 0.03328819999999999 12462.364947842874
409 | 0.03396070000000001 12224.170721882216
410 | 0.03464669999999999 11986.88059982712
411 | 0.0353466 11751.23622366262
412 | 0.0360607 11517.139293339329
413 | 0.03678920000000001 11284.457772270405
414 | 0.0375323 11053.429171135049
415 | 0.03829060000000001 10825.145898671497
416 | 0.039064100000000004 10599.573070860393
417 | 0.0398532 10378.845749119091
418 | 0.04065830000000001 10163.793386537947
419 | 0.0414797 9954.31731772873
420 | 0.04231759999999999 9751.684610070777
421 | 0.04317250000000001 9555.665305946017
422 | 0.04404460000000001 9366.778117947002
423 | 0.0449344 9185.344891754708
424 | 0.04584209999999998 9011.420908919952
425 | 0.046768199999999996 8845.219351065147
426 | 0.047712999999999985 8686.455645894095
427 | 0.04867680000000001 8534.944233401224
428 | 0.049660199999999995 8390.393179513101
429 | 0.05066339999999999 8252.421645180542
430 | 0.05168690000000001 8120.692566614468
431 | 0.052731 7994.47828880257
432 | 0.05379620000000001 7873.281388571121
433 | 0.054883 7756.795370564868
434 | 0.0559917 7644.324966908954
435 | 0.0571228 7534.3304830867155
436 | 0.05827679999999999 7427.838097855378
437 | 0.05945400000000001 7327.713898161348
438 | 0.06065509999999999 7231.443653064334
439 | 0.06188040000000001 7133.210389836822
440 | 0.0631305 7030.810182681674
441 | 0.06440580000000001 6925.7313855018465
442 | 0.06570689999999998 6818.737122650944
443 | 0.06703419999999999 6708.336939585271
444 | 0.06838839999999999 6592.886596887265
445 | 0.0697699 6471.508728139005
446 | 0.0711794 6343.520075090773
447 | 0.07261729999999998 6208.417870455208
448 | 0.07408429999999999 6065.74245716328
449 | 0.07558090000000002 5915.43783581062
450 | 0.07710769999999997 5758.077487625372
451 | 0.0786654 5594.221745654397
452 | 0.0802545 5424.761732044882
453 | 0.08187580000000001 5251.0841983702285
454 | 0.08352980000000002 5074.521351289568
455 | 0.08521720000000002 4896.754749531087
456 | 0.08693869999999998 4719.517567817464
457 | 0.08869499999999997 4544.3655334976065
458 | 0.09048669999999999 4372.846909341363
459 | 0.09231470000000001 4206.591588188606
460 | 0.0941796 4047.199849550621
461 | 0.09608219999999999 3895.8660570605794
462 | 0.09802310000000003 3753.896793649858
463 | 0.10000300000000001 3622.176189136342
464 | 0.10202300000000002 3501.7631857604756
465 | 0.104085 3392.7508687583254
466 | 0.106187 3295.037590489086
467 | 0.108332 3208.6292837279534
468 | 0.110521 3132.3513237453208
469 | 0.112753 3065.118877945674
470 | 0.11503100000000001 3005.1122487062858
471 | 0.117355 2950.68236882405
472 | 0.119726 2899.7059162324263
473 | 0.122144 2849.7348498234674
474 | 0.124612 2798.426110658438
475 | 0.127129 2743.3830248167064
476 | 0.12969700000000003 2682.9365190185135
477 | 0.132317 2615.2847335932597
478 | 0.13499 2539.813751881128
479 | 0.13771700000000003 2456.8641164797227
480 | 0.140499 2367.5005177231865
481 | 0.143338 2273.438504530074
482 | 0.146233 2176.8026687703764
483 | 0.149187 2080.0544680043904
484 | 0.152201 1985.257848905591
485 | 0.155276 1894.595932709482
486 | 0.158413 1810.2778197365112
487 | 0.161613 1734.107128259955
488 | 0.16487799999999997 1667.0539217215457
489 | 0.16820800000000002 1609.7403690923031
490 | 0.171606 1561.5577605021092
491 | 0.175073 1520.7766756649455
492 | 0.17861000000000002 1485.4568667403632
493 | 0.18221799999999996 1453.0426471439744
494 | 0.18589899999999998 1421.2497818045172
495 | 0.189654 1387.831003253702
496 | 0.193486 1350.9813144576972
497 | 0.19739400000000001 1309.4901714971818
498 | 0.201382 1263.0475784338698
499 | 0.20545 1212.3503723817078
500 | 0.209601 1159.0641208097036
501 | 0.21383499999999997 1105.407015556349
502 | 0.21815399999999996 1053.419897914809
503 | 0.222562 1005.2613100864072
504 | 0.22705799999999998 962.3424285461541
505 | 0.23164399999999996 925.3704140061445
506 | 0.236324 894.0932352110216
507 | 0.24109799999999998 867.3827390463446
508 | 0.245968 843.3390339415267
509 | 0.25093699999999997 819.978199390438
510 | 0.256007 795.645265395932
511 | 0.26117799999999997 769.2761264228816
512 | 0.266454 740.4920431296683
513 | 0.27183700000000005 709.6613093860941
514 | 0.277329 678.0837906173481
515 | 0.28293100000000004 647.2741109284132
516 | 0.288647 618.6274674114779
517 | 0.294478 593.075754634485
518 | 0.300426 570.700226383475
519 | 0.30649599999999994 550.9266483076723
520 | 0.312687 532.7269202371609
521 | 0.319004 514.9502242731483
522 | 0.325448 496.624322960138
523 | 0.332023 477.3290341392822
524 | 0.33873 457.35613476036895
525 | 0.345573 437.4228890940882
526 | 0.352554 418.4362458633016
527 | 0.359676 400.9570060641879
528 | 0.366942 385.1341504016504
529 | 0.374355 370.71677689617815
530 | 0.381917 357.0074136353065
531 | 0.389632 343.47998445176495
532 | 0.397503 329.790534202719
533 | 0.405533 316.00312911966256
534 | 0.413726 302.5121587611681
535 | 0.42208299999999993 289.6849312794531
536 | 0.43061 277.77243932060264
537 | 0.439309 266.68850600475764
538 | 0.44818399999999997 256.11649858890826
539 | 0.457238 245.81955003042876
540 | 0.4664749999999999 235.67082236378954
541 | 0.475898 225.71519444062332
542 | 0.48551200000000005 216.15023155921628
543 | 0.495319 207.08213060393686
544 | 0.505326 198.49884425385255
545 | 0.515534 190.31343080226407
546 | 0.525949 182.38800761217615
547 | 0.536573 174.6966947829103
548 | 0.547413 167.27306697664827
549 | 0.558471 160.14591235647984
550 | 0.569753 153.35678347650833
551 | 0.581263 146.86907385755174
552 | 0.593005 140.62851771032484
553 | 0.604985 134.627970211586
554 | 0.617206 128.84245560601275
555 | 0.629675 123.29185930713751
556 | 0.642395 117.99061827377074
557 | 0.655373 112.90682599595081
558 | 0.668612 108.03616845640524
559 | 0.682119 103.36262393607421
560 | 0.695898 98.87562377245587
561 | 0.709956 94.57295014642538
562 | 0.724298 90.44599704286757
563 | 0.73893 86.48988676243658
564 | 0.753857 82.697548543061
565 | 0.769087 79.0637040222913
566 | 0.784623 75.58207574920667
567 | 0.800474 72.24548279335468
568 | 0.816644 69.05183577269986
569 | 0.833142 65.99283650472809
570 | 0.849972 63.06337567934433
571 | 0.867143 60.25921960609596
572 | 0.88466 57.5759077073399
573 | 0.902531 55.00559132017299
574 | 0.920763 52.546353043612335
575 | 0.939364 50.19342404548943
576 | 0.95834 47.94065902939034
577 | 0.9777 45.78441362796594
578 | 0.997452 43.72232309746985
579 | 1.0176 41.749774743674664
580 | 1.03816 39.862233535690706
581 | 1.05913 38.05520540689451
582 | 1.08053 36.32813319985199
583 | 1.10235 34.68024939901825
584 | 1.12462 33.09984745419555
585 | 1.14734 31.588690022534493
586 | 1.17052 30.14733250284441
587 | 1.19417 28.768055607932567
588 | 1.21829 27.449859630624033
589 | 1.2429 26.192088098157242
590 | 1.26801 24.98661134916378
591 | 1.29362 23.83528496736933
592 | 1.31976 22.73519775264407
593 | 1.34642 21.68610860722605
594 | 1.37362 20.68251182941658
595 | 1.40137 19.7231281636015
596 | 1.42968 18.807111880259278
597 | 1.45856 17.933011011121888
598 | 1.48802 17.099950912089167
599 | 1.51808 16.301445390361348
600 | 1.54875 15.540404628140115
601 | 1.58004 14.81395164584564
602 | 1.61196 14.120323317713595
603 | 1.64452 13.458798537492292
604 | 1.67774 12.826436483201258
605 | 1.71163 12.224222171006744
606 | 1.74621 11.648690717261456
607 | 1.7814899999999998 11.099388257357706
608 | 1.81747 10.575112428405689
609 | 1.85419 10.075280448265717
610 | 1.89165 9.598738580298361
611 | 1.92986 9.143872046175801
612 | 1.96885 8.709813990465411
613 | 2.00862 8.295596060664904
614 | 2.0492 7.901014764497189
615 | 2.09059 7.525288041613673
616 | 2.13283 7.167314089841902
617 | 2.17591 6.8264715922184624
618 | 2.21987 6.5017676235337305
619 | 2.26471 6.192562469870129
620 | 2.31046 5.898035719072804
621 | 2.35714 5.617483430417124
622 | 2.40475 5.350347271294167
623 | 2.45333 5.095872290427417
624 | 2.50289 4.853507336821404
625 | 2.55346 4.6226305504657645
626 | 2.60504 4.402784736319046
627 | 2.65767 4.193363410487234
628 | 2.71135 3.9939510502368583
629 | 2.76613 3.8039687813714114
630 | 2.82201 3.6230446800151723
631 | 2.87901 3.4507515534262883
632 | 2.93718 3.286600826168527
633 | 2.9965100000000002 3.1302976616765674
634 | 3.05704 2.981424220781829
635 | 3.1188 2.839614874892263
636 | 3.1818000000000004 2.7045665572679916
637 | 3.2460799999999996 2.5759266601262434
638 | 3.3116600000000003 2.4534028775952748
639 | 3.3785499999999997 2.336732042146458
640 | 3.44681 2.2255796658872375
641 | 3.51644 2.1197279198239967
642 | 3.58747 2.018919705153903
643 | 3.6599400000000006 1.9228989387868642
644 | 3.73388 1.8314377428377757
645 | 3.80931 1.7443310384642212
646 | 3.88626 1.6613712542779604
647 | 3.96477 1.5823515917254654
648 | 4.04486 1.5070958311948226
649 | 4.12657 1.4354173716016703
650 | 4.2099400000000005 1.3671405639641883
651 | 4.29498 1.3021219931937644
652 | 4.38175 1.2401871616052376
653 | 4.47027 1.1812001530575196
654 | 4.56057 1.125023718844354
655 | 4.652700000000001 1.0715156402281163
656 | 4.74669 1.0205531047136123
657 | 4.84258 0.972013775201852
658 | 4.940410000000001 0.925781746473768
659 | 5.04021 0.8817513716191674
660 | 5.14203 0.8398135128921047
661 | 5.24591 0.7998691586388643
662 | 5.3518799999999995 0.7618276742325689
663 | 5.460000000000001 0.7255924004377969
664 | 5.57029 0.6910849197159404
665 | 5.68282 0.6582150962454226
666 | 5.79762 0.6269095206615769
667 | 5.91474 0.5970926585800497
668 | 6.03423 0.5686930147187821
669 | 6.15613 0.5416449949130182
670 | 6.280490000000001 0.5158839364457595
671 | 6.40737 0.4913466360367313
672 | 6.536800000000001 0.4679787312342473
673 | 6.668849999999999 0.44572128401508715
674 | 6.803569999999999 0.4245220456356226
675 | 6.941019999999999 0.40432987585656915
676 | 7.081230000000001 0.38510036897146316
677 | 7.2242799999999985 0.3667844411607279
678 | 7.370230000000002 0.3493384666902598
679 | 7.519110000000001 0.33272430766437033
680 | 7.671010000000001 0.3168990321309401
681 | 7.825970000000002 0.30182726385741165
682 | 7.98407 0.2874714607645399
683 | 8.14536 0.27379878436746197
684 | 8.30991 0.2607762755634352
685 | 8.477769999999998 0.2483741603707863
686 | 8.649040000000001 0.236560588924836
687 | 8.82376 0.22530953812612556
688 | 9.00201 0.21459357112188354
689 | 9.18386 0.20438731343068856
690 | 9.36939 0.19466614825354236
691 | 9.55866 0.1854077251788127
692 | 9.75176 0.1765893472883564
693 | 9.94876 0.16819042790857583
694 | 10.1497 0.1601925031741435
695 | 10.354799999999997 0.15257125761135124
696 | 10.563999999999998 0.1453140902883944
697 | 10.777399999999998 0.13840294501893172
698 | 10.9951 0.13182081038150084
699 | 11.217200000000002 0.12555163834781666
700 | 11.443800000000001 0.11958027113333368
701 | 11.674999999999999 0.11389237534677749
702 | 11.910799999999997 0.10847660160271924
703 | 12.1515 0.10331550755737359
704 | 12.396899999999999 0.09840314331973278
705 | 12.647400000000001 0.09372174580581942
706 | 12.902800000000001 0.08926578629467405
707 | 13.163500000000003 0.08501944116641617
708 | 13.429400000000001 0.08097608384402105
709 | 13.700699999999996 0.07712462460633987
710 | 13.977500000000001 0.07345610602269172
711 | 14.259899999999998 0.06996199240100565
712 | 14.547900000000004 0.06663526284934962
713 | 14.841800000000005 0.0634658520031171
714 | 15.141600000000006 0.06044755376679843
715 | 15.447499999999996 0.057572398529629226
716 | 15.759600000000004 0.05483382879189979
717 | 16.077900000000003 0.05222636181641599
718 | 16.402700000000003 0.04974235923810683
719 | 16.734100000000005 0.04737623576114046
720 | 17.072099999999995 0.04512327870732562
721 | 17.417 0.042977021302573526
722 | 17.7689 0.040932668749013405
723 | 18.1278 0.03898613899818059
724 | 18.494 0.03713192654651671
725 | 18.8676 0.035365891042102617
726 | 19.2488 0.03368362479857545
727 | 19.6376 0.03208178470631041
728 | 20.0344 0.030555575476011995
729 | 20.439099999999996 0.029102380414510534
730 | 20.851999999999997 0.027718217144190278
731 | 21.273199999999996 0.026400011794099842
732 | 21.702999999999996 0.025144237199157957
733 | 22.1414 0.023948416606108254
734 | 22.5887 0.022809358299821107
735 | 23.045000000000005 0.021724560488599495
736 | 23.510499999999997 0.0206913923040186
737 | 23.985500000000002 0.01970716478117503
738 | 24.46999999999999 0.018769934878305923
739 | 24.964300000000005 0.017877254484414493
740 | 25.468700000000002 0.017026841773364366
741 | 25.983099999999997 0.016217173752587445
742 | 26.508 0.015445850566674118
743 | 27.043500000000005 0.01471121820541316
744 | 27.589900000000007 0.01401142465916073
745 | 28.147199999999998 0.013345080796347069
746 | 28.7158 0.012710380143706745
747 | 29.2959 0.012105852426357429
748 | 29.887700000000002 0.011530094808767448
749 | 30.49149999999999 0.010981680733917618
750 | 31.107500000000005 0.010459349745300845
751 | 31.73590000000001 0.009961896975931242
752 | 32.377 0.009488099248680291
753 | 33.0311 0.009036803098660619
754 | 33.6983 0.008607043871201005
755 | 34.379099999999994 0.008197650976026462
756 | 35.0736 0.007807760124049982
757 | 35.78210000000001 0.007436428049164695
758 | 36.50500000000001 0.007082714674826051
759 | 37.242399999999996 0.006745871838909854
760 | 37.994699999999995 0.006425046850955282
761 | 38.7623 0.006119440087193883
762 | 39.54529999999999 0.005828408150230982
763 | 40.3442 0.005551189332024189
764 | 41.15919999999999 0.0052871683406215545
765 | 41.99069999999999 0.005035693960423591
766 | 42.839000000000006 0.004796179948346011
767 | 43.70440000000001 0.004568067536485342
768 | 44.58720000000001 0.0043508239684043925
769 | 45.488 0.004143874557085745
770 | 46.406899999999986 0.003946789317977223
771 | 47.34439999999999 0.003759070346739555
772 | 48.300799999999995 0.0035802868165578853
773 | 49.27649999999999 0.0034100097307096467
774 | 50.272 0.003247816732182298
775 | 51.28759999999999 0.0030933399257349597
776 | 52.3236 0.0029462266287197856
777 | 53.3806 0.002806100408206846
778 | 54.45900000000002 0.0026726331074478937
779 | 55.5591 0.0025455235410492827
780 | 56.68150000000001 0.0024244511970704886
781 | 57.826499999999996 0.0023091446589319437
782 | 58.9948 0.002199306612155361
783 | 60.1865 0.0020947104639305048
784 | 61.402399999999986 0.001995078673499664
785 | 62.642699999999984 0.0019001978317379272
786 | 63.9082 0.0018098191708138713
787 | 65.1992 0.001723743386312115
788 | 66.51640000000002 0.0016417541447357334
789 | 67.86010000000002 0.0015636709240883888
790 | 69.231 0.0014892984792353049
791 | 70.62950000000001 0.001418468025400092
792 | 72.05630000000001 0.0013510039736392215
793 | 73.5119 0.001286749577048793
794 | 74.99700000000001 0.00122554734350136
795 | 76.51199999999999 0.0011672598990992206
796 | 78.05769999999998 0.001111741301578326
797 | 79.63449999999999 0.0010588674378377973
798 | 81.24329999999999 0.0010085037541906418
799 | 82.88449999999999 0.0009605384199436579
800 | 84.55889999999998 0.0009148531460511251
801 | 86.267 0.0008713438523044432
802 | 88.00979999999998 0.0008298993000732717
803 | 89.78780000000002 0.0007904262016325475
804 | 91.60159999999998 0.0007528329871692397
805 | 93.45199999999997 0.0007170284891131826
806 | 95.33989999999999 0.0006829247305983944
807 | 97.26590000000002 0.000650443671972658
808 | 99.23080000000003 0.0006195075878737057
809 | 101.23499999999999 0.0005900484599493373
810 | 103.28000000000004 0.000561985938316791
811 | 105.36699999999999 0.000535249522135629
812 | 107.49499999999999 0.0005097986352486256
813 | 109.66699999999997 0.0004855468941412991
814 | 111.88200000000002 0.0004624577661908387
815 | 114.14300000000001 0.0004404547212149148
816 | 116.44800000000004 0.0004195134001213883
817 | 118.801 0.00039955582338016424
818 | 121.20100000000005 0.0003805518667230162
819 | 123.64900000000006 0.00036245524961034354
820 | 126.14699999999995 0.000345215487080237
821 | 128.69500000000002 0.0003287986112546405
822 | 131.29499999999996 0.00031315934497124225
823 | 133.94799999999995 0.00029826139390102705
824 | 136.65400000000002 0.0002840752614931836
825 | 139.41400000000004 0.00027056701101593457
826 | 142.23 0.00025769996884104977
827 | 145.10399999999993 0.0002454402134520634
828 | 148.03500000000005 0.00023376783319227924
829 | 151.02599999999998 0.00022264769673646935
830 | 154.07600000000005 0.00021206133841991252
831 | 157.18899999999996 0.00020197393822797221
832 | 160.36399999999998 0.0001923689975074711
833 | 163.604 0.00018321845081173532
834 | 166.90899999999996 0.00017450434890566705
835 | 170.281 0.00016620414192826911
836 | 173.72099999999998 0.0001582990035462724
837 | 177.23 0.00015077088092199116
838 | 180.81 0.00014360053317853414
839 | 184.46300000000008 0.00013676995482090606
840 | 188.18900000000005 0.0001302656384586569
841 | 191.99099999999993 0.0001240694835591593
842 | 195.86899999999991 0.00011816924591927949
843 | 199.826 0.0001125486816527885
844 | 203.86299999999997 0.00010719537577113268
845 | 207.9809999999999 0.00010209736361467264
846 | 212.1829999999999 0.0000972408910641402
847 | 216.46899999999997 0.0000926163609656418
848 | 220.842 0.00008821134841278603
849 | 225.3039999999999 0.00008401524817138014
850 | 229.8550000000001 0.00008001972852247788
851 | 234.49800000000002 0.00007621416658454818
852 | 239.23500000000004 0.00007258943143965952
853 | 244.06799999999998 0.00006913687439956015
854 | 248.99899999999994 0.00006584829596133496
855 | 254.0289999999999 0.00006271651739901408
856 | 259.161 0.00005973346905797587
857 | 264.3959999999999 0.000056892662310011024
858 | 269.7370000000001 0.000054186834414912165
859 | 275.186 0.00005160964707328219
860 | 280.7450000000001 0.000049155066157130724
861 | 286.41699999999986 0.00004681694625379245
862 | 292.2030000000001 0.000044590262548717235
863 | 298.105 0.000042469790367634014
864 | 304.12800000000004 0.000040449576421490534
865 | 310.27199999999993 0.00003852566941379835
866 | 316.5399999999999 0.000036693303610917775
867 | 322.9340000000001 0.000034948253653153804
868 | 329.45799999999986 0.000033285986685589444
869 | 336.11300000000006 0.000031702966986741584
870 | 342.90299999999985 0.00003019511046107684
871 | 349.83 0.000028759004348928973
872 | 356.8970000000001 0.000027391188119091975
873 | 364.10700000000014 0.00002608838551593704
874 | 371.4630000000001 0.00002484749179434939
875 | 378.96599999999995 0.00002366586646680602
876 | 386.6220000000002 0.00002254022741624754
877 | 394.43199999999996 0.000021468216794269912
878 | 402.40099999999995 0.00002044703819273473
879 | 410.53014375108813 0.00001947453336921906
880 | 418.8235092067095 0.000018548282952960113
881 | 427.28441390793176 0.000017666086985521796
882 | 435.916242415458 0.00001682585014319165
883 | 444.7224476635301 0.000016025576760329746
884 | 453.706552341184 0.000015263366089418026
885 | 462.87215030140806 0.000014537407786551481
886 | 472.2229079987683 0.000013845977611649232
887 | 481.7625659560772 0.0000131874333331635
888 | 491.49494026068896 0.000012560210827614955
889 | 501.42392409102644 0.00001196282036455168
890 | 511.5534892739427 0.00001139384306829404
891 | 521.8876878735451 0.000010851927547921286
892 |
--------------------------------------------------------------------------------
/FOLPSnu.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # coding: utf-8
3 |
4 | #===========================================================================================================================
5 | #============= ============= ============= ============ FOLPSν ============== ============== ============= ===============
6 | # This is a code for efficiently evaluating the redshift space power spectrum in the presence of massive neutrinos.
7 |
8 | # We recommend to use NumPy versions ≥ 1.20.0. For older versions, one needs to rescale by a factor 1/N the FFT computation. (see: https://github.com/henoriega/FOLPS-nu).
9 | #===========================================================================================================================
10 |
11 | #standard libraries
12 | import numpy as np
13 | import scipy
14 | from scipy import integrate
15 | from scipy.interpolate import CubicSpline
16 | from scipy import interpolate
17 | from scipy.fft import dst, idst
18 | from scipy.special import gamma
19 | from scipy.special import spherical_jn
20 | from scipy.special import eval_legendre
21 | from scipy.integrate import quad
22 | import sys
23 |
24 |
25 |
26 | def interp(k, x, y):
27 | '''Cubic spline interpolation.
28 |
29 | Args:
30 | k: coordinates at which to evaluate the interpolated values.
31 | x: x-coordinates of the data points.
32 | y: y-coordinates of the data points.
33 | Returns:
34 | Cubic interpolation of ‘y’ evaluated at ‘k’.
35 | '''
36 | inter = CubicSpline(x, y)
37 | return inter(k)
38 |
39 |
40 |
41 | def Matrices(Nfftlog = None):
42 | '''M matrices. They do not depend on the cosmology, so they are computed only one time.
43 |
44 | Args:
45 | if 'Nfftlog = None' (or not specified) the code use as default 'Nfftlog = 128'.
46 | to use a different number of sample points, just specify it as 'Nfftlog = number'.
47 | we recommend using the default mode, see Fig.~8 at arXiv:2208.02791.
48 | Returns:
49 | All the M matrices.
50 | '''
51 | global M22matrices, M13vectors, bnu_b, N
52 |
53 | k_min = 10**(-7); k_max = 100.
54 | b_nu = -0.1; #Not yet tested for other values
55 |
56 | if Nfftlog == None:
57 | N = 128
58 |
59 | else:
60 | N = Nfftlog
61 |
62 |
63 | #Eq.~ 4.19 at arXiv:2208.02791
64 | def Imatrix(nu1, nu2):
65 | return 1/(8 * np.pi**(3/2)) * ( gamma(3/2-nu1)*gamma(3/2-nu2)*gamma(nu1+nu2-3/2) )/( gamma(nu1)*gamma(nu2)*gamma(3-nu1-nu2) )
66 |
67 |
68 | #M22-type
69 | def M22(nu1, nu2):
70 |
71 | #Overdensity and velocity
72 | def M22_dd(nu1, nu2):
73 | return Imatrix(nu1,nu2)*(3/2-nu1-nu2)*(1/2-nu1-nu2)*( (nu1*nu2)*(98*(nu1+nu2)**2 - 14*(nu1+nu2) + 36) - 91*(nu1+nu2)**2+ 3*(nu1+nu2) + 58)/(196*nu1*(1+nu1)*(1/2-nu1)*nu2*(1+nu2)*(1/2-nu2))
74 |
75 | def M22_dt_fp(nu1, nu2):
76 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-1+2*(nu1+nu2))*(-23-21*nu1+(-38+7*nu1*(-1+7*nu1))*nu2+7*(3+7*nu1)*nu2**2) )/(196*nu1*(1+nu1)*nu2*(1+nu2)*(-1+2*nu2))
77 |
78 | def M22_tt_fpfp(nu1, nu2):
79 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-12*(1-2*nu2)**2 + 98*nu1**(3)*nu2 + 7*nu1**2*(1+2*nu2*(-8+7*nu2))- nu1*(53+2*nu2*(17+7*nu2))))/(98*nu1*(1+nu1)*nu2*(1+nu2)*(-1+2*nu2))
80 |
81 | def M22_tt_fkmpfp(nu1, nu2):
82 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-37+7*nu1**(2)*(3+7*nu2) + nu2*(-10+21*nu2) + nu1*(-10+7*nu2*(-1+7*nu2))))/(98*nu1*(1+nu1)*nu2*(1+nu2))
83 |
84 | #A function
85 | def MtAfp_11(nu1, nu2):
86 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-1+2*(nu1+nu2))*(-5+nu1*(-4+7*(nu1+nu2))))/(7*nu1*(1+nu1)*(-1+2*nu1)*nu2)
87 |
88 | def MtAfkmpfp_12(nu1, nu2):
89 | return -Imatrix(nu1,nu2)*(((-3+2*(nu1+nu2))*(-1+2*(nu1+nu2))*(6+7*(nu1+nu2)))/(56*nu1*(1+nu1)*nu2*(1+nu2)))
90 |
91 | def MtAfkmpfp_22(nu1, nu2):
92 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-18+3*nu1*(1+4*(10-9*nu1)*nu1)+75*nu2+8*nu1*(41+2*nu1*(-28+nu1*(-4+7*nu1)))*nu2+48*nu1*(-9+nu1*(-3+7*nu1))*nu2**2+4*(-39+4*nu1*(-19+35*nu1))*nu2**3+336*nu1*nu2**4) )/(56*nu1*(1+nu1)*(-1+2*nu1)*nu2*(1+nu2)*(-1+2*nu2))
93 |
94 | def MtAfpfp_22(nu1, nu2):
95 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-5+3*nu2+nu1*(-4+7*(nu1+nu2))))/(7*nu1*(1+nu1)*nu2)
96 |
97 | def MtAfkmpfpfp_23(nu1, nu2):
98 | return -Imatrix(nu1,nu2)*(((-1+7*nu1)*(-3+2*(nu1+nu2))*(-1+2*(nu1+nu2)))/(28*nu1*(1+nu1)*nu2*(1+nu2)))
99 |
100 | def MtAfkmpfpfp_33(nu1, nu2):
101 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-1+2*(nu1+nu2))*(-13*(1+nu1)+2*(-11+nu1*(-1+14*nu1))*nu2 + 4*(3+7*nu1)*nu2**2))/(28*nu1*(1+nu1)*nu2*(1+nu2)*(-1+2*nu2))
102 |
103 | #D function
104 | def MB1_11(nu1, nu2):
105 | return Imatrix(nu1,nu2)*(3-2*(nu1+nu2))/(4*nu1*nu2)
106 |
107 | def MC1_11(nu1, nu2):
108 | return Imatrix(nu1,nu2)*((-3+2*nu1)*(-3+2*(nu1+nu2)))/(4*nu2*(1+nu2)*(-1+2*nu2))
109 |
110 | def MB2_11(nu1, nu2):
111 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-1+2*(nu1+nu2)))/(4*nu1*nu2)
112 |
113 | def MC2_11(nu1, nu2):
114 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-1+2*(nu1+nu2)))/(4*nu2*(1+nu2))
115 |
116 | def MD2_21(nu1, nu2):
117 | return Imatrix(nu1,nu2)*((-1+2*nu1-4*nu2)*(-3+2*(nu1+nu2))*(-1+2*(nu1+nu2)))/(4*nu1*nu2*(-1+nu2+2*nu2**2))
118 |
119 | def MD3_21(nu1, nu2):
120 | return Imatrix(nu1,nu2)*((3-2*(nu1+nu2))*(1-4*(nu1+nu2)**2))/(4*nu1*nu2*(1+nu2))
121 |
122 | def MD2_22(nu1, nu2):
123 | return Imatrix(nu1,nu2)*(3*(3-2*(nu1+nu2))*(1-2*(nu1+nu2)))/(32*nu1*(1+nu1)*nu2*(1+nu2))
124 |
125 | def MD3_22(nu1, nu2):
126 | return Imatrix(nu1,nu2)*((3-2*(nu1+nu2))*(1-4*(nu1+nu2)**2)*(1+2*(nu1**2-4*nu1*nu2+nu2**2)))/(16*nu1*(1+nu1)*(-1+2*nu1)*nu2*(1+nu2)*(-1+2*nu2))
127 |
128 | def MD4_22(nu1, nu2):
129 | return Imatrix(nu1,nu2)*((9-4*(nu1+nu2)**2)*(1-4*(nu1+nu2)**2))/(32*nu1*(1+nu1)*nu2*(1+nu2))
130 |
131 |
132 | return (M22_dd(nu1, nu2), M22_dt_fp(nu1, nu2), M22_tt_fpfp(nu1, nu2), M22_tt_fkmpfp(nu1, nu2),
133 | MtAfp_11(nu1, nu2), MtAfkmpfp_12(nu1, nu2), MtAfkmpfp_22(nu1, nu2), MtAfpfp_22(nu1, nu2),
134 | MtAfkmpfpfp_23(nu1, nu2), MtAfkmpfpfp_33(nu1, nu2), MB1_11(nu1, nu2), MC1_11(nu1, nu2),
135 | MB2_11(nu1, nu2), MC2_11(nu1, nu2), MD2_21(nu1, nu2), MD3_21(nu1, nu2), MD2_22(nu1, nu2),
136 | MD3_22(nu1, nu2), MD4_22(nu1, nu2))
137 |
138 |
139 | #M22-type Biasing
140 | def M22bias(nu1, nu2):
141 |
142 | def MPb1b2(nu1, nu2):
143 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-4+7*(nu1+nu2)))/(28*nu1*nu2)
144 |
145 | def MPb1bs2(nu1, nu2):
146 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(2+14*nu1**2 *(-1+2*nu2)-nu2*(3+14*nu2)+nu1*(-3+4*nu2*(-11+7*nu2))))/(168*nu1*(1+nu1)*nu2*(1+nu2))
147 |
148 | def MPb22(nu1, nu2):
149 | return 1/2 * Imatrix(nu1, nu2)
150 |
151 | def MPb2bs2(nu1, nu2):
152 | return Imatrix(nu1,nu2)*((-3+2*nu1)*(-3+2*nu2))/(12*nu1*nu2)
153 |
154 | def MPb2s2(nu1, nu2):
155 | return Imatrix(nu1,nu2)*((63-60*nu2+4*(3*(-5+nu1)*nu1+(17-4*nu1)*nu1*nu2+(3+2*(-2+nu1)*nu1)*nu2**2)))/(36*nu1*(1+nu1)*nu2*(1+nu2))
156 |
157 | def MPb2t(nu1, nu2):
158 | return Imatrix(nu1,nu2)*((-4+7*nu1)*(-3+2*(nu1+nu2)))/(14*nu1*nu2)
159 |
160 | def MPbs2t(nu1, nu2):
161 | return Imatrix(nu1,nu2)*((-3+2*(nu1+nu2))*(-19-10*nu2+nu1*(39-30*nu2+14*nu1*(-1+2*nu2))))/(84*nu1*(1+nu1)*nu2*(1+nu2))
162 |
163 |
164 | return (MPb1b2(nu1, nu2), MPb1bs2(nu1, nu2), MPb22(nu1, nu2), MPb2bs2(nu1, nu2),
165 | MPb2s2(nu1, nu2), MPb2t(nu1, nu2), MPbs2t(nu1, nu2))
166 |
167 |
168 | #M13-type
169 | def M13(nu1):
170 |
171 | #Overdensity and velocity
172 | def M13_dd(nu1):
173 | return ((1+9*nu1)/4) * np.tan(nu1*np.pi)/( 28*np.pi*(nu1+1)*nu1*(nu1-1)*(nu1-2)*(nu1-3) )
174 |
175 | def M13_dt_fk(nu1):
176 | return ((-7+9*nu1)*np.tan(nu1*np.pi))/(112*np.pi*(-3+nu1)*(-2+nu1)*(-1+nu1)*nu1*(1+nu1))
177 |
178 | def M13_tt_fk(nu1):
179 | return -(np.tan(nu1*np.pi)/(14*np.pi*(-3 + nu1)*(-2 + nu1)*(-1 + nu1)*nu1*(1 + nu1) ))
180 |
181 | # A function
182 | def Mafk_11(nu1):
183 | return ((15-7*nu1)*np.tan(nu1*np.pi))/(56*np.pi*(-3+nu1)*(-2+nu1)*(-1+nu1)*nu1)
184 |
185 | def Mafp_11(nu1):
186 | return ((-6+7*nu1)*np.tan(nu1*np.pi))/(56*np.pi*(-3+nu1)*(-2+nu1)*(-1+nu1)*nu1)
187 |
188 | def Mafkfp_12(nu1):
189 | return (3*(-13+7*nu1)*np.tan(nu1*np.pi))/(224*np.pi*(-3+nu1)*(-2+nu1)*(-1+nu1)*nu1*(1+nu1))
190 |
191 | def Mafpfp_12(nu1):
192 | return (3*(1-7*nu1)*np.tan(nu1*np.pi))/(224*np.pi*(-3+nu1)*(-2+nu1)*(-1+nu1)*nu1*(1+nu1))
193 |
194 | def Mafkfkfp_33(nu1):
195 | return ((21+(53-28*nu1)*nu1)*np.tan(nu1*np.pi))/(224*np.pi*(-3+nu1)*(-2+nu1)*(-1+nu1)*nu1*(1+nu1))
196 |
197 | def Mafkfpfp_33(nu1):
198 | return ((-21+nu1*(-17+28*nu1))*np.tan(nu1*np.pi))/(224*np.pi*(-3+nu1)*(-2+nu1)*(-1+nu1)*nu1*(1+nu1))
199 |
200 |
201 | return (M13_dd(nu1), M13_dt_fk(nu1), M13_tt_fk(nu1), Mafk_11(nu1), Mafp_11(nu1), Mafkfp_12(nu1),
202 | Mafpfp_12(nu1), Mafkfkfp_33(nu1), Mafkfpfp_33(nu1))
203 |
204 |
205 | #M13-type Biasing
206 | def M13bias(nu1):
207 |
208 | def Msigma23(nu1):
209 | return (45*np.tan(nu1*np.pi))/(128*np.pi*(-3+nu1)*(-2+nu1)*(-1+nu1)*nu1*(1+nu1))
210 |
211 | return (Msigma23(nu1))
212 |
213 |
214 | #Computation of M22-type matrices
215 | def M22type(k_min, k_max, N, b_nu, M22):
216 |
217 | #nuT = -etaT/2, etaT = bias_nu + i*eta_m
218 | nuT = np.zeros(N+1, dtype = complex)
219 |
220 | for jj in range(N+1):
221 | nuT[jj] = -0.5 * (b_nu + (2*np.pi*1j/np.log(k_max/k_min)) * (jj - N/2) *(N-1)/(N))
222 |
223 | #reduce time x10 compared to "for" iterations
224 | nuT_x, nuT_y = np.meshgrid(nuT, nuT)
225 | M22matrix = M22(nuT_y, nuT_x)
226 |
227 | return np.array(M22matrix)
228 |
229 |
230 | #Computation of M13-type matrices
231 | def M13type(k_min, k_max, N, b_nu, M13):
232 |
233 | #nuT = -etaT/2, etaT = bias_nu + i*eta_m
234 | nuT = np.zeros(N+1, dtype = complex)
235 |
236 | for ii in range(N+1):
237 | nuT[ii] = -0.5 * (b_nu + (2*np.pi*1j/np.log(k_max/k_min)) * (ii - N/2) *(N-1)/(N))
238 |
239 | M13vector = M13(nuT)
240 |
241 | return np.array(M13vector)
242 |
243 |
244 | #FFTLog bias for the biasing spectra Pb1b2,...
245 | bnu_b = 15.1*b_nu
246 |
247 |
248 | M22T = M22type(k_min, k_max, N, b_nu, M22)
249 | M22biasT = M22type(k_min, k_max, N, bnu_b, M22bias)
250 | M22matrices = np.concatenate((M22T, M22biasT))
251 |
252 | M13T = M13type(k_min, k_max, N, b_nu, M13)
253 | M13biasT = np.reshape(M13type(k_min, k_max, N, bnu_b, M13bias), (1, int(N+1)))
254 | M13vectors = np.concatenate((M13T, M13biasT))
255 |
256 | print('N = '+str(N)+' sampling points')
257 | print('M matrices have been computed')
258 |
259 | return (M22matrices, M13vectors)
260 |
261 |
262 |
263 |
264 | def LinearRegression(inputxy):
265 | '''Linear regression.
266 |
267 | Args:
268 | inputxy: data set with x- and y-coordinates.
269 | Returns:
270 | slope ‘m’ and the intercept ‘b’.
271 | '''
272 | xm = np.mean(inputxy[0])
273 | ym = np.mean(inputxy[1])
274 | Npts = len(inputxy[0])
275 |
276 | SS_xy = np.sum(inputxy[0]*inputxy[1]) - Npts*xm*ym
277 | SS_xx = np.sum(inputxy[0]**2) - Npts*xm**2
278 | m = SS_xy/SS_xx
279 |
280 | b = ym - m*xm
281 | return (m, b)
282 |
283 |
284 |
285 |
286 | def Extrapolate(inputxy, outputx):
287 | '''Extrapolation.
288 |
289 | Args:
290 | inputxy: data set with x- and y-coordinates.
291 | outputx: x-coordinates of extrapolation.
292 | Returns:
293 | extrapolates the data set ‘inputxy’ to the range given by ‘outputx’.
294 | '''
295 | m, b = LinearRegression(inputxy)
296 | outxy = [(outputx[ii], m*outputx[ii]+b) for ii in range(len(outputx))]
297 |
298 | return np.array(np.transpose(outxy))
299 |
300 |
301 |
302 |
303 | def ExtrapolateHighkLogLog(inputT, kcutmax, kmax):
304 | '''Extrapolation for high-k values.
305 |
306 | Args:
307 | inputT: k-coordinates and linear power spectrum.
308 | kcutmax: value of ‘k’ from which ‘inputT’ will be interpolated.
309 | kmax: value of ‘k’ up to which ‘inputT’ will be interpolated.
310 | Returns:
311 | extrapolation for high-k values (from ‘kcutmax’ to ‘kmax’) for a given linear power spectrum ‘ inputT’.
312 | '''
313 | cutrange = np.where(inputT[0]<= kcutmax)
314 | inputcutT = np.array([inputT[0][cutrange], inputT[1][cutrange]])
315 | listToExtT = inputcutT[0][-6:]
316 | tableToExtT = np.array([listToExtT, inputcutT[1][-6:]])
317 | delta = np.log10(listToExtT[2])-np.log10(listToExtT[1])
318 | lastk = np.log10(listToExtT[-1])
319 |
320 | logklist = [];
321 | while (lastk <= np.log10(kmax)):
322 | logklistT = lastk + delta;
323 | lastk = logklistT
324 | logklist.append(logklistT)
325 | logklist = np.array(logklist)
326 |
327 | sign = np.sign(tableToExtT[1][1])
328 | tableToExtT = np.log10(np.abs(tableToExtT))
329 | logextT = Extrapolate(tableToExtT, logklist)
330 |
331 | output = np.array([10**logextT[0], sign*10**logextT[1]])
332 | output = np.concatenate((inputcutT, output), axis=1)
333 |
334 |
335 | return output
336 |
337 |
338 |
339 |
340 | def ExtrapolateLowkLogLog(inputT, kcutmin, kmin):
341 | '''Extrapolation for low-k values.
342 |
343 | Args:
344 | inputT: k-coordinates and linear power spectrum.
345 | kcutmin: value of ‘k’ from which ‘inputT’ will be interpolated.
346 | kmin: value of ‘k’ up to which ‘inputT’ will be interpolated.
347 | Returns:
348 | extrapolation for low-k values (from ‘kcutmin’ to ‘kmin’) for a given linear power spectrum ‘inputT’.
349 | '''
350 | cutrange = np.where(inputT[0] > kcutmin)
351 | inputcutT = np.array([inputT[0][cutrange], inputT[1][cutrange]])
352 | listToExtT = inputcutT[0][:5]
353 | tableToExtT = np.array([listToExtT, inputcutT[1][:5]])
354 | delta = np.log10(listToExtT[2])-np.log10(listToExtT[1])
355 | firstk = np.log10(listToExtT[0])
356 |
357 | logklist = [];
358 | while (firstk > np.log10(kmin)):
359 | logklistT = firstk - delta;
360 | firstk = logklistT
361 | logklist.append(logklistT)
362 | logklist = np.array(list(reversed(logklist)))
363 |
364 | sign = np.sign(tableToExtT[1][1])
365 | tableToExtT = np.log10(np.abs(tableToExtT))
366 | logextT = Extrapolate(tableToExtT, logklist)
367 |
368 | output = np.array([10**logextT[0], sign*10**logextT[1]])
369 | output = np.concatenate((output, inputcutT), axis=1)
370 |
371 |
372 | return output
373 |
374 |
375 |
376 |
377 | def ExtrapolatekLogLog(inputT, kcutmin, kmin, kcutmax, kmax):
378 | '''Extrapolation at low-k and high-k.
379 |
380 | Args:
381 | inputT: k-coordinates and linear power spectrum.
382 | kcutmin, kcutmax: value of ‘k’ from which ‘inputT’ will be interpolated.
383 | kmin, kmax: value of ‘k’ up to which ‘inputT’ will be interpolated.
384 | Returns:
385 | combines extrapolation al low-k and high-k.
386 | '''
387 | output = ExtrapolateLowkLogLog(ExtrapolateHighkLogLog(inputT, kcutmax, kmax), kcutmin, kmin)
388 |
389 | return output
390 |
391 |
392 |
393 |
394 | def Extrapolate_inputpkl(inputT):
395 | '''Extrapolation to the input linear power spectrum.
396 |
397 | Args:
398 | inputT: k-coordinates and linear power spectrum.
399 | Returns:
400 | extrapolates the input linear power spectrum ‘inputT’ to low-k or high-k if needed.
401 | '''
402 | kcutmin = min(inputT[0]); kmin = 10**(-5);
403 | kcutmax = max(inputT[0]); kmax = 200
404 |
405 | if ((kmin < kcutmin) or (kmax > kcutmax)):
406 | output = ExtrapolatekLogLog(inputT, kcutmin, kmin, kcutmax, kmax)
407 |
408 | else:
409 | output = inputT
410 |
411 | return output
412 |
413 |
414 |
415 |
416 | def CosmoParam(h, ombh2, omch2, omnuh2):
417 | '''Gives some inputs for the function 'fOverf0EH'.
418 |
419 | Args:
420 | h = H0/100.
421 | ombh2: Omega_b h² (baryons)
422 | omch2: Omega_c h² (CDM)
423 | omnuh2: Omega_nu h² (massive neutrinos)
424 | Returns:
425 | h: H0/100.
426 | OmM0: Omega_b + Omega_c + Omega_nu (dimensionless matter density parameter)
427 | fnu: Omega_nu/OmM0
428 | Massnu: Total neutrino mass [eV]
429 | '''
430 |
431 | Omb = ombh2/h**2;
432 | Omc = omch2/h**2;
433 | Omnu = omnuh2/h**2;
434 |
435 | OmM0 = Omb + Omc + Omnu;
436 | fnu = Omnu/OmM0;
437 | Massnu = Omnu*93.14*h**2;
438 |
439 | return(h, OmM0, fnu, Massnu)
440 |
441 |
442 |
443 |
444 | def fOverf0EH(zev, k, OmM0, h, fnu):
445 | '''Rutine to get f(k)/f0 and f0.
446 | f(k)/f0 is obtained following H&E (1998), arXiv:astro-ph/9710216
447 | f0 is obtained by solving directly the differential equation for the linear growth at large scales.
448 |
449 | Args:
450 | zev: redshift
451 | k: wave-number
452 | OmM0: Omega_b + Omega_c + Omega_nu (dimensionless matter density parameter)
453 | h = H0/100
454 | fnu: Omega_nu/OmM0
455 | Returns:
456 | f(k)/f0 (when 'EdSkernels = True' f(k)/f0 = 1)
457 | f0
458 | '''
459 | if (fnu > 0):
460 | eta = np.log(1/(1+zev)) #log of scale factor
461 | Neff = 3.046 #effective number of neutrinos
462 | omrv = 2.469*10**(-5)/(h**2 * (1 + 7/8*(4/11)**(4/3)*Neff)) #rad: including neutrinos
463 | aeq = omrv/OmM0 #matter-radiation equality
464 |
465 | pcb = 5/4 - np.sqrt(1 + 24*(1 - fnu))/4 #neutrino supression
466 | c = 0.7
467 | Nnu = 3 #number of neutrinos
468 | theta272 = (1.00)**2 # T_{CMB} = 2.7*(theta272)
469 | pf = (k * theta272)/(OmM0 * h**2)
470 | DEdS = np.exp(eta)/aeq #growth function: EdS cosmology
471 |
472 | yFS = 17.2*fnu*(1 + 0.488*fnu**(-7/6))*(pf*Nnu/fnu)**2 #yFreeStreaming
473 | rf = DEdS/(1 + yFS)
474 | fFit = 1 - pcb/(1 + (rf)**c) #f(k)/f0
475 |
476 | else:
477 | fFit = np.full(len(k), 1.0)
478 |
479 |
480 | #Getting f0
481 | def OmM(eta):
482 | return 1/(1 + ((1-OmM0)/OmM0)* np.exp(3*eta) )
483 |
484 | def f1(eta):
485 | return 2 - 3/2 * OmM(eta)
486 |
487 | def f2(eta):
488 | return 3/2 * OmM(eta)
489 |
490 | etaini = -6; #initial eta, early enough to evolve as EdS (D + \propto a)
491 | zfin = -0.99;
492 |
493 | def etaofz(z):
494 | return np.log(1/(1 + z))
495 |
496 | etafin = etaofz(zfin);
497 |
498 | from scipy.integrate import odeint
499 |
500 | #Differential eqs.
501 | def Deqs(Df, eta):
502 | Df, Dprime = Df
503 | return [Dprime, f2(eta)*Df - f1(eta)*Dprime]
504 |
505 | #eta range and initial conditions
506 | eta = np.linspace(etaini, etafin, 1001)
507 | Df0 = np.exp(etaini)
508 | Df_p0 = np.exp(etaini)
509 |
510 | #solution
511 | Dplus, Dplusp = odeint(Deqs, [Df0,Df_p0], eta).T
512 |
513 | Dplusp_ = interp(etaofz(zev), eta, Dplusp)
514 | Dplus_ = interp(etaofz(zev), eta, Dplus)
515 | f0 = Dplusp_/Dplus_
516 |
517 | return (k, fFit, f0)
518 |
519 |
520 |
521 |
522 | def pknwJ(k, PSLk, h):
523 | '''Routine (based on J. Hamann et. al. 2010, arXiv:1003.3999) to get the non-wiggle piece of the linear power spectrum.
524 |
525 | Args:
526 | k: wave-number.
527 | PSLk: linear power spectrum.
528 | h: H0/100.
529 | Returns:
530 | non-wiggle piece of the linear power spectrum.
531 | '''
532 | #ksmin(max): k-range and Nks: points
533 | ksmin = 7*10**(-5)/h; ksmax = 7/h; Nks = 2**16
534 |
535 | #sample ln(kP_L(k)) in Nks points, k range (equidistant)
536 | ksT = [ksmin + ii*(ksmax-ksmin)/(Nks-1) for ii in range(Nks)]
537 | PSL = interp(ksT, k, PSLk)
538 | logkpkT = np.log(ksT*PSL)
539 |
540 | #Discrete sine transf., check documentation
541 | FSTtype = 1; m = int(len(ksT)/2)
542 | FSTlogkpkT = dst(logkpkT, type = FSTtype, norm = "ortho")
543 | FSTlogkpkOddT = FSTlogkpkT[::2]
544 | FSTlogkpkEvenT = FSTlogkpkT[1::2]
545 |
546 | #cut range (remove the harmonics around BAO peak)
547 | mcutmin = 120; mcutmax = 240;
548 |
549 | #Even
550 | xEvenTcutmin = np.linspace(1, mcutmin-2, mcutmin-2)
551 | xEvenTcutmax = np.linspace(mcutmax+2, len(FSTlogkpkEvenT), len(FSTlogkpkEvenT)-mcutmax-1)
552 | EvenTcutmin = FSTlogkpkEvenT[0:mcutmin-2]
553 | EvenTcutmax = FSTlogkpkEvenT[mcutmax+1:len(FSTlogkpkEvenT)]
554 | xEvenTcuttedT = np.concatenate((xEvenTcutmin, xEvenTcutmax))
555 | nFSTlogkpkEvenTcuttedT = np.concatenate((EvenTcutmin, EvenTcutmax))
556 |
557 |
558 | #Odd
559 | xOddTcutmin = np.linspace(1, mcutmin-1, mcutmin-1)
560 | xOddTcutmax = np.linspace(mcutmax+1, len(FSTlogkpkEvenT), len(FSTlogkpkEvenT)-mcutmax)
561 | OddTcutmin = FSTlogkpkOddT[0:mcutmin-1]
562 | OddTcutmax = FSTlogkpkOddT[mcutmax:len(FSTlogkpkEvenT)]
563 | xOddTcuttedT = np.concatenate((xOddTcutmin, xOddTcutmax))
564 | nFSTlogkpkOddTcuttedT = np.concatenate((OddTcutmin, OddTcutmax))
565 |
566 | #Interpolate the FST harmonics in the BAO range
567 | preT, = map(np.zeros,(len(FSTlogkpkT),))
568 | PreEvenT = interp(np.linspace(2, mcutmax, mcutmax-1), xEvenTcuttedT, nFSTlogkpkEvenTcuttedT)
569 | PreOddT = interp(np.linspace(0, mcutmax-2, mcutmax-1), xOddTcuttedT, nFSTlogkpkOddTcuttedT)
570 | for ii in range(m):
571 | if (mcutmin < ii+1 < mcutmax):
572 | preT[2*ii+1] = PreEvenT[ii]
573 | preT[2*ii] = PreOddT[ii]
574 | if (mcutmin >= ii+1 or mcutmax <= ii+1):
575 | preT[2*ii+1] = FSTlogkpkT[2*ii+1]
576 | preT[2*ii] = FSTlogkpkT[2*ii]
577 |
578 |
579 | #Inverse Sine transf.
580 | FSTofFSTlogkpkNWT = idst(preT, type = FSTtype, norm = "ortho")
581 | PNWT = np.exp(FSTofFSTlogkpkNWT)/ksT
582 |
583 | PNWk = interp(k, ksT, PNWT)
584 | DeltaAppf = k*(PSL[7]-PNWT[7])/PNWT[7]/ksT[7]
585 |
586 | irange1 = np.where((k < 1e-3))
587 | PNWk1 = PSLk[irange1]/(DeltaAppf[irange1] + 1)
588 |
589 | irange2 = np.where((1e-3 <= k) & (k <= ksT[len(ksT)-1]))
590 | PNWk2 = PNWk[irange2]
591 |
592 | irange3 = np.where((k > ksT[len(ksT)-1]))
593 | PNWk3 = PSLk[irange3]
594 |
595 | PNWkTot = np.concatenate((PNWk1, PNWk2, PNWk3))
596 |
597 | return(k, PNWkTot)
598 |
599 |
600 |
601 |
602 | def cmM(k_min, k_max, N, b_nu, inputpkT):
603 | '''coefficients c_m, see eq.~ 4.2 - 4.5 at arXiv:2208.02791
604 |
605 | Args:
606 | kmin, kmax: minimal and maximal range of the wave-number k.
607 | N: number of sampling points (we recommend using N=128).
608 | b_nu: FFTLog bias (use b_nu = -0.1. Not yet tested for other values).
609 | inputpkT: k-coordinates and linear power spectrum.
610 | Returns:
611 | coefficients c_m (cosmological dependent terms)
612 | '''
613 | #define de zero matrices
614 | M = int(N/2)
615 | kBins = np.zeros(N)
616 | c_m = np.zeros(N+1, dtype = complex)
617 |
618 | #"kBins" trought "delta" gives logspaced k's in [k_min,k_max]
619 | for ii in range (N):
620 | delta = 1/(N-1) * np.log(k_max/k_min)
621 | kBins[ii] = k_min * np.exp((ii) * delta)
622 | f_kl = interp(kBins, inputpkT[0], inputpkT[1]) * (kBins/k_min)**(-b_nu)
623 |
624 | #F_m is the Discrete Fourier Transform (DFT) of f_kl
625 | #"forward" has the direct transforms scaled by 1/N (numpy version >= 1.20.0)
626 | F_m = np.fft.fft(f_kl, n = N, norm = "forward" )
627 |
628 | #etaT = bias_nu + i*eta_m
629 | #to get c_m: 1) reality condition, 2) W_m factor
630 | for ii in range(N+1):
631 | etaT = b_nu + (2*np.pi*1j/np.log(k_max/k_min)) * (ii - N/2) *(N-1)/(N)
632 | if (ii - M < 0):
633 | c_m[ii] = k_min**(-(etaT))*np.conj(F_m[-ii+M])
634 | c_m[ii] = k_min**(-(etaT)) * F_m[ii-M]
635 | c_m[0] = c_m[0]/2
636 | c_m[int(N)] = c_m[int(N)]/2
637 |
638 | return(c_m)
639 |
640 |
641 |
642 |
643 | def NonLinear(inputpkl, CosmoParams, kminout=0.001, kmaxout=0.5, nk = 120, EdSkernels = False):
644 | '''1-loop corrections to the linear power spectrum.
645 |
646 | Args:
647 | If 'EdSkernels = True' (default: 'False', fk-kernels), EdS-kernels will be employed.
648 | inputpkl: k-coordinates and linear power spectrum.
649 | CosmoParams: Set of cosmological parameters [z_pk, omega_b, omega_cdm, omega_ncdm, h] in that order.
650 | z_pk: redshift.
651 | omega_i = omega_i = Omega_i h², where i=baryons (b), CDM (cdm), massive neutrinos (ncdm).
652 | h = H0/100.
653 | Returns:
654 | list of 1-loop contributions for the wiggle and non-wiggle (also computed here) linear power spectra.
655 | '''
656 | global TableOut, TableOut_NW, f0, kTout, sigma2w, sigma2w_NW
657 |
658 | global z_pk, omega_b, omega_cdm, omega_ncdm, h
659 |
660 | #CosmoParams
661 | (z_pk, omega_b, omega_cdm, omega_ncdm, h) = CosmoParams
662 |
663 | k_min = 10**(-7); k_max = 100.
664 | b_nu = -0.1; #Not yet tested for other values
665 |
666 |
667 | #Extrapolates the linear power spectrum if needed.
668 | inputpkT = Extrapolate_inputpkl(inputpkl)
669 |
670 |
671 | ################################ KTOUT ###########################################
672 |
673 | #kminout = 0.001; kmaxout = 0.5;
674 |
675 | kTout = np.logspace(np.log10(kminout), np.log10(kmaxout), num=nk)
676 |
677 |
678 | ##################################################################################
679 |
680 | def P22type(kTout, inputpkT, inputpkTf, inputpkTff, M22matrices, k_min,
681 | k_max, N, b_nu):
682 |
683 | (M22_dd, M22_dt_fp, M22_tt_fpfp, M22_tt_fkmpfp, MtAfp_11, MtAfkmpfp_12,
684 | MtAfkmpfp_22, MtAfpfp_22, MtAfkmpfpfp_23, MtAfkmpfpfp_33, MB1_11, MC1_11,
685 | MB2_11, MC2_11, MD2_21, MD3_21, MD2_22, MD3_22, MD4_22, MPb1b2, MPb1bs2,
686 | MPb22, MPb2bs2, MPb2s2, MPb2t, MPbs2t) = M22matrices
687 |
688 | #matter coefficients
689 | cmT = cmM(k_min, k_max, N, b_nu, inputpkT)
690 | cmTf = cmM(k_min, k_max, N, b_nu, inputpkTf)
691 | cmTff = cmM(k_min, k_max, N, b_nu, inputpkTff)
692 |
693 | #biased tracers coefficients
694 | bnu_b = 15.1*b_nu
695 | cmT_b = cmM(k_min, k_max, N, bnu_b, inputpkT)
696 | cmTf_b = cmM(k_min, k_max, N, bnu_b, inputpkTf)
697 |
698 | #creating the zeros of P22
699 | #Ploop
700 | P22dd, P22dt, P22tt = map(np.zeros,3*(len(kTout),))
701 | #Bias
702 | Pb1b2, Pb1bs2, Pb22, Pb2bs2, Pb2s2, Pb2t, Pbs2t = map(np.zeros,7*(len(kTout),))
703 | #A-TNS
704 | I1udd_1b, I2uud_1b, I3uuu_3b, I2uud_2b, I3uuu_2b = map(np.zeros,5*(len(kTout),))
705 | #D-RSD
706 | I2uudd_1D, I2uudd_2D, I3uuud_2D, I3uuud_3D, I4uuuu_2D, I4uuuu_3D, I4uuuu_4D = map(np.zeros,7*(len(kTout),))
707 |
708 | #etaT = bias_nu + i*eta_m
709 | etamT = np.zeros(N+1, dtype = complex)
710 | etamT_b = np.zeros(N+1, dtype = complex)
711 | for jj in range(N+1):
712 | ietam = (2*np.pi*1j/np.log(k_max/k_min)) * (jj - N/2) *(N-1)/(N)
713 | etamT[jj] = b_nu + ietam
714 | etamT_b[jj] = bnu_b + ietam
715 |
716 | for ii in range(len(kTout)):
717 | K = kTout[ii]
718 | precvec = K**(etamT)
719 | vec = cmT * precvec
720 | vecf = cmTf * precvec
721 | vecff = cmTff * precvec
722 |
723 | precvec_b = K**(etamT_b)
724 | vec_b = cmT_b * precvec_b
725 | vecf_b = cmTf_b * precvec_b
726 |
727 | P22dd[ii] = (K**3 * vec @ M22_dd @ vec).real
728 | P22dt[ii] = (2*K**3 * vecf @ M22_dt_fp @ vec).real
729 | P22tt[ii] = K**3 *(vecff @ M22_tt_fpfp @ vec + vecf @ M22_tt_fkmpfp @ vecf).real
730 |
731 | Pb1b2[ii] = (K**3 * vec_b @ MPb1b2 @ vec_b).real
732 | Pb1bs2[ii] = (K**3 * vec_b @ MPb1bs2 @ vec_b).real
733 | Pb22[ii] = (K**3 * vec_b @ MPb22 @ vec_b).real
734 | Pb2bs2[ii] = (K**3 * vec_b @ MPb2bs2 @ vec_b).real
735 | Pb2s2[ii] = (K**3 * vec_b @ MPb2s2 @ vec_b).real
736 | Pb2t[ii] = (K**3 * vecf_b @ MPb2t @ vec_b).real
737 | Pbs2t[ii] = (K**3 * vecf_b @ MPbs2t @ vec_b).real
738 |
739 | I1udd_1b[ii] = (K**3 * vecf @ MtAfp_11 @ vec).real
740 | I2uud_1b[ii] = (K**3 * vecf @ MtAfkmpfp_12 @ vecf).real
741 | I3uuu_3b[ii] = (K**3 * vecff @ MtAfkmpfpfp_33 @ vecf).real
742 | I2uud_2b[ii] = K**3 * (vecf @ MtAfkmpfp_22 @ vecf + vecff @ MtAfpfp_22 @ vec).real
743 | I3uuu_2b[ii] = (K**3 * vecff @ MtAfkmpfpfp_23 @ vecf).real
744 |
745 | I2uudd_1D[ii] = K**3 * (vecf @ MB1_11 @ vecf + vec @ MC1_11 @ vecff).real
746 | I2uudd_2D[ii] = K**3 * (vecf @ MB2_11 @ vecf + vec @ MC2_11 @ vecff).real
747 | I3uuud_2D[ii] = (K**3 * vecf @ MD2_21 @ vecff).real
748 | I3uuud_3D[ii] = (K**3 * vecf @ MD3_21 @ vecff).real
749 | I4uuuu_2D[ii] = (K**3 * vecff @ MD2_22 @ vecff).real
750 | I4uuuu_3D[ii] = (K**3 * vecff @ MD3_22 @ vecff).real
751 | I4uuuu_4D[ii] = (K**3 * vecff @ MD4_22 @ vecff).real
752 |
753 | return (P22dd, P22dt, P22tt, Pb1b2, Pb1bs2, Pb22, Pb2bs2, Pb2s2,
754 | Pb2t, Pbs2t, I1udd_1b, I2uud_1b, I3uuu_3b, I2uud_2b,
755 | I3uuu_2b, I2uudd_1D, I2uudd_2D, I3uuud_2D, I3uuud_3D,
756 | I4uuuu_2D, I4uuuu_3D, I4uuuu_4D)
757 |
758 | def P13type(kTout, inputpkT, inputpkTf, inputpkTff, inputfkT, M13vectors,
759 | k_min, k_max, N, b_nu):
760 |
761 | (M13_dd, M13_dt_fk, M13_tt_fk, Mafk_11, Mafp_11, Mafkfp_12, Mafpfp_12,
762 | Mafkfkfp_33, Mafkfpfp_33, Msigma23) = M13vectors
763 |
764 |
765 | #condition for EdS-kernels or fk-kernels (default: fk-kernels)
766 | if EdSkernels == False:
767 | Fkoverf0 = interp(kTout, inputfkT[0], inputfkT[1])
768 | else:
769 | Fkoverf0 = np.full(len(kTout), 1.0)
770 |
771 |
772 | #matter coefficients
773 | cmT = cmM(k_min, k_max, N, b_nu, inputpkT)
774 | cmTf = cmM(k_min, k_max, N, b_nu, inputpkTf)
775 | cmTff = cmM(k_min, k_max, N, b_nu, inputpkTff)
776 |
777 | #biased tracers coefficients
778 | bnu_b = 15.1*b_nu
779 | cmT_b = cmM(k_min, k_max, N, bnu_b, inputpkT)
780 | cmTf_b = cmM(k_min, k_max, N, bnu_b, inputpkTf)
781 |
782 | #creating the zeros of P13
783 | #Ploop
784 | P13dd, P13dt, P13tt = map(np.zeros,3*(len(kTout),))
785 | #Bias
786 | sigma23 = np.zeros(len(kTout))
787 | #A-TNS
788 | I1udd_1a, I2uud_1a, I3uuu_3a = map(np.zeros,3*(len(kTout),))
789 |
790 | #etaT = bias_nu + i*eta_m
791 | etamT = np.zeros(N+1, dtype = complex)
792 | etamT_b = np.zeros(N+1, dtype = complex)
793 | for jj in range(N+1):
794 | ietam = (2*np.pi*1j/np.log(k_max/k_min)) * (jj - N/2) *(N-1)/(N)
795 | etamT[jj] = b_nu + ietam
796 | etamT_b[jj] = bnu_b + ietam
797 |
798 | sigma2psi = 1/(6 * np.pi**2) * scipy.integrate.simps(inputpkT[1], inputpkT[0])
799 | sigma2v = 1/(6 * np.pi**2) * scipy.integrate.simps(inputpkTf[1], inputpkTf[0])
800 | sigma2w = 1/(6 * np.pi**2) * scipy.integrate.simps(inputpkTff[1], inputpkTff[0])
801 |
802 | for ii in range(len(kTout)):
803 | K = kTout[ii]
804 | precvec = K**(etamT)
805 | vec = cmT * precvec
806 | vecf = cmTf * precvec
807 | vecff = cmTff * precvec
808 | vecfM13dt_fk = vecf @ M13_dt_fk
809 |
810 | precvec_b = K**(etamT_b)
811 | vec_b = cmT_b * precvec_b
812 | vecf_b = cmTf_b * precvec_b
813 |
814 | P13dd[ii] = (K**3 * vec @ M13_dd).real - 61/105 * K**2 * sigma2psi
815 | P13dt[ii] = 0.5 *(K**3 * (Fkoverf0[ii] * vec @ M13_dt_fk + vecfM13dt_fk)).real - (23/21*sigma2psi * Fkoverf0[ii] + 2/21*sigma2v)* K**2
816 | P13tt[ii] = (K**3 * Fkoverf0[ii] * (Fkoverf0[ii] * vec @ M13_tt_fk + vecfM13dt_fk ) ).real - (169/105*sigma2psi * Fkoverf0[ii] + 4/21 * sigma2v)* Fkoverf0[ii]* K**2
817 |
818 | sigma23[ii] = (K**3 * vec_b @ Msigma23).real
819 |
820 | I1udd_1a[ii] = K**3 * (Fkoverf0[ii] * vec @ Mafk_11 + vecf @ Mafp_11).real + (92/35*sigma2psi * Fkoverf0[ii] - 18/7*sigma2v)*K**2
821 | I2uud_1a[ii] = K**3 * (Fkoverf0[ii] * vecf @ Mafkfp_12 + vecff @ Mafpfp_12).real - (38/35*Fkoverf0[ii] *sigma2v + 2/7*sigma2w)*K**2
822 | I3uuu_3a[ii] = K**3 * Fkoverf0[ii] * (Fkoverf0[ii] * vecf @ Mafkfkfp_33 + vecff @ Mafkfpfp_33).real - (16/35*Fkoverf0[ii]*sigma2v + 6/7*sigma2w)*Fkoverf0[ii]*K**2
823 |
824 | return (P13dd, P13dt, P13tt, sigma23, I1udd_1a, I2uud_1a, I3uuu_3a)
825 |
826 |
827 | #Evaluation: f(k)/f0 and linear power spectrums
828 | h, OmM0, fnu, Massnu = CosmoParam(h, omega_b, omega_cdm, omega_ncdm)
829 | inputfkT = fOverf0EH(z_pk, inputpkT[0], OmM0, h, fnu)
830 | f0 = inputfkT[2]
831 |
832 |
833 |
834 | #condition for EdS-kernels or fk-kernels (default: fk-kernels)
835 | if EdSkernels == False:
836 | Fkoverf0 = interp(kTout, inputfkT[0], inputfkT[1])
837 | else:
838 | Fkoverf0 = np.full(len(kTout), 1.0)
839 |
840 |
841 |
842 | #Non-wiggle linear power spectrum
843 | inputpkT_NW = pknwJ(inputpkT[0], inputpkT[1], h)
844 |
845 |
846 | #condition for EdS-kernels or fk-kernels (default: fk-kernels)
847 | if EdSkernels == False:
848 |
849 | inputpkTf = (inputpkT[0], inputpkT[1]*inputfkT[1])
850 | inputpkTff = (inputpkT[0], inputpkT[1]*(inputfkT[1])**2)
851 |
852 | inputpkTf_NW = (inputpkT_NW[0], inputpkT_NW[1]*inputfkT[1])
853 | inputpkTff_NW = (inputpkT_NW[0], inputpkT_NW[1]*(inputfkT[1])**2)
854 |
855 | else:
856 | inputpkTf = (inputpkT[0], inputpkT[1])
857 | inputpkTff = (inputpkT[0], inputpkT[1])
858 |
859 | inputpkTf_NW = (inputpkT_NW[0], inputpkT_NW[1])
860 | inputpkTff_NW = (inputpkT_NW[0], inputpkT_NW[1])
861 |
862 |
863 |
864 | #P22type contributions
865 | P22 = P22type(kTout, inputpkT, inputpkTf, inputpkTff, M22matrices, k_min, k_max, N, b_nu)
866 | P22_NW = P22type(kTout, inputpkT_NW, inputpkTf_NW, inputpkTff_NW, M22matrices, k_min, k_max, N, b_nu)
867 |
868 | #P13type contributions
869 | P13overpkl = P13type(kTout, inputpkT, inputpkTf, inputpkTff, inputfkT, M13vectors, k_min, k_max, N, b_nu)
870 | P13overpkl_NW = P13type(kTout, inputpkT_NW, inputpkTf_NW, inputpkTff_NW, inputfkT, M13vectors, k_min, k_max, N, b_nu)
871 |
872 | #Computations for Table
873 | pk_l = np.interp(kTout, inputpkT[0], inputpkT[1])
874 | pk_l_NW = np.interp(kTout,inputpkT_NW[0], inputpkT_NW[1])
875 |
876 |
877 | sigma2w = 1/(6 * np.pi**2) * scipy.integrate.simps(inputpkTff[1], inputpkTff[0])
878 | sigma2w_NW = 1/(6 * np.pi**2) * scipy.integrate.simps(inputpkTff_NW[1], inputpkTff_NW[0])
879 |
880 | Ploop_dd = P22[0] + P13overpkl[0]*pk_l
881 | Ploop_dt = P22[1] + P13overpkl[1]*pk_l
882 | Ploop_tt = P22[2] + P13overpkl[2]*pk_l
883 |
884 | Pb1b2 = P22[3];
885 | Pb1bs2 = P22[4];
886 | Pb22 = P22[5]-interp(10**(-10), kTout, P22[5]);
887 | Pb2bs2 = P22[6]-interp(10**(-10), kTout, P22[6]);
888 | Pb2s2 = P22[7]-interp(10**(-10), kTout, P22[7]);
889 | sigma23pkl = P13overpkl[3]*pk_l
890 | Pb2t = P22[8];
891 | Pbs2t = P22[9];
892 |
893 | I1udd_1 = P13overpkl[4]*pk_l + P22[10];
894 | I2uud_1 = P13overpkl[5]*pk_l + P22[11];
895 | I2uud_2 = (P13overpkl[6]*pk_l)/Fkoverf0 + Fkoverf0*P13overpkl[4]*pk_l + P22[13];
896 | I3uuu_2 = Fkoverf0*P13overpkl[5]*pk_l + P22[14];
897 | I3uuu_3 = P13overpkl[6]*pk_l + P22[12];
898 |
899 | I2uudd_1D = P22[15]; I2uudd_2D = P22[16]; I3uuud_2D = P22[17];
900 | I3uuud_3D = P22[18]; I4uuuu_2D = P22[19]; I4uuuu_3D = P22[20];
901 | I4uuuu_4D = P22[21];
902 |
903 | TableOut = (kTout, pk_l, Fkoverf0, Ploop_dd, Ploop_dt, Ploop_tt,
904 | Pb1b2, Pb1bs2, Pb22, Pb2bs2, Pb2s2, sigma23pkl, Pb2t, Pbs2t,
905 | I1udd_1, I2uud_1, I2uud_2, I3uuu_2, I3uuu_3, I2uudd_1D,
906 | I2uudd_2D, I3uuud_2D, I3uuud_3D, I4uuuu_2D, I4uuuu_3D,
907 | I4uuuu_4D, f0, sigma2w)
908 |
909 |
910 | ######################## Non- Wiggle ########################################
911 |
912 | Ploop_dd_NW = P22_NW[0] + P13overpkl_NW[0]*pk_l_NW;
913 | Ploop_dt_NW = P22_NW[1] + P13overpkl_NW[1]*pk_l_NW;
914 | Ploop_tt_NW = P22_NW[2] + P13overpkl_NW[2]*pk_l_NW;
915 |
916 | Pb1b2_NW = P22_NW[3];
917 | Pb1bs2_NW = P22_NW[4];
918 | Pb22_NW = P22_NW[5]-interp(10**(-10), kTout, P22_NW[5]);
919 | Pb2bs2_NW = P22_NW[6]-interp(10**(-10), kTout, P22_NW[6]);
920 | Pb2s2_NW = P22_NW[7]-interp(10**(-10), kTout, P22_NW[7]);
921 | sigma23pkl_NW = P13overpkl_NW[3]*pk_l_NW;
922 | Pb2t_NW = P22_NW[8];
923 | Pbs2t_NW = P22_NW[9];
924 |
925 | I1udd_1_NW = P13overpkl_NW[4]*pk_l_NW + P22_NW[10];
926 | I2uud_1_NW = P13overpkl_NW[5]*pk_l_NW + P22_NW[11];
927 | I2uud_2_NW = (P13overpkl_NW[6]*pk_l_NW)/Fkoverf0 + Fkoverf0*P13overpkl_NW[4]*pk_l_NW + P22_NW[13];
928 | I3uuu_2_NW = Fkoverf0*P13overpkl_NW[5]*pk_l_NW + P22_NW[14];
929 | I3uuu_3_NW = P13overpkl_NW[6]*pk_l_NW + P22_NW[12];
930 |
931 | I2uudd_1D_NW = P22_NW[15]; I2uudd_2D_NW = P22_NW[16]; I3uuud_2D_NW = P22_NW[17];
932 | I3uuud_3D_NW = P22_NW[18]; I4uuuu_2D_NW = P22_NW[19]; I4uuuu_3D_NW = P22_NW[20];
933 | I4uuuu_4D_NW = P22_NW[21];
934 |
935 |
936 | TableOut_NW = (kTout, pk_l_NW, Fkoverf0, Ploop_dd_NW, Ploop_dt_NW, Ploop_tt_NW,
937 | Pb1b2_NW, Pb1bs2_NW, Pb22_NW, Pb2bs2_NW, Pb2s2_NW, sigma23pkl_NW,
938 | Pb2t_NW, Pbs2t_NW, I1udd_1_NW, I2uud_1_NW, I2uud_2_NW, I3uuu_2_NW,
939 | I3uuu_3_NW, I2uudd_1D_NW, I2uudd_2D_NW, I3uuud_2D_NW, I3uuud_3D_NW,
940 | I4uuuu_2D_NW, I4uuuu_3D_NW, I4uuuu_4D_NW, f0, sigma2w_NW)
941 |
942 | return (TableOut, TableOut_NW)
943 |
944 |
945 |
946 |
947 | def TableOut_interp(k):
948 | '''Interpolation of non-linear terms given by the wiggle power spectra.
949 |
950 | Args:
951 | k: wave-number.
952 | Returns:
953 | Interpolates the non-linear terms given by the wiggle power spectra.
954 | '''
955 | nobjects = 25
956 | Tableout = np.zeros((nobjects + 1, len(k)))
957 | for ii in range(nobjects):
958 | Tableout[ii][:] = interp(k, kTout, TableOut[1+ii])
959 | Tableout[25][:] = sigma2w
960 | return Tableout
961 |
962 |
963 |
964 |
965 | def TableOut_NW_interp(k):
966 | '''Interpolation of non-linear terms given by the non-wiggle power spectra.
967 |
968 | Args:
969 | k: wave-number.
970 | Returns:
971 | Interpolates the non-linear terms given by the non-wiggle power spectra.
972 | '''
973 | nobjects = 25
974 | Tableout_NW = np.zeros((nobjects + 1, len(k)))
975 | for ii in range(nobjects):
976 | Tableout_NW[ii][:] = interp(k, kTout, TableOut_NW[1+ii])
977 | Tableout_NW[25][:] = sigma2w_NW
978 | return Tableout_NW
979 |
980 |
981 |
982 |
983 | def PEFTs(kev, mu, NuisanParams, Table):
984 | '''EFT galaxy power spectrum, Eq. ~ 3.40 at arXiv: 2208.02791.
985 |
986 | Args:
987 | kev: evaluation points (wave-number coordinates).
988 | mu: cosine angle between the wave-vector ‘\vec{k}’ and the line-of-sight direction ‘\hat{n}’.
989 | NuisamParams: set of nuisance parameters [b1, b2, bs2, b3nl, alpha0, alpha2, alpha4, ctilde,
990 | alphashot0, alphashot2, PshotP] in that order.
991 | b1, b2, bs2, b3nl: biasing parameters.
992 | alpha0, alpha2, alpha4: EFT parameters.
993 | ctilde: parameter for NL0 ∝ Kaiser power spectrum.
994 | alphashot0, alphashot2, PshotP: stochastic noise parameters.
995 | Table: List of non-linear terms given by the wiggle or non-wiggle power spectra.
996 | Returns:
997 | EFT galaxy power spectrum in redshift space.
998 | '''
999 |
1000 | #NuisanParams
1001 | (b1, b2, bs2, b3nl, alpha0, alpha2, alpha4,
1002 | ctilde, alphashot0, alphashot2, PshotP) = NuisanParams
1003 |
1004 | #Table
1005 | (pkl, Fkoverf0, Ploop_dd, Ploop_dt, Ploop_tt, Pb1b2, Pb1bs2, Pb22, Pb2bs2,
1006 | Pb2s2, sigma23pkl, Pb2t, Pbs2t, I1udd_1, I2uud_1, I2uud_2, I3uuu_2, I3uuu_3,
1007 | I2uudd_1D, I2uudd_2D, I3uuud_2D, I3uuud_3D, I4uuuu_2D, I4uuuu_3D, I4uuuu_4D, sigma2w) = Table
1008 |
1009 | fk = Fkoverf0*f0
1010 |
1011 | #linear power spectrum
1012 | Pdt_L = pkl*Fkoverf0; Ptt_L = pkl*Fkoverf0**2;
1013 |
1014 | #one-loop power spectrum
1015 | Pdd = pkl + Ploop_dd; Pdt = Pdt_L + Ploop_dt; Ptt = Ptt_L + Ploop_tt;
1016 |
1017 |
1018 | #biasing
1019 | def PddXloop(b1, b2, bs2, b3nl):
1020 | return (b1**2 * Ploop_dd + 2*b1*b2*Pb1b2 + 2*b1*bs2*Pb1bs2 + b2**2 * Pb22
1021 | + 2*b2*bs2*Pb2bs2 + bs2**2 *Pb2s2 + 2*b1*b3nl*sigma23pkl)
1022 |
1023 | def PdtXloop(b1, b2, bs2, b3nl):
1024 | return b1*Ploop_dt + b2*Pb2t + bs2*Pbs2t + b3nl*Fkoverf0*sigma23pkl
1025 |
1026 | def PttXloop(b1, b2, bs2, b3nl):
1027 | return Ploop_tt
1028 |
1029 | #RSD functions
1030 | def Af(mu, f0):
1031 | return (f0*mu**2 * I1udd_1 + f0**2 * (mu**2 * I2uud_1 + mu**4 * I2uud_2)
1032 | + f0**3 * (mu**4 * I3uuu_2 + mu**6 * I3uuu_3))
1033 |
1034 | def Df(mu, f0):
1035 | return (f0**2 * (mu**2 * I2uudd_1D + mu**4 * I2uudd_2D)
1036 | + f0**3 * (mu**4 * I3uuud_2D + mu**6 * I3uuud_3D)
1037 | + f0**4 * (mu**4 * I4uuuu_2D + mu**6 * I4uuuu_3D + mu**8 * I4uuuu_4D))
1038 |
1039 |
1040 | #Introducing bias in RSD functions, eq.~ A.32 & A.33 at arXiv: 2208.02791
1041 | def ATNS(mu, b1):
1042 | return b1**3 * Af(mu, f0/b1)
1043 |
1044 | def DRSD(mu, b1):
1045 | return b1**4 * Df(mu, f0/b1)
1046 |
1047 | def GTNS(mu, b1):
1048 | return -((kev*mu*f0)**2 *sigma2w*(b1**2 * pkl + 2*b1*f0*mu**2 * Pdt_L
1049 | + f0**2 * mu**4 * Ptt_L))
1050 |
1051 |
1052 | #One-loop SPT power spectrum in redshift space
1053 | def PloopSPTs(mu, b1, b2, bs2, b3nl):
1054 | return (PddXloop(b1, b2, bs2, b3nl) + 2*f0*mu**2 * PdtXloop(b1, b2, bs2, b3nl)
1055 | + mu**4 * f0**2 * PttXloop(b1, b2, bs2, b3nl) + ATNS(mu, b1) + DRSD(mu, b1)
1056 | + GTNS(mu, b1))
1057 |
1058 |
1059 | #Linear Kaiser power spectrum
1060 | def PKaiserLs(mu, b1):
1061 | return (b1 + mu**2 * fk)**2 * pkl
1062 |
1063 | def PctNLOs(mu, b1, ctilde):
1064 | return ctilde*(mu*kev*f0)**4 * sigma2w**2 * PKaiserLs(mu, b1)
1065 |
1066 | # EFT counterterms
1067 | def Pcts(mu, alpha0, alpha2, alpha4):
1068 | return (alpha0 + alpha2 * mu**2 + alpha4 * mu**4)*kev**2 * pkl
1069 |
1070 | #Stochastics noise
1071 | def Pshot(mu, alphashot0, alphashot2, PshotP):
1072 | return PshotP*(alphashot0 + alphashot2 * (kev*mu)**2)
1073 |
1074 | return (PloopSPTs(mu, b1, b2, bs2, b3nl) + Pcts(mu, alpha0, alpha2, alpha4)
1075 | + PctNLOs(mu, b1, ctilde) + Pshot(mu, alphashot0, alphashot2, PshotP))
1076 |
1077 |
1078 |
1079 |
1080 | def Sigma2Total(kev, mu, Table_NW):
1081 | '''Sigma² tot for IR-resummations, see eq.~ 3.59 at arXiv:2208.02791
1082 |
1083 | Args:
1084 | kev: evaluation points (wave-number coordinates).
1085 | mu: cosine angle between the wave-vector ‘\vec{k}’ and the line-of-sight direction ‘\hat{n}’.
1086 | Table_NW: List of non-linear terms given by the non-wiggle power spectra.
1087 | Returns:
1088 | Sigma² tot for IR-resummations.
1089 | '''
1090 | kT = kev; pkl_NW = Table_NW[0];
1091 |
1092 | kinit = 10**(-6); kS = 0.4; #integration limits
1093 | pT = np.logspace(np.log10(kinit),np.log10(kS), num = 10**2) #integration range
1094 |
1095 | PSL_NW = interp(pT, kT, pkl_NW)
1096 | k_BAO = 1/104 #BAO scale
1097 |
1098 | Sigma2 = 1/(6 * np.pi**2)*scipy.integrate.simps(PSL_NW*(1 - spherical_jn(0, pT/k_BAO)
1099 | + 2*spherical_jn(2, pT/k_BAO)), pT)
1100 |
1101 | deltaSigma2 = 1/(2 * np.pi**2)*scipy.integrate.simps(PSL_NW*spherical_jn(2, pT/k_BAO), pT)
1102 |
1103 | def Sigma2T(mu):
1104 | return (1 + f0*mu**2 *(2 + f0))*Sigma2 + (f0*mu)**2 * (mu**2 - 1)* deltaSigma2
1105 |
1106 | return Sigma2T(mu)
1107 |
1108 |
1109 |
1110 |
1111 | def k_AP(k_obs, mu_obs, qperp, qpar):
1112 | '''True ‘k’ coordinates.
1113 |
1114 | Args: where ‘_obs’ denote quantities that are observed assuming the reference (fiducial) cosmology.
1115 | k_obs: observed wave-number.
1116 | mu_obs: observed cosine angle between the wave-vector ‘\vec{k}’ and the line-of-sight direction ‘\hat{n}’.
1117 | qperp, qpar: AP parameters.
1118 | Returns:
1119 | True wave-number ‘k_AP’.
1120 | '''
1121 | F = qpar/qperp
1122 | return (k_obs/qperp)*(1 + mu_obs**2 * (1./F**2 - 1))**(0.5)
1123 |
1124 |
1125 |
1126 |
1127 | def mu_AP(mu_obs, qperp, qpar):
1128 | '''True ‘mu’ coordinates.
1129 |
1130 | Args: where ‘_obs’ denote quantities that are observed assuming the reference (fiducial) cosmology.
1131 | mu_obs: observed cosine angle between the wave-vector ‘\vec{k}’ and the line-of-sight direction ‘\hat{n}’.
1132 | qperp, qpar: AP parameters.
1133 | Returns:
1134 | True ‘mu_AP’.
1135 | '''
1136 | F = qpar/qperp
1137 | return (mu_obs/F) * (1 + mu_obs**2 * (1/F**2 - 1))**(-0.5)
1138 |
1139 |
1140 |
1141 |
1142 | def Hubble(Om, z_ev):
1143 | '''Hubble parameter.
1144 |
1145 | Args:
1146 | Om: Omega_b + Omega_c + Omega_nu (dimensionless matter density parameter).
1147 | z_ev: redshift of evaluation.
1148 | Returns:
1149 | Hubble parameter.
1150 | '''
1151 | return ((Om) * (1 + z_ev)**3. + (1 - Om))**0.5
1152 |
1153 |
1154 |
1155 |
1156 | def DA(Om, z_ev):
1157 | '''Angular-diameter distance.
1158 |
1159 | Args:
1160 | Om: Omega_b + Omega_c + Omega_nu (dimensionless matter density parameter).
1161 | z_ev: redshift of evaluation.
1162 | Returns:
1163 | Angular diameter distance.
1164 | '''
1165 | r = quad(lambda x: 1. / Hubble(Om, x), 0, z_ev)[0]
1166 | return r / (1 + z_ev)
1167 |
1168 |
1169 |
1170 |
1171 | def Table_interp(k, kev, Table):
1172 | '''Cubic interpolator.
1173 |
1174 | Args:
1175 | k: coordinates at which to evaluate the interpolated values.
1176 | kev: x-coordinates of the data points.
1177 | Table: list of 1-loop contributions for the wiggle and non-wiggle
1178 | '''
1179 | f = interpolate.interp1d(kev, Table, kind = 'cubic', fill_value = "extrapolate")
1180 | Tableout = f(k)
1181 |
1182 | return Tableout
1183 |
1184 |
1185 |
1186 |
1187 | def RSDmultipoles(kev, NuisanParams, Omfid = -1, AP = False):
1188 | '''Redshift space power spectrum multipoles.
1189 |
1190 | Args:
1191 | If 'AP=True' (default: 'False') the code perform the AP test.
1192 | If 'AP=True'. Include the fiducial Omfid after ‘NuisanParams’.
1193 |
1194 | kev: wave-number coordinates of evaluation.
1195 | NuisamParams: set of nuisance parameters [b1, b2, bs2, b3nl, alpha0, alpha2, alpha4, ctilde, alphashot0,
1196 | alphashot2, PshotP] in that order.
1197 | b1, b2, bs2, b3nl: biasing parameters.
1198 | alpha0, alpha2, alpha4: EFT parameters.
1199 | ctilde: parameter for NL0 ∝ Kaiser power spectrum.
1200 | alphashot0, alphashot2, PshotP: stochastic noise parameters.
1201 | Returns:
1202 | Redshift space power spectrum multipoles (monopole, quadrupole and hexadecapole) at 'kev'.
1203 | '''
1204 |
1205 | #NuisanParams
1206 | (b1, b2, bs2, b3nl, alpha0, alpha2, alpha4,
1207 | ctilde, alphashot0, alphashot2, PshotP) = NuisanParams
1208 |
1209 | if AP == True and Omfid == -1:
1210 | sys.exit("Introduce the fiducial value of the dimensionless matter density parameter as ‘Omfid = value’.")
1211 |
1212 | if AP == True and Omfid > 0:
1213 |
1214 | #Om computed for any cosmology
1215 | OmM = CosmoParam(h, omega_b, omega_cdm, omega_ncdm)[1]
1216 |
1217 | #qperp, qpar: AP parameters.
1218 | qperp = DA(OmM, z_pk)/DA(Omfid, z_pk)
1219 | qpar = Hubble(Omfid, z_pk)/Hubble(OmM, z_pk)
1220 |
1221 |
1222 | def PIRs(kev, mu, Table, Table_NW):
1223 |
1224 | if AP == True:
1225 |
1226 | k_true = k_AP(kev, mu, qperp, qpar)
1227 | mu_true = mu_AP(mu, qperp, qpar)
1228 |
1229 | Table_true = Table_interp(k_true, kev, Table)
1230 | Table_NW_true = Table_interp(k_true, kev, Table_NW)
1231 |
1232 | Sigma2T = Sigma2Total(k_true, mu_true, Table_NW_true)
1233 |
1234 | Fkoverf0 = Table_true[1]; fk = Fkoverf0*f0
1235 | pkl = Table_true[0]; pkl_NW = Table_NW_true[0];
1236 |
1237 |
1238 | return ((b1 + fk * mu_true**2)**2 * (pkl_NW + np.exp(-k_true**2 * Sigma2T)*(pkl-pkl_NW)*(1 + k_true**2 * Sigma2T) )
1239 | + np.exp(-k_true**2 * Sigma2T)*PEFTs(k_true, mu_true, NuisanParams, Table_true)
1240 | + (1 - np.exp(-k_true**2 * Sigma2T))*PEFTs(k_true, mu_true, NuisanParams, Table_NW_true))
1241 |
1242 | else:
1243 |
1244 | k = kev; Fkoverf0 = Table[1]; fk = Fkoverf0*f0
1245 | pkl = Table[0]; pkl_NW = Table_NW[0];
1246 | Sigma2T = Sigma2Total(kev, mu, Table_NW)
1247 |
1248 | return ((b1 + fk * mu**2)**2 * (pkl_NW + np.exp(-k**2 * Sigma2T)*(pkl-pkl_NW)*(1 + k**2 * Sigma2T) )
1249 | + np.exp(-k**2 * Sigma2T)*PEFTs(k, mu, NuisanParams, Table)
1250 | + (1 - np.exp(-k**2 * Sigma2T))*PEFTs(k, mu, NuisanParams, Table_NW))
1251 |
1252 |
1253 | if AP == True:
1254 |
1255 | Nx = 8 #Points
1256 | xGL, wGL = scipy.special.roots_legendre(Nx) #x=cosθ and weights
1257 |
1258 | def ModelPkl0(Table, Table_NW):
1259 | monop = 0;
1260 | for ii in range(Nx):
1261 | monop = monop + 0.5/(qperp**2 * qpar)*wGL[ii]*PIRs(kev, xGL[ii], Table, Table_NW)
1262 | return monop
1263 |
1264 | def ModelPkl2(Table, Table_NW):
1265 | quadrup = 0;
1266 | for ii in range(Nx):
1267 | quadrup = quadrup + 5/(2*qperp**2 * qpar)*wGL[ii]*PIRs(kev, xGL[ii], Table, Table_NW)*eval_legendre(2, xGL[ii])
1268 | return quadrup
1269 |
1270 | def ModelPkl4(Table, Table_NW):
1271 | hexadecap = 0;
1272 | for ii in range(Nx):
1273 | hexadecap = hexadecap + 9/(2*qperp**2 * qpar)*wGL[ii]*PIRs(kev, xGL[ii], Table, Table_NW)*eval_legendre(4, xGL[ii])
1274 | return hexadecap
1275 |
1276 | else:
1277 |
1278 | Nx = 8 #Points
1279 | xGL, wGL = scipy.special.roots_legendre(Nx) #x=cosθ and weights
1280 |
1281 | def ModelPkl0(Table, Table_NW):
1282 | monop = 0;
1283 | for ii in range(Nx):
1284 | monop = monop + 0.5*wGL[ii]*PIRs(kev, xGL[ii], Table, Table_NW)
1285 | return monop
1286 |
1287 | def ModelPkl2(Table, Table_NW):
1288 | quadrup = 0;
1289 | for ii in range(Nx):
1290 | quadrup = quadrup + 5/2*wGL[ii]*PIRs(kev, xGL[ii], Table, Table_NW)*eval_legendre(2, xGL[ii])
1291 | return quadrup
1292 |
1293 | def ModelPkl4(Table, Table_NW):
1294 | hexadecap = 0;
1295 | for ii in range(Nx):
1296 | hexadecap = hexadecap + 9/2*wGL[ii]*PIRs(kev, xGL[ii], Table, Table_NW)*eval_legendre(4, xGL[ii])
1297 | return hexadecap
1298 |
1299 |
1300 | Pkl0 = ModelPkl0(TableOut_interp(kev), TableOut_NW_interp(kev));
1301 | Pkl2 = ModelPkl2(TableOut_interp(kev), TableOut_NW_interp(kev));
1302 | Pkl4 = ModelPkl4(TableOut_interp(kev), TableOut_NW_interp(kev));
1303 |
1304 | #print('Redshift space power spectrum multipoles have been computed')
1305 | #print('')
1306 | #print('All computations have been performed successfully ')
1307 |
1308 | return (kev, Pkl0, Pkl2, Pkl4)
1309 |
1310 |
1311 |
1312 |
1313 | def RSDmultipoles_marginalized_const(kev, NuisanParams, Omfid = -1, AP = False, Hexa = False):
1314 | '''Redshift space power spectrum multipoles 'const': Pℓ,const
1315 | (α->0, marginalizing over the EFT and stochastic parameters).
1316 |
1317 | Args:
1318 | If 'AP=True' (default: 'False') the code perform the AP test.
1319 | If 'AP=True'. Include the fiducial Omfid after ‘NuisanParams’.
1320 | If 'Hexa = True' (default: 'False') the code includes the hexadecapole.
1321 |
1322 | kev: wave-number coordinates of evaluation.
1323 | NuisamParams: set of nuisance parameters [b1, b2, bs2, b3nl, alpha0, alpha2, alpha4, ctilde, alphashot0,
1324 | alphashot2, PshotP] in that order.
1325 | b1, b2, bs2, b3nl: biasing parameters.
1326 | alpha0, alpha2, alpha4: EFT parameters.
1327 | ctilde: parameter for NL0 ∝ Kaiser power spectrum.
1328 | alphashot0, alphashot2, PshotP: stochastic noise parameters.
1329 | Returns:
1330 | Redshift space power spectrum multipoles (monopole, quadrupole and hexadecapole) at 'kev'.
1331 | '''
1332 |
1333 | #NuisanParams
1334 | (b1, b2, bs2, b3nl, alpha0, alpha2, alpha4,
1335 | ctilde, alphashot0, alphashot2, PshotP) = NuisanParams
1336 |
1337 | if AP == True and Omfid == -1:
1338 | sys.exit("Introduce the fiducial value of the dimensionless matter density parameter as ‘Omfid = value’.")
1339 |
1340 | if AP == True and Omfid > 0:
1341 |
1342 | #Om computed for any cosmology
1343 | OmM = CosmoParam(h, omega_b, omega_cdm, omega_ncdm)[1]
1344 |
1345 | #qperp, qpar: AP parameters.
1346 | qperp = DA(OmM, z_pk)/DA(Omfid, z_pk)
1347 | qpar = Hubble(Omfid, z_pk)/Hubble(OmM, z_pk)
1348 |
1349 |
1350 | def PIRs_const(kev, mu, Table, Table_NW):
1351 |
1352 | #NuisanParams_const: α->0 (set to zero EFT and stochastic parameters)
1353 | alpha0, alpha2, alpha4, alphashot0, alphashot2 = np.zeros(5)
1354 |
1355 | NuisanParams_const = (b1, b2, bs2, b3nl, alpha0, alpha2, alpha4,
1356 | ctilde, alphashot0, alphashot2, PshotP)
1357 |
1358 |
1359 | if AP == True:
1360 |
1361 | k_true = k_AP(kev, mu, qperp, qpar)
1362 | mu_true = mu_AP(mu, qperp, qpar)
1363 |
1364 | Table_true = Table_interp(k_true, kev, Table)
1365 | Table_NW_true = Table_interp(k_true, kev, Table_NW)
1366 |
1367 | Sigma2T = Sigma2Total(k_true, mu_true, Table_NW_true)
1368 |
1369 | Fkoverf0 = Table_true[1]; fk = Fkoverf0*f0
1370 | pkl = Table_true[0]; pkl_NW = Table_NW_true[0];
1371 |
1372 |
1373 | return ((b1 + fk * mu_true**2)**2 * (pkl_NW + np.exp(-k_true**2 * Sigma2T)*(pkl-pkl_NW)*(1 + k_true**2 * Sigma2T) )
1374 | + np.exp(-k_true**2 * Sigma2T)*PEFTs(k_true, mu_true, NuisanParams_const, Table_true)
1375 | + (1 - np.exp(-k_true**2 * Sigma2T))*PEFTs(k_true, mu_true, NuisanParams_const, Table_NW_true))
1376 |
1377 |
1378 | else:
1379 |
1380 | k = kev; Fkoverf0 = Table[1]; fk = Fkoverf0*f0
1381 | pkl = Table[0]; pkl_NW = Table_NW[0];
1382 | Sigma2T = Sigma2Total(kev, mu, Table_NW)
1383 |
1384 | return ((b1 + fk * mu**2)**2 * (pkl_NW + np.exp(-k**2 * Sigma2T)*(pkl-pkl_NW)*(1 + k**2 * Sigma2T) )
1385 | + np.exp(-k**2 * Sigma2T)*PEFTs(k, mu, NuisanParams_const, Table)
1386 | + (1 - np.exp(-k**2 * Sigma2T))*PEFTs(k, mu, NuisanParams_const, Table_NW))
1387 |
1388 |
1389 | Nx = 8 #Points
1390 | xGL, wGL = scipy.special.roots_legendre(Nx) #x=cosθ and weights
1391 |
1392 | def ModelPkl0_const(Table, Table_NW):
1393 | if AP == True:
1394 | monop = 1/(qperp**2 * qpar) * sum(0.5*wGL[ii]*PIRs_const(kev, xGL[ii], Table, Table_NW) for ii in range(Nx))
1395 | return monop
1396 | else:
1397 | monop = sum(0.5*wGL[ii]*PIRs_const(kev, xGL[ii], Table, Table_NW) for ii in range(Nx))
1398 | return monop
1399 |
1400 |
1401 | def ModelPkl2_const(Table, Table_NW):
1402 | if AP == True:
1403 | quadrup = 1/(qperp**2 * qpar) * sum(5/2*wGL[ii]*PIRs_const(kev, xGL[ii], Table, Table_NW)*eval_legendre(2, xGL[ii]) for ii in range(Nx))
1404 | return quadrup
1405 | else:
1406 | quadrup = sum(5/2*wGL[ii]*PIRs_const(kev, xGL[ii], Table, Table_NW)*eval_legendre(2, xGL[ii]) for ii in range(Nx))
1407 | return quadrup
1408 |
1409 |
1410 | def ModelPkl4_const(Table, Table_NW):
1411 | if AP == True:
1412 | hexadecap = 1/(qperp**2 * qpar) * sum(9/2*wGL[ii]*PIRs_const(kev, xGL[ii], Table, Table_NW)*eval_legendre(4, xGL[ii]) for ii in range(Nx))
1413 | return hexadecap
1414 | else:
1415 | hexadecap = sum(9/2*wGL[ii]*PIRs_const(kev, xGL[ii], Table, Table_NW)*eval_legendre(4, xGL[ii]) for ii in range(Nx))
1416 | return hexadecap
1417 |
1418 |
1419 | if Hexa == False:
1420 | Pkl0_const = ModelPkl0_const(TableOut_interp(kev), TableOut_NW_interp(kev));
1421 | Pkl2_const = ModelPkl2_const(TableOut_interp(kev), TableOut_NW_interp(kev));
1422 | return (Pkl0_const, Pkl2_const)
1423 |
1424 | else:
1425 | Pkl0_const = ModelPkl0_const(TableOut_interp(kev), TableOut_NW_interp(kev));
1426 | Pkl2_const = ModelPkl2_const(TableOut_interp(kev), TableOut_NW_interp(kev));
1427 | Pkl4_const = ModelPkl4_const(TableOut_interp(kev), TableOut_NW_interp(kev));
1428 | return (Pkl0_const, Pkl2_const, Pkl4_const)
1429 |
1430 |
1431 |
1432 |
1433 | def PEFTs_derivatives(k, mu, pkl, PshotP):
1434 | '''Derivatives of PEFTs with respect to the EFT and stochastic parameters.
1435 |
1436 | Args:
1437 | k: wave-number coordinates of evaluation.
1438 | mu: cosine angle between the wave-vector ‘\vec{k}’ and the line-of-sight direction ‘\hat{n}’.
1439 | pkl: linear power spectrum.
1440 | PshotP: stochastic nuisance parameter.
1441 | Returns:
1442 | ∂P_EFTs/∂α_i with: α_i = {alpha0, alpha2, alpha4, alphashot0, alphashot2}
1443 | '''
1444 |
1445 | k2 = k**2
1446 | k2mu2 = k2 * mu**2
1447 | k2mu4 = k2mu2 * mu**2
1448 |
1449 | PEFTs_alpha0 = k2 * pkl
1450 | PEFTs_alpha2 = k2mu2 * pkl
1451 | PEFTs_alpha4 = k2mu4 * pkl
1452 | PEFTs_alphashot0 = PshotP
1453 | PEFTs_alphashot2 = k2mu2 * PshotP
1454 |
1455 | return (PEFTs_alpha0, PEFTs_alpha2, PEFTs_alpha4, PEFTs_alphashot0, PEFTs_alphashot2)
1456 |
1457 |
1458 |
1459 |
1460 | def RSDmultipoles_marginalized_derivatives(kev, NuisanParams, Omfid = -1, AP = False, Hexa = False):
1461 | '''Redshift space power spectrum multipoles 'derivatives': Pℓ,i=∂Pℓ/∂α_i
1462 | (derivatives with respect to the EFT and stochastic parameters).
1463 |
1464 | Args:
1465 | If 'AP=True' (default: 'False') the code perform the AP test.
1466 | If 'AP=True'. Include the fiducial Omfid after ‘NuisanParams’.
1467 | If 'Hexa = True' (default: 'False') the code includes the hexadecapole.
1468 |
1469 | kev: wave-number coordinates of evaluation.
1470 | NuisamParams: set of nuisance parameters [b1, b2, bs2, b3nl, alpha0, alpha2, alpha4, ctilde, alphashot0,
1471 | alphashot2, PshotP] in that order.
1472 | b1, b2, bs2, b3nl: biasing parameters.
1473 | alpha0, alpha2, alpha4: EFT parameters.
1474 | ctilde: parameter for NL0 ∝ Kaiser power spectrum.
1475 | alphashot0, alphashot2, PshotP: stochastic noise parameters.
1476 | Returns:
1477 | Redshift space power spectrum multipoles (monopole, quadrupole and hexadecapole) at 'kev'.
1478 | '''
1479 |
1480 | #NuisanParams
1481 | (b1, b2, bs2, b3nl, alpha0, alpha2, alpha4,
1482 | ctilde, alphashot0, alphashot2, PshotP) = NuisanParams
1483 |
1484 | if AP == True and Omfid == -1:
1485 | sys.exit("Introduce the fiducial value of the dimensionless matter density parameter as ‘Omfid = value’.")
1486 |
1487 | if AP == True and Omfid > 0:
1488 |
1489 | #Om computed for any cosmology
1490 | OmM = CosmoParam(h, omega_b, omega_cdm, omega_ncdm)[1]
1491 |
1492 | #qperp, qpar: AP parameters.
1493 | qperp = DA(OmM, z_pk)/DA(Omfid, z_pk)
1494 | qpar = Hubble(Omfid, z_pk)/Hubble(OmM, z_pk)
1495 |
1496 |
1497 | def PIRs_derivatives(kev, mu, Table, Table_NW):
1498 |
1499 | if AP == True:
1500 |
1501 | k_true = k_AP(kev, mu, qperp, qpar)
1502 | mu_true = mu_AP(mu, qperp, qpar)
1503 |
1504 | Table_true = Table_interp(k_true, kev, Table)
1505 | Table_NW_true = Table_interp(k_true, kev, Table_NW)
1506 |
1507 | Sigma2T = Sigma2Total(k_true, mu_true, Table_NW_true)
1508 |
1509 | Fkoverf0 = Table_true[1]; fk = Fkoverf0*f0
1510 | pkl = Table_true[0]; pkl_NW = Table_NW_true[0];
1511 |
1512 | #computing PEFTs_derivatives: wiggle and non-wiggle terms
1513 | PEFTs_alpha0, PEFTs_alpha2, PEFTs_alpha4, PEFTs_alphashot0, PEFTs_alphashot2 = PEFTs_derivatives(k_true, mu_true, pkl, PshotP)
1514 | PEFTs_alpha0_NW, PEFTs_alpha2_NW, PEFTs_alpha4_NW, PEFTs_alphashot0_NW, PEFTs_alphashot2_NW = PEFTs_derivatives(k_true, mu_true, pkl_NW, PshotP)
1515 |
1516 | exp_term = np.exp(-k_true**2 * Sigma2T)
1517 | exp_term_inv = 1 - exp_term
1518 |
1519 | #computing PIRs_derivatives for EFT and stochastic parameters
1520 | PIRs_alpha0 = exp_term * PEFTs_alpha0 + exp_term_inv * PEFTs_alpha0_NW
1521 | PIRs_alpha2 = exp_term * PEFTs_alpha2 + exp_term_inv * PEFTs_alpha2_NW
1522 | PIRs_alpha4 = exp_term * PEFTs_alpha4 + exp_term_inv * PEFTs_alpha4_NW
1523 | PIRs_alphashot0 = exp_term * PEFTs_alphashot0 + exp_term_inv * PEFTs_alphashot0_NW
1524 | PIRs_alphashot2 = exp_term * PEFTs_alphashot2 + exp_term_inv * PEFTs_alphashot2_NW
1525 |
1526 | return (PIRs_alpha0, PIRs_alpha2, PIRs_alpha4, PIRs_alphashot0, PIRs_alphashot2)
1527 |
1528 |
1529 | else:
1530 | k = kev; Fkoverf0 = Table[1]; fk = Fkoverf0*f0
1531 | pkl = Table[0]; pkl_NW = Table_NW[0];
1532 |
1533 | Sigma2T = Sigma2Total(kev, mu, Table_NW)
1534 |
1535 | #computing PEFTs_derivatives: wiggle and non-wiggle terms
1536 | PEFTs_alpha0, PEFTs_alpha2, PEFTs_alpha4, PEFTs_alphashot0, PEFTs_alphashot2 = PEFTs_derivatives(k, mu, pkl, PshotP)
1537 | PEFTs_alpha0_NW, PEFTs_alpha2_NW, PEFTs_alpha4_NW, PEFTs_alphashot0_NW, PEFTs_alphashot2_NW = PEFTs_derivatives(k, mu, pkl_NW, PshotP)
1538 |
1539 | exp_term = np.exp(-k**2 * Sigma2T)
1540 | exp_term_inv = 1 - exp_term
1541 |
1542 | #computing PIRs_derivatives for EFT and stochastic parameters
1543 | PIRs_alpha0 = exp_term * PEFTs_alpha0 + exp_term_inv * PEFTs_alpha0_NW
1544 | PIRs_alpha2 = exp_term * PEFTs_alpha2 + exp_term_inv * PEFTs_alpha2_NW
1545 | PIRs_alpha4 = exp_term * PEFTs_alpha4 + exp_term_inv * PEFTs_alpha4_NW
1546 | PIRs_alphashot0 = exp_term * PEFTs_alphashot0 + exp_term_inv * PEFTs_alphashot0_NW
1547 | PIRs_alphashot2 = exp_term * PEFTs_alphashot2 + exp_term_inv * PEFTs_alphashot2_NW
1548 |
1549 | return (PIRs_alpha0, PIRs_alpha2, PIRs_alpha4, PIRs_alphashot0, PIRs_alphashot2)
1550 |
1551 |
1552 | Nx = 8
1553 | xGL, wGL = scipy.special.roots_legendre(Nx) #x=cosθ and weights
1554 |
1555 | def ModelPkl0_derivatives(Table, Table_NW):
1556 | if AP == True:
1557 | monop = 1/(qperp**2 * qpar) * sum(0.5*wGL[ii]*np.array(PIRs_derivatives(kev, xGL[ii], Table, Table_NW)) for ii in range(Nx))
1558 | return monop
1559 |
1560 | else:
1561 | monop = sum(0.5*wGL[ii]*np.array(PIRs_derivatives(kev, xGL[ii], Table, Table_NW)) for ii in range(Nx))
1562 | return monop
1563 |
1564 |
1565 | def ModelPkl2_derivatives(Table, Table_NW):
1566 | if AP == True:
1567 | quadrup = 1/(qperp**2 * qpar) * sum(5/2*wGL[ii]*np.array(PIRs_derivatives(kev, xGL[ii], Table, Table_NW))*eval_legendre(2, xGL[ii]) for ii in range(Nx))
1568 | return quadrup
1569 |
1570 | else:
1571 | quadrup = sum(5/2*wGL[ii]*np.array(PIRs_derivatives(kev, xGL[ii], Table, Table_NW))*eval_legendre(2, xGL[ii]) for ii in range(Nx))
1572 | return quadrup
1573 |
1574 |
1575 | def ModelPkl4_derivatives(Table, Table_NW):
1576 | if AP == True:
1577 | hexadecap = 1/(qperp**2 * qpar) * sum(9/2*wGL[ii]*np.array(PIRs_derivatives(kev, xGL[ii], Table, Table_NW))*eval_legendre(4, xGL[ii]) for ii in range(Nx))
1578 | return hexadecap
1579 |
1580 | else:
1581 | hexadecap = sum(9/2*wGL[ii]*np.array(PIRs_derivatives(kev, xGL[ii], Table, Table_NW))*eval_legendre(4, xGL[ii]) for ii in range(Nx))
1582 | return hexadecap
1583 |
1584 | if Hexa == False:
1585 | Pkl0_derivatives = ModelPkl0_derivatives(TableOut_interp(kev), TableOut_NW_interp(kev));
1586 | Pkl2_derivatives = ModelPkl2_derivatives(TableOut_interp(kev), TableOut_NW_interp(kev));
1587 | return (Pkl0_derivatives, Pkl2_derivatives)
1588 |
1589 | else:
1590 | Pkl0_derivatives = ModelPkl0_derivatives(TableOut_interp(kev), TableOut_NW_interp(kev));
1591 | Pkl2_derivatives = ModelPkl2_derivatives(TableOut_interp(kev), TableOut_NW_interp(kev));
1592 | Pkl4_derivatives = ModelPkl4_derivatives(TableOut_interp(kev), TableOut_NW_interp(kev));
1593 | return (Pkl0_derivatives, Pkl2_derivatives, Pkl4_derivatives)
1594 |
1595 |
1596 |
1597 |
1598 | #Marginalization matrices
1599 |
1600 | def startProduct(A, B, invCov):
1601 | '''Computes: A @ InvCov @ B^{T}, where 'T' means transpose.
1602 |
1603 | Args:
1604 | A: first vector, array of the form 1 x n
1605 | B: second vector, array of the form 1 x n
1606 | invCov: inverse of covariance matrix, array of the form n x n
1607 |
1608 | Returns:
1609 | The result of: A @ InvCov @ B^{T}
1610 | '''
1611 |
1612 | return A @ invCov @ B.T
1613 |
1614 |
1615 |
1616 |
1617 | def compute_L0(Pl_const, Pl_data, invCov):
1618 | '''Computes the term L0 of the marginalized Likelihood.
1619 |
1620 | Args:
1621 | Pl_const: model multipoles for the constant part (Pℓ,const = Pℓ(α->0)), array of the form 1 x n
1622 | Pl_data: data multipoles, array of the form 1 x n
1623 | invCov: inverse of covariance matrix, array of the form n x n
1624 |
1625 | Return:
1626 | Loglikelihood for the constant part of the model multipoles
1627 | '''
1628 |
1629 | D_const = Pl_const - Pl_data
1630 |
1631 | L0 = -0.5 * startProduct(D_const, D_const, invCov) #eq. 2.4 notes on marginalization
1632 |
1633 | return L0
1634 |
1635 |
1636 |
1637 |
1638 | def compute_L1i(Pl_i, Pl_const, Pl_data, invCov):
1639 | '''Computes the term L1i of the marginalized Likelihood.
1640 |
1641 | Args:
1642 | Pl_i: array with the derivatives of the power spectrum multipoles with respect to
1643 | the EFT and stochastic parameters, i.e., Pℓ,i=∂Pℓ/∂α_i , i = 1,..., ndim
1644 | array of the form ndim x n
1645 | Pl_const: model multipoles for the constant part (Pℓ,const = Pℓ(α->0)), array of the form 1 x n
1646 | Pl_data: data multipoles, array of the form 1 x n
1647 | invCov: inverse of covariance matrix, array of the form n x n
1648 | Return:
1649 | array for L1i
1650 | '''
1651 |
1652 | D_const = Pl_const - Pl_data
1653 |
1654 | #ndim = len(Pl_i)
1655 |
1656 | #computing L1i
1657 | #L1i = np.zeros(ndim)
1658 |
1659 | #for ii in range(ndim):
1660 | # term1 = startProduct(Pl_i[ii], D_const, invCov)
1661 | # term2 = startProduct(D_const, Pl_i[ii], invCov)
1662 | # L1i[ii] = -0.5 * (term1 + term2)
1663 |
1664 | L1i = - startProduct(Pl_i, D_const, invCov)
1665 |
1666 | return L1i
1667 |
1668 |
1669 |
1670 |
1671 | def compute_L2ij(Pl_i, invCov, sigma_prior = np.inf):
1672 | '''Computes the term L2ij of the marginalized Likelihood.
1673 |
1674 | Args:
1675 | Pl_i: array with the derivatives of the power spectrum multipoles with respect to
1676 | the EFT and stochastic parameters, i.e., Pℓ,i=∂Pℓ/∂α_i , i = 1,..., ndim
1677 | array of the form ndim x n
1678 | invCov: inverse of covariance matrix, array of the form n x n
1679 | Return:
1680 | array for L2ij
1681 | '''
1682 |
1683 | #ndim = len(Pl_i)
1684 |
1685 | #Computing L2ij
1686 | #L2ij = np.zeros((ndim, ndim))
1687 |
1688 | #for ii in range (ndim):
1689 | #for jj in range (ndim):
1690 | #L2ij[ii, jj] = startProduct(Pl_i[ii], Pl_i[jj], invCov)
1691 |
1692 | L2ij = startProduct(Pl_i, Pl_i, invCov)
1693 |
1694 | # Adding prior variances to L2ij
1695 | if isinstance(sigma_prior, (int, float)):
1696 | L2ij += 1 / (sigma_prior ** 2)
1697 | else:
1698 | L2ij += np.diag(1 / np.array(sigma_prior) ** 2)
1699 |
1700 | return L2ij
1701 |
--------------------------------------------------------------------------------