astropy_healpix

14000 단어 astropyAstronomyPython

개요


나는 HEALPix를 그릴 때 HEALPy를 사용하는 것이 좋다고 생각한다(참고문: "파이톤으로 HEALPix 그리기". 그러나 astropy는 현재 HEALPix에 대응하는 도구를 개발하고 있다.그래서 이번에는 이 도구로 데이터를 그리는 것을 목표로 하는 글을 쓸 것이다.

install


PyPI에 로그인되어 다음 명령을 사용하여 간단하게 설치할 수 있습니다.
pip install astropy-healpix
공식 문서에서도 conda를 사용하는 설치 방법을 소개했으니 적당히 참고하시기 바랍니다.

각본


이번에는 다음과 같은 스크립트를 사용했습니다.
#!/usr/bin/env python3

from astropy import units as u
from astropy.coordinates import Galactic
from astropy.coordinates import SkyCoord
from astropy_healpix import HEALPix
from astropy.io import fits 
import numpy as np
import matplotlib.pyplot as plt 


# read Planck data
planck_map = fits.open('./LFI_SkyMap_030_1024_R2.01_full.fits')

# get fits info
nside = planck_map[1].header['NSIDE']
order = planck_map[1].header['ORDERING']
# set map data
ttype = planck_map[1].header['TTYPE1']
tmap = planck_map[1].data[ttype]

hp = HEALPix(nside=nside, order=order, frame=Galactic())

# sample a 360, 180 grid in RA/Dec
ra = np.linspace(180., -180., 360) * u.deg
dec = np.linspace(90., -90., 180) * u.deg
ra_grid, dec_grid = np.meshgrid(ra, dec)

# set up astropy coordinate objects
coords = SkyCoord(ra_grid.ravel(), dec_grid.ravel(), frame='galactic')

# interpolate values
tmap = hp.interpolate_bilinear_skycoord(coords, tmap)
tmap = tmap.reshape((180, 360))

# make a plot of the interpolated temperatures
plt.figure(figsize=(9, 4.5))
im = plt.imshow(tmap, extent=[-180, 180, -90, 90], cmap='jet', aspect='auto', vmin=0, vmax=1e-3)
plt.colorbar(im)
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.show()
이 작업을 수행하면 다음 그래픽이 작성됩니다.

스크립트 세부 정보


fits.open


다음 줄에서 읽기Planeck의 종일 데이터 맵.
planck_map = fits.open('./LFI_SkyMap_030_1024_R2.01_full.fits')

[1].header

nside = planck_map[1].header['NSIDE']
order = planck_map[1].header['ORDERING']
ttype = planck_map[1].header['TTYPE1']
참조"astropy.io를 통해fits 파일에 대한 정보를 얻습니다."N_side,Ordering 등fits파일의 정보를 얻습니다.여기TTYPE1를 선택했기 때문에 IStokes 데이터가 그려집니다.

HEALPix()

hp = HEALPix(nside=nside, order=order, frame=Galactic())
여기에 HEALPix가 설정되어 있습니다.frame=Galactic()에서 이것은 은하 좌표계의 데이터라고 성명하였다.

SkyCoord()

coords = SkyCoord(ra_grid.ravel(), dec_grid.ravel(), frame='galactic')
여기에 은하수 좌표ra_grid, dec_grid 범위의 각도도를 설정했다.시험해 보다
coords = SkyCoord(ra_grid.ravel(), dec_grid.ravel(), frame='icrs')
표시되는 데이터는 다음과 같습니다.

interpolate_bilinear_skycoord()

tmap = hp.interpolate_bilinear_skycoord(coords, tmap)
tmap = tmap.reshape((180, 360))
interpolate_bilinear_skycoord 함수를 사용하여 이전에 설정한 coords 좌표ttype에 입력한 데이터 집합tmap을 변환하고 reshape 함수를 사용하여 데이터의 크기를 성형한다.

잘못


잘못된 문장


만약 astropy의 버전이 낡았다면 다음과 같은interpolatebilinear_스카이코드에서 오류가 있었던 것 같습니다.
Traceback (most recent call last):
  File "example5.py", line 33, in <module>
    tmap = hp.interpolate_bilinear_skycoord(coords, tmap)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/astropy_healpix/high_level.py", line 362, in interpolate_bilinear_skycoord
    return self.interpolate_bilinear_lonlat(lon, lat, values)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/astropy_healpix/high_level.py", line 201, in interpolate_bilinear_lonlat
    return interpolate_bilinear_lonlat(lon, lat, values, order=self.order)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/astropy_healpix/core.py", line 551, in interpolate_bilinear_lonlat
    indices, weights = bilinear_interpolation_weights(lon, lat, nside, order=order)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/astropy_healpix/core.py", line 512, in bilinear_interpolation_weights
    lon = lon.to_value(u.rad)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/astropy/units/quantity.py", line 888, in __getattr__
    self.__class__.__name__, attr))
AttributeError: Longitude instance has no attribute 'to_value'

해결책


다음 명령으로 astropy를 업데이트하면 오류가 발생하지 않습니다.
pip install -U astropy

결어


각종 우주 물리의 편의 라이브러리를 사용할 수 있는 astropy를 사용하여fits를 읽고 데이터를 그려봅니다.단순히 HEALPix를 그리는 것만으로도 힐피의 군배가 상승할 수 있다.그러나 가장 중요한 것은astropy와fits파일의 읽기, 데이터 가공을 연합할 수 있는astropy이다힐픽스의 강점인 것 같아서요.

좋은 웹페이지 즐겨찾기