2014-08-28 95 views
1

我試圖在healpix地圖上使用healpy來產生一個波束。對於初學者,我希望能夠在mollweide投影中產生2D高斯,但我真的不知道從哪裏開始。在healpy中繪製一個numpy數組

我可以定義一個二維高斯:

import numpy as np 
def gaussian_2D(x,y,mu_x=0.,mu_y=0.,sig_x=1.,sig_y=1.): 
    return np.exp(-0.5*(((x-mu_x)/sig_x)**2 + ((y-mu_y)/sig_y)**2)) 

,這樣我可以建立類似的三維X,Y,Z空間:

delta = 0.025 
x = np.arange(-4, 4, delta) 
y = np.arange(-4, 4, delta) 
X, Y = np.meshgrid(x,y) 
Z = gaussian_2D(X,Y) 

,但在這裏我幾乎失去了,並且無法追蹤有關如何和/或投影什麼的許多有用的文檔。任何有關攻擊方向的建議都將非常感謝!

+0

'healpy'使用HEALPix像素化,所以a * map *是一維數組,其中索引對應於像素。如果你只需要一個Mollweide投影,你可以使用'matplotlib',參見http://matplotlib.org/examples/pylab_examples/geo_demo.html – 2014-08-28 22:28:56

回答

0

這裏是我如何做到這一點:

使用一個小竅門。我在所需的高斯中心插入一個點,然後使用「塗抹」創建一些西格瑪高斯。

下面是一些例子:

#!/usr/bin/env python 
import numpy as np 
import healpy as hp 
import pylab as pl 

NSIDE=512 #the map garannularity 

m_sm=np.arange(hp.nside2npix(NSIDE)) # creates the map 
m_sm=m_sm*0. # sets all values to zero 

theta=np.radians(80.) # coordinates for the gaussian 
phi=np.radians(20.) 

indx=hp.pixelfunc.ang2pix(NSIDE,theta,phi) # getting the index of the point corresponding to the coordinates 
m_sm[indx]=1. # setting that point value to 1. 

gmap=hp.smoothing(m_sm, sigma=np.radians(20.),verbose=False,lmax=1024) # creating a new map, smmeared version of m_sm 

hp.mollview(gmap, title="Gaussian Map") #draw it 
pl.show() 

現在如果你想這樣做手工,你可以使用一個功能對於高斯

1)你給它的一些座標

2 )您檢索對應於該座標的索引使用:

indx=hp.pixelfunc.ang2pix(NSIDE,theta,phi) 

3)您將該點的值與高斯函數的值相比較。即:

my_healpy_map[indx]=my_gauss(theta, phy, mean_theta, mean_phy, sigma_theta, sigma_phy)