我有一个星系列表要绘制到 healpix 地图上(我正在使用 healpy 来做)每个星系都有一个固定的通量,我需要以这样的方式绘制它们,以便每个星系的通量在地图上保持不变.
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
import healpy as hp
pi = np.pi
nside = 8
xsize = 100
ra = np.array([pi/4,pi/3])
dec = np.array([pi/4,pi/3])
flux = np.array([10,20])
hpm = np.zeros(hp.nside2npix(nside)) #Blank healpix map
pixindex = hp.ang2pix(nside, dec, ra)
np.add.at(hpm,pixindex,flux) #Add flux onto correct pixels
img=hp.mollview(hpm,coord=['E'],xsize=xsize,return_projected_map=True)
print(np.sum(img[img>0]))
我得到的结果是 140 而不是 30,这是通量的真实总和。
我知道发生了什么,并且相同的通量分布在多个像素上(第一个星系为 6 个像素,第二个星系为 4 个像素),我知道我可以这样做:
newimg = img * (np.sum(flux)/np.sum(img[img>0]))
这将保留总光子数,但不一定会保留我需要的每个星系的光子数。即这种方法最终导致第一个星系贡献了 12.86 的通量,而第二个星系贡献了 17.14 的通量。
有没有办法在每个坐标占用多少像素之前计算出,然后根据这个改变倾倒的通量?
提前致谢!