Cls для полей, созданных с помощью synalm, не согласны с входными Cls и Cls для полей, созданных с помощью Synfast - PullRequest
0 голосов
/ 18 января 2019

Я генерирую случайные карты healpix из входного углового спектра мощности Cl. Если я использую healpy.synalm, затем healpy.alm2map и, наконец, протестирую карту, запустив healpy.anafast на сгенерированной карте, спектры выходной и входной мощности не совпадают, особенно при высоких значениях l, спектр выходной мощности выше входного ( См. График, представленный кодом ниже ). Если я непосредственно использую healpy.synfast, я получаю спектр выходной мощности, который согласуется с входом. То же самое применимо, если я использую милостыню от healpy.synfast и генерирую карту из синфастных милостынь, используя healpy.alm2map. Когда я просматриваю исходный код 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.

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 22 января 2019

Извините, я пропустил, что synfast знает о NSIDE, поэтому lmax по умолчанию основан на NSIDE, тогда как synalm об этом не знает, поэтому он принимает максимальный l входного спектра как lmax. Установка lmax на 3 * NSIDE -1 в synalm устраняет расхождение.

...