2

入力角度パワー スペクトル Cl からランダムな healpix マップを生成しています。healpy.synalm を使用し、次に healpy.alm2map を使用し、最後に生成されたマップで healpy.anafast を実行してマップをテストすると、出力パワー スペクトルと入力パワー スペクトルが一致しません。特に高 l では、出力パワー スペクトルが入力より上になります。 (以下のコードによって生成されたプロットを参照してください)。healpy.synfast を直接使用すると、入力と一致する出力パワー スペクトルが得られます。同じことは、healpy.synfast の施しを使用し、healpy.alm2map を使用して synfast 施しからマップを生成する場合にも当てはまります。synfast のソース コードを調べると、synalm と alm2map を呼び出すだけのようで、結果が一致しない理由がわかりません。私のテストコードは次のようになります。

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()

オフセットは NSIDE が低いほど大きくなります。

ご助力ありがとうございます。

4

1 に答える 1