2013-07-31 10 views
2

Я посмотрел повсюду и не нашел решения этой проблемы. Я чувствую, что это должно быть довольно просто, но мы посмотрим.Свертывание/сглаживание куба данных FITS в python

У меня есть кубик данных формата .FITS, и мне нужно свернуть его в изображение 2D FITS. Куб данных имеет два пространственных размера и один спектральный/размерный размер.

Просто ищет простую подпрограмму python для загрузки в кубе и сглаживания всех этих слоев (т. Е. Интегрировать их по оси спектрального/скоростного). Спасибо за любую помощь.

+0

Как именно ваши данные ПОДХОДИТ отформатирован? Я бы рекомендовал использовать модули python 'pyfits' и' matplotlib.pyplot'. –

ответ

2

ОК, это похоже на работу:

import pyfits 
import numpy as np 

hdulist = pyfits.open(filename) 
header = hdulist[0].header 
data = hdulist[0].data 
data = np.nan_to_num(data) 
new_data = data[0] 

for i in range(1,84):    #this depends on number of layers or pages 
    new_data += data[i] 

hdu = pyfits.PrimaryHDU(new_data) 
hdu.writeto(new_filename) 

Одна из проблем этой процедуры является то, что координаты WCS (которые прикреплены к исходной кубе данных) теряются во время этого преобразования.

4

This tutorial on pyfits немного старый, но все еще в основном правильный. Ключ состоит в том, что вывод открытия куба FITS с pyfits (или astropy.io.fits) состоит в том, что у вас есть трехмерный массив numpy.

import pyfits 
# if you are using astropy then for this example 
# from astropy.io import fits as pyfits 

data_cube, header_data_cube = pyfits.getdata("data_cube.fits", 0, header=True) 
data_cube.shape 
# (Z, X, Y) 

Затем вы должны решить, как выравниваться/интегрировать куб вдоль оси Z, и есть много ресурсов, там, чтобы помочь вам решить, право (надеюсь, основанное в некоторых рамках анализа), чтобы сделать это.

1

Это немного старый вопрос, но spectral-cube теперь обеспечивает лучшее решение для этого.

Пример, основанный на ответ Teachey в:

from spectral_cube import SpectralCube 
cube = SpectralCube.read(filename) 

summed_image = cube.sum(axis=0) 
summed_image.hdu.writeto(new_filename) 

 Смежные вопросы

  • Нет связанных вопросов^_^