运行healpy. sphtfunction出错.Alm2map, alm大小与l_max不同 &g



我运行healpy.sphtfunc。Alm2map将alm作为l_max = 256的数组传递,并要求输出l_max = 191的映射,但该函数似乎不能正确接受新的l_max。

下面是我所做的示例代码,使用人工生成的施舍:

import healpy as hp                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
import numpy as np
#nside and lmax                                                                                                                                                                                             
nside_high = 128 
lmax_high= 2*nside_high
nside_low = 64 
lmax_low= 3*nside_low-1
#Cl
Cl = np.ones(lmax_high)
#Alm
Alm = hp.synalm(Cl, lmax = lmax_high)
#Map
Map = hp.alm2map(Alm, nside = nside_low, lmax = lmax_low)

我得到这个错误:

ValueError                                Traceback (most recent call last)
/var/folders/k_/2j08yy711tb17zmmsznfx1zh0000gn/T/ipykernel_9189/2207532576.py in <cell line: 18>()
16 
17 #Map
---> 18 Map = hp.alm2map(Alm, nside = nside_l, lmax = lmax_l)
/opt/anaconda3/lib/python3.8/site-packages/astropy/utils/decorators.py in wrapper(*args, **kwargs)
552                     warnings.warn(msg, warning_type, stacklevel=2)
553 
--> 554             return function(*args, **kwargs)
555 
556         return wrapper
/opt/anaconda3/lib/python3.8/site-packages/healpy/sphtfunc.py in alm2map(alms, nside, lmax, mmax, pixwin, fwhm, sigma, pol, inplace, verbose)
502         mmax = -1
503     if pol:
--> 504         output = sphtlib._alm2map(
505             alms_new[0] if lonely else tuple(alms_new), nside, lmax=lmax, mmax=mmax
506         )
ValueError: Wrong alm size.

有人能帮忙吗?

alm2maplmax参数的作用只是处理具有mmax != lmax的输入救济品,它们不能用于裁剪救济品

目前最简单的裁剪方法是:

alm_clipped = hp.almxfl(Alm, np.ones(lmax_low+1))
Map = hp.alm2map(alm_clipped, nside = nside_low)

下一个版本的healpy将有一个专用的功能resize_alm:

https://github.com/healpy/healpy/pull/803

在将来使用这个函数来自动处理这个会很好,我打开了一个问题来跟踪这个:

https://github.com/healpy/healpy/issues/817

最新更新