2016-08-16 20 views
1

私は滑らかなヒーププリックスマップ(添付図、LHS参照)を作成したい128ポイントからなる粗いスカイマップを持っています。本文中で参照数字:私は私のデータをロード補間後のヒラルピ座標誤差:二等分線の出現

here

、最終的なマップのための適切なピクセル長(と例えばn側= 32)の新たな経度と緯度のアレイを作ります。

私の入力データは以下のとおりです。n側からのピクセル数に基づいて

lats = pi/2 + ths # theta from 0, pi, size 8 
lons = phs   # phi from 0, 2pi, size 16 
data = sky_data[0] # shape (8,16) 

新経度/緯度配列サイズ:

nside = 32 
pixIdx = hp.nside2npix(nside) # number of pixels I can get from this nside 
pixIdx = np.arange(pixIdx) # pixel index numbers 

私は、補間によってこれらのピクセルのための新しいデータ値を見つけ、次に角度からピクセルに変換することができます。

# new lon/lat 
new_lats = hp.pix2ang(nside, pixIdx)[0] # thetas I need to populate with interpolated theta values 
new_lons = hp.pix2ang(nside, pixIdx)[1] # phis, same 

# interpolation 
lut = RectSphereBivariateSpline(lats, lons, data, pole_values=4e-14) 
data_interp = lut.ev(new_lats.ravel(), new_lons.ravel()) #interpolate the data 
pix = hp.ang2pix(nside, new_lats, new_lons) # convert latitudes and longitudes back to pixels 

そして、Iは補間値とhealpyマップ構築:

healpix_map = np.zeros(hp.nside2npix(nside), dtype=np.double) # create empty map 
healpix_map[pix] = data_interp # assign pixels to new interpolated values 
testmap = hp.mollview(healpix_map) 

地図の結果は、添付図の上部RHSあります。

(ジェットの使用を許す - ビリディスがゼロ「白」を持っていないので、そのカラーマップを使用すると、青い背景が追加されます。)

マップが正しく表示されません:あなたはから見ることができます下のRHSに「ホットスポット」があるはずですが、ここでは左上に表示されています。

は、健全性チェックとして、私はそれがマップのように見えるようにマーカのエッジを除去mollview投影、図2における補間点の散布図を作るためにmatplotlibの使用;)

ax = plt.subplot(111, projection='astro mollweide') 
ax.grid() 
colors = data_interp 
sky=plt.scatter(new_lons, new_lats-pi/2, c = colors, edgecolors='none', cmap ='jet') 
plt.colorbar(sky, orientation = 'horizontal') 

添付のFigureのRHSが低いこのマップは、私が期待しているものを正確に生成していることがわかります!座標は大丈夫です。私は完全に混乱しています。

誰もこれまでに遭遇したことはありますか?私に何ができる?私はこのマップと将来のマップでhealpy関数を使用したいので、matplotlibを使用するだけではオプションではありません。

ありがとうございます!

+0

問題を再現するサンプルデータセット( 'sky_data')を提供することができますので、自分で試してみることができますか? –

+0

こんにちは@ダビッド-z、私に戻ってくれてありがとう。わかりやすくするために、ipythonノートブックを[public git repository](https://github.com/ChiaraMingarelli/healpix_maps)にデータとともに追加しました。遊びます! –

答えて

0

私はヒアルピックスの専門家ではありません(実際に私はこれまで粒子の物理学者ではありませんでした)が、私は慣習の問題であると言えます。モルワイドの投影では、何らかの理由で、地図の下部に北極(正の緯度)があります。なぜそれがそれを行うのか、これが意図的な行動かどうかはわかりませんが、起こっていることはかなり明白です。私が赤道より下のすべてを隠すと、つまり

masked plot from healpy

少なくとも、それは修正するのは簡単です:それはセンターライン上のデータのないプロットを思い付く

mask = new_lats - pi/2 > 0 
pix = hp.ang2pix(nside, new_lats[mask], new_lons[mask]) 
healpix_map = np.zeros(hp.nside2npix(nside), dtype=np.double) 
healpix_map[pix] = data_interp[mask] 
testmap = hp.mollview(healpix_map) 

のみ正緯度ポイントを保ちます。 mollviewは、投影軸のまわりで球を効果的に回転させるrotパラメータと、'astro'(デフォルト)または'geo'に設定することができるflipパラメータを使用して、東が左または右に表示されるかどうかを設定します。ほとんどの実験を使用して、タプルの

hp.mollview(healpix_map, rot=(180, 0, 180), flip='geo') 

で必要な座標系を得ることを示し、最初の2つの要素はプロットの中心に設定する点の経度および緯度であり、そして第三の要素であります回転。すべては度です。私はあなたが探しているものだけであると考えてい

unmasked rotated image

:なしマスクを使えば、これを提供します。

+0

ありがとう@ David-z、それは実際に大会の問題でしたが、この提案された修正は正解を示していません(上記の解決策:)。 –

+0

ああ、私はそれを逃した、申し訳ありません!私はあまりにも疲れていた。あなた自身で見つけたので、私の解決策が本当に必要なわけではありませんが、答えを修正するために更新します。 –

+0

@ David-zのお手伝いをしていただきありがとうございます!再度、感謝します。 –

1

私はそれを考え出した - 最後に正しくレンダリングするイメージのために、次の変換を適用する必要があるので、私は、補間が機能するために私のthetasにパイ/ 2を追加する必要がありました:

newnew_lats = pi - new_lats 
newnew_lons = pi + new_lons 

見た目は今はあまり見えませんが、まだ補間に関する問題があるようです。私は比較するために別のものを試してみるかもしれません。

関連する問題