fits를 아타마에서 만들고 싶다.

소개



천문 데이터에서 자주 사용되는 fits와 친해졌다고 생각했을 때 기록을 남겨 갑니다.
이것은 fits란 무엇인가라고 하는 것을 공부하기 위해서 1부터 만들어 보았습니다.

우선, fits는 천문 데이터에 자주 사용되는 파일 형식이며, 좌표, 주파수 등의 정보를 저장하는 헤더부와 관측으로부터 얻어진 정보를 저장하는 데이터부의 2로 구성된다. 자세한 내용은 wikipedia에서 ... (도망)
htps : // 그럼.ぃきぺぢ아. 오 rg / uki / fu TS

fits 만들기



어쨌든 고민한 fits의 창조. 정말 이 방법으로 좋은가. . . 좋다고 믿고 싶다.
우선 [100, 100]의 배열을 가지는 fits를 만드는 스크립트를 나타냅니다.

make_fits_1.py
import numpy as np
from astropy.io import fits

x = 100      #x_axis pixel number
y = 100      #y_axis pixel number
z = 100      #z_axis pixel number

###配列の作成###
#3次元の時
data = np.zeros((z, y, x), dtype=np.float32)
#2次元の時
#data = np.zeros((y, x), dtype=np.float32)

hdu = fits.PrimaryHDU(data = data)

#作ったfitsの保存
hdu.writeto('make_fits.fits',overwrite=True)

3차원 cube의 fits를 만들 때는 '배열 만들기' 부분을 변경합니다.
이 상태에서는 아직 헤더를 넣고 있지 않기 때문에 ds9등으로 표시해도 짜증나는 것 밖에 나오지 않는다.


헤더를 넣자.
헤더의 추가는 이것으로 할 수 있다.

헤더 추가


hdu.header['keyword'] = 'something' #keywordの時
hdu.header['keyword'] = something   #座標といった数値情報を入れる時

시험에 100x100의 배열을 가지고,
WCS: Galactic
center position 00:00:00.00 00:00:00.00 gal
beamsize 20.0 arcsec
gridsize 10.0 arcsec
fits를 만들어보십시오.

make_fits_2.py
import numpy as np
from astropy.io import fits

x = 100      #x_axis pixel number
y = 100      #y_axis pixel number
z = 100      #z_axis pixel number

beamsize = 20.0 #arcsec

###配列の作成###
#3次元の時
data = np.zeros((z, y, x), dtype=np.float32)
#2次元の時
data = np.zeros((y, x), dtype=np.float32)

hdu = fits.PrimaryHDU(data = data)

#入れたいヘッダ一覧                                      
hdu.header['BITPIX']  =                  -64                                                 
hdu.header['NAXIS']   =                    2                                                 
hdu.header['NAXIS1']  =                  x                                                  
hdu.header['NAXIS2']  =                  y
hdu.header['BPA']     = 0.000000
hdu.header['BMAJ']    = beamsize/3600                                                  
hdu.header['BMIN']    = beamsize/3600
hdu.header['EPOCH']   =                 2000                                                                                                    
hdu.header['BUNIT']  = 'K       '                                                                                                    
hdu.header['CTYPE1']  = 'GLON-GLS'                                                            
hdu.header['CRVAL1']  =                  0.0                                                  
hdu.header['CDELT1']  =     -beamsize/2/3600                                                  
hdu.header['CRPIX1']  =                  x/2                                                  
hdu.header['CROTA1']  =                  0.0                                                  
hdu.header['CUNIT1']  = 'deg     '                                                            
hdu.header['CTYPE2']  = 'GLAT-GLS'                                                            
hdu.header['CRVAL2']  =                  0.0                                                  
hdu.header['CDELT2']  =      beamsize/2/3600                                                  
hdu.header['CRPIX2']  =                  y/2                                                  
hdu.header['CROTA2']  =                  0.0                                                  
hdu.header['CUNIT2']  = 'deg     '          

#作ったfitsの保存
hdu.writeto('make_fits_2.fits',overwrite=True)

이것으로 제대로 좌표 정보가 들어간 fits를 만들 수 있었습니다.


fits를 만드는 주의점(자신에게의 계명)



헤더를 잘못하면 잘못된 데이터가 되어 버리므로 확인은 확실히합시다.

좋은 웹페이지 즐겨찾기