首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用synalm生成的字段的Cls与输入的Cls和使用synfast生成的字段的Cls不一致

使用synalm生成的字段的Cls与输入的Cls和使用synfast生成的字段的Cls不一致
EN

Stack Overflow用户
提问于 2019-01-19 00:00:26
回答 1查看 172关注 1票数 2

我正在从输入角功率谱Cl生成随机的健康图。如果我使用healpy.synalm,然后使用healpy.alm2map,最后通过在生成的map上运行healpy.anafast来测试map,输出和输入功率谱不一致,特别是在高l时,输出功率谱高于输入(See plot produced by code below)。如果我直接使用healpy.synfast,我会得到与输入一致的输出功率谱。如果我使用来自healpy.synfast的分配,并使用healpy.alm2map从synfast分配生成映射,这同样适用。当我查看synfast的源代码时,它似乎只是调用synalm和alm2map,所以我不明白为什么他们的结果不一致。我的测试代码如下所示:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import classy
import healpy as hp

NSIDE = 32


A_s=2.3e-9
n_s=0.9624
h=0.6711
omega_b=0.022068
omega_cdm=0.12029

params = {
'output': 'dCl, mPk',
'A_s': A_s,
'n_s': n_s,
'h': h,
'omega_b': omega_b,
'omega_cdm': omega_cdm,
'selection_mean': '0.55',
'selection_magnification_bias_analytic': 'yes',
'selection_bias_analytic': 'yes',
'selection_dNdz_evolution_analytic': 'yes'}

cosmo = classy.Class()
cosmo.set(params)
cosmo.compute()
theory_cl=cosmo.density_cl()['dd']

data_map,data_alm=hp.synfast(theory_cl[0],NSIDE,alm=True)
data_cl=hp.anafast(data_map)
plt.plot(np.arange(len(data_cl)),data_cl,label="synfast")
data_map=hp.alm2map(data_alm,NSIDE)
data_cl=hp.anafast(data_map)
plt.plot(np.arange(len(data_cl)),data_cl,label="synfast using alm")

data_alm=hp.synalm(theory_cl[0])
data_map=hp.alm2map(data_alm,NSIDE)
data_cl=hp.anafast(data_map)
plt.plot(np.arange(len(data_cl)),data_cl,label="synalm")

plt.plot(np.arange(min(len(data_cl),len(theory_cl[0]))),theory_cl[0][:len(data_cl)],label="Theory")
plt.xlabel(r'$\ell$')
plt.ylabel(r'$C_\ell$')
plt.legend()
plt.show()

偏移量越低,偏移量越大。

非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-01-22 20:57:53

对不起,我错过了synfast知道NSIDE,所以lmax默认基于NSIDE,而synalm不知道,所以它将输入频谱的最大l取为lmax。在synalm中将lmax设置为3* NSIDE -1可解决该差异。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54257478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档