Свертывание / выравнивание куба данных FITS в python
Я посмотрел повсюду и не нашел решения этой проблемы. Я чувствую, что это должно быть довольно просто, но посмотрим.
У меня есть куб данных формата.FITS, и мне нужно свернуть его в 2D-изображение FITS. Куб данных имеет два пространственных измерения и одно измерение спектра / скорости.
Просто ищем простую подпрограмму Python для загрузки в куб и выравнивания всех этих слоев (т.е. интегрируем их вдоль оси спектра / скорости). Спасибо за любую помощь.
3 ответа
ОК, это похоже на работу:
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 (которые присоединены к исходному кубу данных) теряются во время этого преобразования.
Этот урок по 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, и есть множество ресурсов, которые помогут вам решить, как правильно (надеемся, на основе некоторой структуры анализа) сделать это.
Это немного старый вопрос, но спектральный куб теперь предлагает лучшее решение для этого.
Пример, основанный на ответе Тичи:
from spectral_cube import SpectralCube
cube = SpectralCube.read(filename)
summed_image = cube.sum(axis=0)
summed_image.hdu.writeto(new_filename)